推特API(Twitter API)V2 查詢用戶信息

????????前面章節已經介紹使用code換取Token的整個流程了,這里不再重復闡述了,下面我們介紹如何使用Token查詢用戶信息等操作。

1.引入相關依賴Maven

<dependency>
? ? <groupId>oauth.signpost</groupId>
? ? <artifactId>signpost-core</artifactId>
? ? <version>1.2.1.2</version>
</dependency>

<dependency>
? ? <groupId>oauth.signpost</groupId>
? ? <artifactId>signpost-commonshttp4</artifactId>
? ? <version>1.2.1.2</version>
</dependency>

<dependency>
? ? <groupId>com.twitter</groupId>
? ? <artifactId>twitter-api-java-sdk</artifactId>
? ? <version>1.1.4</version>
</dependency>

<dependency>
? ? <groupId>commons-httpclient</groupId>
? ? <artifactId>commons-httpclient</artifactId>
? ? <version>3.1</version>
</dependency><dependency>
? ? <groupId>com.google.guava</groupId>
? ? <artifactId>guava</artifactId>
? ? <version>29.0-jre</version>
</dependency>

2.相關的配置類

/*** 推特相關配置*/
public class TwitterConfig {/*** 客戶id和客戶私鑰*/public static final String CLIENT_ID = "c3dqY111tjbnFPNDM6MTpjaQ";public static final String CLIENT_SECRET = "kf1119fmdeXZHpOV-fjv9umx55ZdccCkNONjea";/*** 應用KYE和私鑰*/public static final String CONSUMER_KEY = "lhyfiD111MffGeHMR";public static final String CONSUMER_SECRET = "BRNxnV5Lx111jtptduIkcwjB";/*** 應用的TOKEN*/public static final String ACCESS_TOKEN = "14821111633-A8xyN5111FgkbStu";public static final String ACCESS_TOKEN_SECRET = "oZaKBphpoo111SZvzoXPAQ";}

3.查詢開發者賬號的推特信息

public JSONObject getUserInfo(){//下面需要開發者門戶里面的key和私鑰,還包括Token和私鑰CommonsHttpOAuthConsumer consumer = new CommonsHttpOAuthConsumer(TwitterConfig.CONSUMER_KEY, TwitterConfig.CONSUMER_SECRET);consumer.setTokenWithSecret(TwitterConfig.ACCESS_TOKEN, TwitterConfig.ACCESS_TOKEN_SECRET);// 創建HttpClient對象HttpClient httpClient = this.setProxy();// 創建API請求,例如獲取用戶的時間線try {//請求的地址URIBuilder uriBuilder = new URIBuilder("https://api.twitter.com/2/users/me");ArrayList<NameValuePair> queryParameters;queryParameters = new ArrayList<>();//我們需要查詢用戶的那些信息queryParameters.add(new BasicNameValuePair("user.fields", "id,name,username,profile_image_url,public_metrics"));queryParameters.add(new BasicNameValuePair("expansions", "pinned_tweet_id"));uriBuilder.addParameters(queryParameters);HttpGet request = new HttpGet(uriBuilder.build());request.setHeader("Content-Type","application/json");consumer.sign(request);// 創建參數列表HttpResponse response =  httpClient.execute(request);// 處理API響應int statusCode = response.getStatusLine().getStatusCode();String responseBody = EntityUtils.toString(response.getEntity());if (statusCode == 200) {System.out.println(responseBody);return JSONObject.parseObject(responseBody);} else {System.out.println(responseBody);return JSONObject.parseObject(responseBody);}} catch (OAuthMessageSignerException e) {e.printStackTrace();} catch (OAuthExpectationFailedException e) {e.printStackTrace();} catch (OAuthCommunicationException e) {e.printStackTrace();} catch (URISyntaxException e) {e.printStackTrace();}catch (IOException e) {e.printStackTrace();}return null;}

4.根據用戶Token查詢授權用戶基本信息

    /*** 根據用戶token換取用戶信息* @return*/public TwitterUserDto getUserInfoByToken(String token){StringBuilder result = new StringBuilder();BufferedReader in = null;try {// Twitter API endpointString endpoint = "https://api.twitter.com/2/users/me";// 構造帶有參數的 URLString urlWithParams = endpoint + "?user.fields=name,pinned_tweet_id,profile_image_url";// 創建 URL 對象URL url = new URL(urlWithParams);URLConnection connection = url.openConnection();connection.setRequestProperty("Authorization", "Bearer " + token);connection.setRequestProperty("Content-Type","application/json");connection.connect();in = new BufferedReader(new InputStreamReader(connection.getInputStream()));String line;while ((line = in.readLine()) != null){result.append(line);}TwitterUserDto dto = new TwitterUserDto();JSONObject json = JSONObject.parseObject(result.toString());JSONObject user = (JSONObject)json.get("data");if(user != null){dto.setId(user.get("id").toString());dto.setName(user.get("name").toString());dto.setUsername(user.get("username").toString());}return dto;} catch (Exception e) {e.printStackTrace();}return null;}
@Data
@Accessors(chain = true)
public class TwitterUserDto {/*** 推特名 @xxxx*/private String username;/*** 推特用戶名*/private String name;/*** 推特用戶ID*/private String id;
}

5.根據用戶名查詢用戶推特信息?

/*** 根據用戶名查詢用戶推特數據* @return*/public TwitterUserDto getTwitterUserByUserName(String userName){//推特應用里面的相關私鑰和TokenCommonsHttpOAuthConsumer consumer = new CommonsHttpOAuthConsumer(TwitterConfig.CONSUMER_KEY, TwitterConfig.CONSUMER_SECRET);consumer.setTokenWithSecret(TwitterConfig.ACCESS_TOKEN, TwitterConfig.ACCESS_TOKEN_SECRET);// 創建HttpClient對象HttpClient httpClient = this.setProxy();// 創建API請求,例如獲取用戶的時間線try {URIBuilder uriBuilder = new URIBuilder("https://api.twitter.com/2/users/by");ArrayList<NameValuePair> queryParameters;queryParameters = new ArrayList<>();//需要查詢的用戶名   多個用戶名稱用逗號隔開(例如:張三,李四,王五   如果不行用:張三%20李四%20王五)queryParameters.add(new BasicNameValuePair("usernames", userName));queryParameters.add(new BasicNameValuePair("expansions", "pinned_tweet_id"));uriBuilder.addParameters(queryParameters);HttpGet request = new HttpGet(uriBuilder.build());request.setHeader("Content-Type","application/json");consumer.sign(request);// 創建參數列表HttpResponse response =  httpClient.execute(request);// 處理API響應int statusCode = response.getStatusLine().getStatusCode();String responseBody = EntityUtils.toString(response.getEntity());if (statusCode == 200) {TwitterUserDto dto = new TwitterUserDto();JSONObject json = JSONObject.parseObject(responseBody);JSONArray user = (JSONArray)json.get("data");if(user != null){json = (JSONObject)user.get(0);dto.setId(json.get("id").toString());dto.setName(json.get("name").toString());dto.setUsername(json.get("username").toString());}return dto;} else {return null;}} catch (OAuthMessageSignerException e) {e.printStackTrace();} catch (OAuthExpectationFailedException e) {e.printStackTrace();} catch (OAuthCommunicationException e) {e.printStackTrace();} catch (URISyntaxException e) {e.printStackTrace();}catch (IOException e) {e.printStackTrace();}return null;}/*** 設置請求代理* @param* @return*/private HttpClient setProxy(){// 創建HttpClientBuilder對象HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();HttpClient client = httpClientBuilder.build();;return client;}

?

注意事項:如果推特報401的話請檢查Token是否過期,如果報400的話需要好好檢查一下參數問題,它不會給你特別明顯錯誤的提示,細節問題只能自己注意一下了。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/714195.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/714195.shtml
英文地址,請注明出處:http://en.pswp.cn/news/714195.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

二刷代碼隨想錄——貪心day34

文章目錄 前言貪心知識點貪心的套路 貪心一般解題步驟一、860. 檸檬水找零二、406. 根據身高重建隊列三、452. 用最少數量的箭引爆氣球總結 前言 一個本碩雙非的小菜雞&#xff0c;備戰24年秋招&#xff0c;計劃二刷完卡子哥的刷題計劃&#xff0c;加油&#xff01; 二刷決定精…

day10_oop

今日內容 零、 復習昨日 一、作業 二、繼承 三、重寫 四、this和super 五、訪問修飾符 零、 復習昨日 數組創建的兩種方式 new int[3];new int[]{值,值2,…}存值: 數組名[下標] 值 構造方法什么作用?有參無參構造什么區別? 創建對象無參創建出的對象屬性是默認值有參創建出的…

【力扣白嫖日記】602.好友申請II:誰有最多的好友

前言 練習sql語句&#xff0c;所有題目來自于力扣&#xff08;https://leetcode.cn/problemset/database/&#xff09;的免費數據庫練習題。 今日題目&#xff1a; 602.好友申請II&#xff1a;誰有最多的好友 表&#xff1a;RequestAccepted 列名類型requester_idintaccept…

外賣店優先級

題目描述 ”飽了么”外賣系統中維護著N 家外賣店&#xff0c;編號1~N。每家外賣店都有一個優先級&#xff0c;初始時(0時刻)優先級都為0。 每經過1個時間單位&#xff0c;如果外賣店沒有訂單&#xff0c;則優先級會減少1&#xff0c;最低減到0;而如果外賣店有訂單&#xff0c;則…

【AIGC】微笑的秘密花園:紅玫瑰與少女的美好相遇

在這個迷人的畫面中&#xff0c;我們目睹了一個迷人的時刻&#xff0c;女子則擁有一頭柔順亮麗的秀發&#xff0c;明亮的眼睛如同星河般璀璨&#xff0c;優雅而靈動&#xff0c;她的微笑如春日暖陽&#xff0c;溫暖而又迷人。站在紅玫瑰花瓣的驚人洪水中。 在一片湛藍無云的晴…

Liberod的License申請

Liberod的License申請 找到license申請的路徑 查找C盤的磁盤序列號 鍵盤的win+R,輸入cmd 輸入vol,然后回車 圖中的DiskID就是填寫你C盤序列號的位置,填寫完成后點擊Register,幾秒鐘后會提示你,預計45分鐘后會發送到你的郵箱

docker-mysql:5.7安裝

1、下載mysql:5.7鏡像 [rootlocalhost ~]# docker search mysql (某個XXX鏡像名字) [rootlocalhost ~]# docker pull mysql:5.7 按裝之前查看一下是否按裝過mysql。如果安裝過會占用3306端口。 [rootlocalhost ~]# ps -ef | grep mysql 2、安裝 # -d&#xff1a;后臺運行 #…

C語言基礎(五)——結構體與C++引用

七、結構體與C引用 7.1 結構體的定義、初始化、結構體數組 C 語言提供結構體來管理不同類型的數據組合。通過將不同類型的數據組合成一個整體&#xff0c;方便引用 例如&#xff0c;一名學生有學號、姓 名、性別、年齡、地址等屬性&#xff0c;如果針對學生的學號、姓名、年齡…

MJ V7 在 V6 Beta 發布后即將推出,即將到來的人工智能 API 訪問!

讓我們深入了解 MidJourney 的新功能 在發布官方 Beta 之前總結 V6 Alpha 隨著 MidJourney V6 Alpha 上周成為默認版本&#xff0c;該團隊現在正在努力在過渡到官方 Beta 版本之前進行進一步的改進&#xff1a; 一組 3 個視覺一致性功能 1 — 升級的“風格參考”功能 這將是…

團體程序設計天梯賽 L2-003 月餅(多重背包模板)

L2-003 月餅 分數 25 月餅是中國人在中秋佳節時吃的一種傳統食品&#xff0c;不同地區有許多不同風味的月餅。現給定所有種類月餅的庫存量、總售價、以及市場的最大需求量&#xff0c;請你計算可以獲得的最大收益是多少。 注意&#xff1a;銷售時允許取出一部分庫存。樣例給…

pytorch基礎1-pytorch介紹與張量操作

專題鏈接&#xff1a;https://blog.csdn.net/qq_33345365/category_12591348.html 本教程翻譯自微軟教程&#xff1a;https://learn.microsoft.com/en-us/training/paths/pytorch-fundamentals/ 初次編輯&#xff1a;2024/3/1&#xff1b;最后編輯&#xff1a;2024/3/1 這是本…

高中數學:分式函數值域的求法

一、求值域的兩種基本思路 1、根據函數圖像和定義域求出值域。 難點&#xff1a;畫出函數圖像 2、研究函數單調性和定義域求出值域。 二、函數圖像畫法 高中所學的分式函數&#xff0c;基本由反比例函數平移得到。 復雜分式函數圖像畫法的兩個要點&#xff1a; a、找垂直、…

mysql 常用命令練習

管理表格從表中查詢數據從多個表查詢修改數據sql變量類型 管理表格 創建一個包含三列的新表 CREATE TABLE products (id INT,name VARCHAR(255) NOT NULL,price INT DEFAULT 0,PRIMARY KEY(id) // 自增 ); 從數據庫中刪除表 DROP TABLE product; 向表中添加新列 ALTER TAB…

如何優化阿里云幻獸帕魯/Palworld的多人聯機性能,并避免內存溢出導致的異常退出游戲?

優化阿里云幻獸帕魯/Palworld的多人聯機性能并避免內存溢出導致的異常退出游戲&#xff0c;可以采取以下幾種方法&#xff1a; 選擇合適的內存配置&#xff1a;由于幻獸帕魯是一個對內存需求較高的游戲&#xff0c;建議選擇至少16GB的內存。對于不同的玩家數量&#xff0c;可以…

【ArcGIS】漁網分割提取柵格圖+網格化分析圖繪制

ArcGIS按漁網分割提取柵格圖并繪制網格化分析圖 準備數據操作步驟步驟1&#xff1a;創建漁網&#xff08;Create Fishnet&#xff09;步驟2&#xff1a;柵格數據處理步驟3&#xff1a;柵格插值步驟4&#xff1a;數據關聯 參考 網格化的目的是讓各個數據更加標準化的進行統計。因…

GO常量指針

Go語言中的常量使用關鍵字const定義&#xff0c;用于存儲不會改變的數據&#xff0c;常量是在編譯時被創建的&#xff0c;即使定義在函數內部也是如此&#xff0c;并且只能是布爾型、數字型&#xff08;整數型、浮點型和復數&#xff09;和字符串型。 由于編譯時的限制&#x…

自動化測試系列 —— UI自動化測試!

UI 測試是一種測試類型&#xff0c;也稱為用戶界面測試&#xff0c;通過該測試&#xff0c;我們檢查應用程序的界面是否工作正常或是否存在任何妨礙用戶行為且不符合書面規格的 BUG。了解用戶將如何在用戶和網站之間進行交互以執行 UI 測試至關重要&#xff0c;通過執行 UI 測試…

Maven 插件之 maven-enforcer-plugin 解決沖突重復依賴

目錄 0、前言1、enforcer 是什么2、能干什么3、怎么用4、規則5、擴展規則6、使用7、banDuplicateClasses8、banDuplicatePomDependencyVersions 0、前言 maven 項目種經常出現 jar 包沖突、重復依賴、無效引用怎么辦&#xff0c;maven-enforcer-plugin 了解一下 1、enforcer …

《AI紀元:幻域探險》

游戲項目名稱&#xff1a;《AI紀元&#xff1a;幻域探險》 游戲類型&#xff1a;AI驅動的角色扮演探險游戲&#xff08;RPG&#xff09; 背景設定&#xff1a; 《AI紀元&#xff1a;幻域探險》設定在一個名為“幻域”的廣闊虛擬世界。這個世界由高度發達的AI技術支持&#xff0…

SpringCloud-同步異步通訊比較

本文詳細探討了同步通訊和異步通訊在信息傳遞中的區別&#xff0c;以及它們分別帶來的優勢和不足。通過對支付流程的案例分析&#xff0c;突顯了同步通訊可能面臨的阻塞和服務依賴問題&#xff0c;而異步通訊通過引入事件驅動模式和消息代理&#xff08;Broker&#xff09;成功…