推特API(Twitter API)對接說明,用戶code To Token換取

前期準備

提前準備、說明:目前對接推特api開發門戶分為3個版本,分別是免費的,100美金一個月的基礎版以及5000美金一個月的企業版,免費的目前就兩個接口可以調用,所以想要對接和使用推特最基本的也需要付100美元一個月,他們的區別如下圖,進入鏈接https://developer.twitter.com/en/portal/products/free? ?如下圖:

https://developer.twitter.com/en/portal/products/free

而基本的就可以使用很多接口了,這里就不闡述了,可以自己去里面看。

那么推特我們如何對接呢?下面給大家講一下詳細的流程:

1:第一步需要我們創建應用,開發者應用,由于我是開通了基礎版(100美金),所以我可以創建兩個應用,里面有3個選項包括生產,測試等等,我們直接選擇生產就好了,免費的只能創建一個應用,應用鏈接https://developer.twitter.com/en/portal/dashboard

??

2:創建成功以后還需要我們進去配置程序的公鑰私鑰,身份驗證設置等等,做好對接前期工作。

上面配置完成以后我們就可以看到我們自己的客戶ID了

開始對接

我們對接的是API v2的接口,大家一定要注意看接口文檔,別看到1.1獲取企業版的的去調別調不通。

說明:推特對接分為V1.1 、V2 以及企業版的Gnip2.0,這里目前使用的是V2的形式來對接的,V1.1對接一直報權限不足不給用,具體什么原因有知道的小伙伴可以告訴我一下,建議大家對接的時候去看一下?文檔?。那么如何獲取用戶的code以及Token呢?下面直接上代碼。

https://twitter.com/i/oauth2/authorize?
client_id=c3dqYzExdmo4VmpNY2tjbnFPNDM6MTpjaQ
&scope=tweet.read%20offline.access%20tweet.write%20tweet.moderate.write%20users.read%20follows.read%20follows.write
&response_type=code
&redirect_uri=http://8kvjtw.natappfree.cc/test/getTuiteCode
&state=profile&code_challenge=0ioze5m20493ny2
&code_challenge_method=plain參數說明:
client_id = 上面圖里面的客戶IDscope = 你需要用戶給你授權的權限,每個權限都是以%20分割,下圖會詳細介紹具體怎么來的response_type=code  這個是固定的,表示我們要去用戶的coderedirect_uri = 回調地址,獲取到code以后會回調到哪里,這里建議回調到前端頁面,讓前端在地址里面取出code返給后端,類似于這樣的 http://8kvjtw.natappfree.cc/test/getTuiteCode?state=profile&code=VmtmRFlDaXdV....code的值state=自己隨機定義字符串,回調里面會給你帶回來的code_challenge=隨機定義一串字符,但是換取Token的時候需要傳一樣的過去哦,這里重點記一下code_challenge_method=plain 表示不加密隨機字符

?scope :字段解釋,可以去下圖里面找出支持用戶授權的權限標識就好

直接在瀏覽器里面打開會出現下面這樣的,點擊授權應用就會回調到我們上面設置的回調地址里面,并且里面會帶兩個參數,一個是code,另一個就是我們設置的state也會帶給我們,參數都是拼接在回調地址后面的。

根據code換取token

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>

推特相關配置、文檔:https://developer.twitter.com/en/docs/authentication/oauth-2-0/user-access-token

/*** 推特相關配置*/
public class TwitterConfig {/*** 客戶id和客戶私鑰*/public static final String CLIENT_ID = "c3dqYzExdmo4VmpNY2t1111MTpjaQ";public static final String CLIENT_SECRET = "kfuA39dCX6tEG1111deXZHpOV-fjv9umx55ZdccCkNONjea";/*** 應用KYE和私鑰*/public static final String CONSUMER_KEY = "lhyfiDV3nX1111ffGeHMR";public static final String CONSUMER_SECRET = "BRNxnV5LxN23MlW4BCOdiSpQkQ1rn11119jtptduIkcwjB";/*** 應用的TOKEN*/public static final String ACCESS_TOKEN = "1482941195941633-A8xyN5xuqCrRJwj111dbFgkbStu";public static final String ACCESS_TOKEN_SECRET = "oZaKBphpooOR7GMBB3EFELIkU1111vzoXPAQ";}
@Data
@Accessors(chain = true)
public class TwitterDto {/*** 獲取的訪問令牌*/private String accessToken;/*** 刷新令牌*/private String refreshToken;}
/*** 根據code獲取用戶token* @param code          根據code換取token* @param refreshToken  根據token刷新token* @return*/public TwitterDto requestBearerToken(String code,String refreshToken) {try {String clientId = URLEncoder.encode(TwitterConfig.CLIENT_ID, "UTF-8");String clientSecret = URLEncoder.encode(TwitterConfig.CLIENT_SECRET, "UTF-8");//商戶id和商戶的私鑰String credentials = clientId + ":" + clientSecret;//對商戶id和私鑰機密一下String base64Credentials = Base64.getEncoder().encodeToString(credentials.getBytes());//這個地址一定要和獲取code鏈接里面填的回調地址保持一致(惡心)String redirectURI = "http://8kvjtw.natappfree.cc/test/getTuiteCode";//請求、換取Token的地址URL url = new URL("https://api.twitter.com/2/oauth2/token");HttpURLConnection connection = (HttpURLConnection) url.openConnection();connection.setRequestMethod("POST");connection.setRequestProperty("Authorization", "Basic " + base64Credentials);connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded;charset=UTF-8");connection.setDoOutput(true);connection.setDoInput(true);String data = "";if(StringUtils.isBlank(refreshToken)){//authorization_code、refresh_token、client_credentials//我們這里是根據code換取Token所以選擇authorization_codeString grantType = "authorization_code";//獲取令牌需要的參數    code_verifier 需要和獲取code傳入參數 code_challenge 保持一致data = "grant_type=" + grantType + "&code=" + code + "&redirect_uri=" + redirectURI+"&client_id="+TwitterConfig.CLIENT_ID+"&client_secret="+TwitterConfig.CLIENT_SECRET+"&code_verifier=0ioze5m20493ny2";}else{//下面是通過刷新令牌的Token去換取新的Token,房子Token過期//authorization_code、refresh_token、client_credentialsString grantType = "refresh_token";//刷新令牌需要的參數data = "refresh_token="+refreshToken+"&grant_type=" + grantType + "&client_id="+TwitterConfig.CLIENT_ID+"&client_secret="+TwitterConfig.CLIENT_SECRET+"&code_verifier=challenge";}connection.getOutputStream().write(data.getBytes("UTF-8"));BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));StringBuilder response = new StringBuilder();String line;while ((line = reader.readLine()) != null) {response.append(line);}reader.close();String jsonResponse = response.toString();JSONObject json = JSON.parseObject(jsonResponse);TwitterDto twitterDto = new TwitterDto();Object accessToken = json.get("access_token");//我們實際使用TokentwitterDto.setAccessToken(accessToken == null ? null : accessToken.toString());//當我們使用的Token過期以后可以用這個來換取新的TokenaccessToken = json.get("refresh_token");twitterDto.setRefreshToken(accessToken == null ? null : accessToken.toString());return twitterDto;} catch (Exception e) {e.printStackTrace();return null;}}
@Slf4j
@RestController
@RequestMapping("/test")
@Api(tags = "測試")
@Transactional(isolation = Isolation.READ_COMMITTED)
public class TestController extends BaseComponent {@Autowiredprivate TwitterService twitterService;@GetMapping("getTuiteCode")@ApiOperation("測試推特code")public Map<String, String> getTuiteCode(String code, String state) {Map<String, String> map = new HashMap<>();TwitterDto bearerToken = twitterService.requestBearerToken(code,null);//刷新一下令牌//bearerToken = twitterService.requestBearerToken(code,bearerToken.getRefreshToken());System.out.println("Bearer Token: " + bearerToken.getAccessToken());map.put("Token", bearerToken.getAccessToken());map.put("state", state);return map;}
}

這就是一個完整的換取Token的流程,后面章節介紹如何使用Token操作用戶相關數據

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

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

相關文章

百度百科人物創建要求是什么?

百度百科作為我國最大的中文百科全書&#xff0c;其收錄的人物詞條要求嚴謹、客觀、有權威性。那么&#xff0c;如何撰寫一篇高質量的人物詞條呢&#xff1f;本文伯樂網絡傳媒將從內容要求、注意事項以及創建流程與步驟三個方面進行詳細介紹。 一、內容要求 1. 基本信息&#…

什么是 web 應用的 type-ahead search help

在 Web 前端設計領域&#xff0c;type-ahead search help&#xff08;又稱為自動完成或即時搜索&#xff09;是一種用戶界面功能&#xff0c;它能夠在用戶輸入搜索詞的同時&#xff0c;實時提供搜索建議或結果。這種功能極大地提升了用戶體驗&#xff0c;因為它可以幫助用戶快速…

LeetCode每日一題【c++版】- 用隊列實現棧與用棧實現隊列

用隊列實現棧 題目描述 請你僅使用兩個隊列實現一個后入先出&#xff08;LIFO&#xff09;的棧&#xff0c;并支持普通棧的全部四種操作&#xff08;push、top、pop 和 empty&#xff09;。 實現 MyStack 類&#xff1a; void push(int x) 將元素 x 壓入棧頂。int pop() 移除…

Studio One 6永久激活版 附完整圖文安裝破解教程

Studio One 6是一款功能強大的音樂制作和錄音軟件&#xff0c;專為Mac操作系統設計。它提供了多軌錄音和混音、MIDI音樂制作、實時效果和處理、VST插件支持以及高級編輯和編排等豐富的功能。無論是專業音樂制作人還是音樂愛好者&#xff0c;都可以使用Studio One 6來創建和編輯…

程序員英語詞匯寶典(建議收藏)

很多小伙伴說&#xff0c;英文不好能不能學習編程&#xff0c;我個人的看法是英文不好&#xff0c;并不影響你學習編程&#xff0c;但有可能會影響到你的編程上限&#xff0c;因為一些最新的文檔都是英文的。如果你想成為一個編程大牛&#xff0c;那么英文還是很有必要的。今天…

cocos-lua定時器用法

本文介紹cocos-lua(非Quick-cocos)的定時器用法 定時器按是否會隨節點銷毀&#xff0c;可分為節點調度器和全局調度器 一.節點調度器 frameworks\cocos2d-x\cocos\scripting\lua-bindings\script\cocos2d\deprecated.lua中實現了了schedule和 performWithDelay 1.1.schedul…

基礎真空技術外國文獻Fundamentals of Vacuum Technology

基礎真空技術外國文獻Fundamentals of Vacuum Technology

道路積水監測站——確保道路暢通和行車安全

TH-JS1道路積水監測站是一種專門用于監測城市道路積水情況的設備&#xff0c;旨在保障城市道路安全和防止水患對交通造成的不利影響。這些監測站通過實時檢測和記錄道路積水數據&#xff0c;為城市管理部門提供重要信息&#xff0c;以便及時采取應對措施&#xff0c;確保道路暢…

vue diff算法介紹

Vue.js 的 diff 算法是一種用于虛擬 DOM 比較的高效算法&#xff0c;其核心目的是在數據變更時&#xff0c;能夠最小化 DOM 操作&#xff0c;提高更新性能。以下是關于 Vue diff 算法的介紹&#xff1a; 1. 算法目標&#xff1a; Vue 的 diff 算法旨在比較新舊虛擬節點&#…

990-29產品經理:IT risk management process IT風險管理流程

IT risk management process IT風險管理流程 In business, IT risk management entails a process of identifying, monitoring and managing potential information security or technology risks with the goal of mitigating or minimising their negative impact. Exampl…

MATLAB環境下基于離散小波變換的心電信號偽影去除及PQRST波檢測

可穿戴個人健康監護系統被廣泛認為是下一代健康監護技術的核心解決方案。監護設備不斷地感知、獲取、分析和存儲大量人體在日常活動中的生理數據&#xff0c;為人體的健康狀況提供必要的、準確的、集成的和長期的評估和反饋。在心電監測領域&#xff0c;可穿戴傳感器具有以下應…

LeetCode刷題-206.反轉鏈表【遞歸實現】

206.反轉鏈表 題目 給你單鏈表的頭節點 head &#xff0c;請你反轉鏈表&#xff0c;并返回反轉后的鏈表。 示例 示例1 輸入&#xff1a;head [1,2,3,4,5] 輸出&#xff1a;[5,4,3,2,1]示例2 輸入&#xff1a;head [1,2] 輸出&#xff1a;[2,1]示例3 輸入&#xff1a;hea…

鴻蒙開發就業前景以及發展方向分析~

鴻蒙操作系統作為華為公司自主研發的操作系統&#xff0c;已經成為當下炙手可熱的話題。作為一個全新的操作系統&#xff0c;鴻蒙開發為IT行業帶來了巨大的就業機會。本文將圍繞鴻蒙開發的就業前景以及發展方向展開討論。 一、鴻蒙開發就業前景 隨著鴻蒙操作系統的發布&#…

python實現有限域GF(2^8)上的乘法運算

有限域GF(2^8)上的乘法運算可以看成多項式的乘法 5e轉換成二進制為0101 1110&#xff0c;對應的多項式為x^6x^4x^3x^2x 3f轉換成二進制為0011 1111&#xff0c;對應的多項式為x^5x^4x^3x^2x1 將這兩個多項式相乘再模多項式x^8x^4x^3x1得到結果為1110 0101&#xff0c;轉換為…

latex編譯生成的pdf文件,圖片出現淺色的線

目錄 問題描述&#xff1a; 解決辦法&#xff1a; 問題描述&#xff1a; 在overleaf中&#xff0c;導入圖片&#xff0c;編譯之后&#xff0c;不知道為什么會出現一條淺色的線&#xff0c;很影響視覺效果&#xff08;ps:在瀏覽器中看不到這條線&#xff0c;但是在pdf閱讀器中…

分巧克力 刷題筆記

/* 分巧克力 解題思路 二分 直接檢查看答案是否符合題目條件 對于一塊邊長分別為x 和y的巧克力\\ 假設我們輸入檢查的數為k 其能分割成的 k*k 的巧克力的塊數為 (x/k)*(y/k) 因為c里面的除法是下取整的所以我們不用考慮奇偶數 是否能整除 將每一塊巧克力能分成的k*k的巧克力…

管家婆訂貨易在線商城 VshopProcess 任意文件上傳漏洞復現

0x01 產品簡介 管家婆訂貨易,幫助傳統企業構建專屬的訂貨平臺,PC+微信+APP+小程序+h5商城5網合一,無縫對接線下的管家婆ERP系統,讓用戶訂貨更高效。支持業務員代客下單,支持多級推客分銷,以客帶客,拓展渠道。讓企業的生意更輕松。 0x02 漏洞概述 管家婆訂貨易在線商城…

Matlab 機器人工具箱 符合動力學

文章目錄 1 符合化表示1.1 標準DH動力學1.2 改進DH動力學 質量集中在質心1.2 改進DH動力學 質量集中在末端1.3 程序問題1.3.1 Unable to perform assignment because value of type sym is not convertible to double.1.3.2 CAT arguments dimensions not consistent.參考鏈接1…

一篇了解電阻的使用

目錄 一、電阻理論基礎 1.電阻的定義 2.歐姆定律 3.電阻決定式 4.電阻的串并聯?編輯 5.電阻的功率 6.溫度對電阻的影響 二、電阻的選型 1.安裝方式 2.電阻值 &#xff08;1&#xff09;電阻值的標稱 &#xff08;2&#xff09;電阻值的確定 &#xff08;3&#x…

test only

https://drive.google.com/viewer?urlhttps://www.labnol.org/files/word.docx 使用插件將html -> pdf 要在React中使用react-pdf將一段HTML代碼轉換為PDF&#xff0c;您可以按照以下步驟進行操作&#xff1a; 1. 安裝react-pdf&#xff1a;在您的React項目中&#xff0…