Java使用新浪微博API開發(fā)微博應(yīng)用的基本方法
新浪微博API現(xiàn)在運(yùn)用比較廣泛,做一個完整的開發(fā)流程Demo
1、第一步注冊,就不多說了,注冊帳號以及成為開發(fā)者帳號,這步操作不會的話請你馬上砸掉電腦拔掉網(wǎng)線回家種田。
2、第二步創(chuàng)建應(yīng)用,開發(fā)者帳號創(chuàng)建好了,打開新浪微博開發(fā)平臺: http://open.weibo.com
上面菜單欄點擊最后一個 管理中心
如果是web的應(yīng)用的話選擇創(chuàng)建網(wǎng)站接入的應(yīng)用,然后根據(jù)新浪微博的要求balabalabala自己去搞定
應(yīng)用創(chuàng)建完畢。點擊應(yīng)用跳轉(zhuǎn)頁面,點擊查看應(yīng)用參數(shù),可以看到應(yīng)用的相關(guān)參數(shù),這些參數(shù)將會在第四步用到。
3、第三步下載sdk,回到頂部的菜單欄,點擊 文檔 ,再點擊左邊菜單欄sdk,選擇java sdk,然后balabala下載,這步操作有問題也請回家種田。
所謂的sdk并非是sdk(個人覺得名稱有點誤導(dǎo)),而是一個可運(yùn)行的工程,下載完畢之后解壓 ,并導(dǎo)入到eclipse,可以看到兩個目錄 src和example
src是新浪微博的部分
example是實例,接口的demo
4、第四步配置參數(shù),找到src目錄下的config.properties
前三個參數(shù)需要自己配置 為第二步里說過的應(yīng)用參數(shù)里的參數(shù)
后面的都是默認(rèn)的不需要改
前三個參數(shù)配置如下
client_ID為App Key
client_SERCRET為App Secret
redirect_URI為 OAuth2.0授權(quán)的回調(diào)URL 應(yīng)用信息>高級信息>OAuth2.0 授權(quán)設(shè)置下面的授權(quán)回調(diào)頁 這是一個你自己填寫的URL 指向的是你自己服務(wù)器 當(dāng)然在開發(fā)階段我們可以使用任何URL 只要能夠讓我們了解OAuth授權(quán)的流程就好了 這里我們就輸入一個http://www.baidu.com 取消授權(quán)回調(diào)頁也是如此 注意這里的URL的字符串必須是一致
5、第五步獲取AccessToken,正常情況下AccessToken的獲取是需要通過OAuth2.0認(rèn)證的,但是為了更簡單我先說一種簡單的方法。后面再講OAuth2.0
還是選擇最上面的菜單欄 文檔>API>API測試工具
選擇創(chuàng)建的應(yīng)用 點擊獲取AccessToken 下面的文本框里就是我們要的AccessToken
6、第六步先做一個接口實例
去微博API里隨便找一個已有權(quán)限的接口,
我隨便找了一個 獲取用戶發(fā)布的微博 statuses/user_timeline 做測試用的
點擊這個接口查看這個接口詳情,可以查看到接口的每個傳入?yún)?shù)以及返回參數(shù) 這個無需多說。
不使用任何SDK實現(xiàn)Oauth授權(quán)并實現(xiàn)簡單的發(fā)布微博功能:
創(chuàng)建一個Java項目,編寫如下代碼,具體過程代碼中已寫的很清楚,這里不再做解釋:
注意先修改應(yīng)用ID、應(yīng)用密碼和回調(diào)頁面成你自己的!訪問授權(quán)頁面:
package com; import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.net.URL; import java.net.URLConnection; import java.security.cert.CertificateException; import java.security.cert.X509Certificate; import java.util.Scanner; import javax.net.ssl.X509TrustManager; /** * @author 劉顯安 * 不使用任何SDK實現(xiàn)新浪微博Oauth授權(quán)并實現(xiàn)發(fā)微薄小Demo * 日期:2012年11月11日 */ public class Test { static String clientId="2355065950";//你的應(yīng)用ID static String clientSecret="72037e76bee00315691d9c30dd8a386a";//你的應(yīng)用密碼 static String redirectUri="https://api.weibo.com/oauth2/default.html";//你在應(yīng)用管理中心設(shè)置的回調(diào)頁面 public static void main(String[] args) throws Exception { testHttps();//測試 //第一步:訪問授權(quán)頁面獲取授權(quán) System.out.println("請打開你的瀏覽器,訪問以下頁面,登錄你的微博賬號并授權(quán):"); System.out.println("https://api.weibo.com/oauth2/authorize?client_id="+clientId+"&response_type=code&redirect_uri="+redirectUri+"&forcelogin=true"); //第二步:獲取AccessToken System.out.println("請將授權(quán)成功后的頁面地址欄中的參數(shù)code:"); String code=new Scanner(System.in).next(); getAccessToken(code); //第三步:發(fā)布一條微博 System.out.println("請輸入上面返回的值中accessToken的值:"); String accessToken=new Scanner(System.in).next(); updateStatus("發(fā)布微博測試!來自WeiboDemo!", accessToken); } /** * 測試能否正常訪問HTTPS打頭的網(wǎng)站, */ public static void testHttps() { try { trustAllHttpsCertificates();//設(shè)置信任所有的http證書 URL url=new URL("https://api.weibo.com/oauth2/default.html"); URLConnection con=url.openConnection(); con.getInputStream(); System.out.println("恭喜,訪問HTTPS打頭的網(wǎng)站正常!"); } catch (Exception e) { e.printStackTrace(); } } /** * 以Post方式訪問一個URL * @param url 要訪問的URL * @param parameters URL后面“?”后面跟著的參數(shù) */ public static void postUrl(String url,String parameters) { try { trustAllHttpsCertificates();//設(shè)置信任所有的http證書 URLConnection conn = new URL(url).openConnection(); conn.setDoOutput(true);// 這里是關(guān)鍵,表示我們要向鏈接里注入的參數(shù) OutputStreamWriter out = new OutputStreamWriter(conn.getOutputStream());// 獲得連接輸出流 out.write(parameters); out.flush(); out.close(); // 到這里已經(jīng)完成了,開始打印返回的HTML代碼 BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream())); String line = null; while ((line = reader.readLine()) != null) { System.out.println(line); } } catch (Exception e) { e.printStackTrace(); } } /** * 獲取AccessToken * @param code 在授權(quán)頁面返回的Code */ public static void getAccessToken(String code) { String url="https://api.weibo.com/oauth2/access_token"; String parameters="client_id=" +clientId+"&client_secret=" +clientSecret+ "&grant_type=authorization_code" +"&redirect_uri=" +redirectUri+"&code="+code; postUrl(url, parameters); } /** * 利用剛獲取的AccessToken發(fā)布一條微博 * @param text 要發(fā)布的微博內(nèi)容 * @param accessToken 剛獲取的AccessToken */ public static void updateStatus(String text,String accessToken) { String url="https://api.weibo.com/2/statuses/update.json"; String parameters="status="+text+"&access_token="+accessToken; postUrl(url, parameters); System.out.println("發(fā)布微博成功!"); } /** * 設(shè)置信任所有的http證書(正常情況下訪問https打頭的網(wǎng)站會出現(xiàn)證書不信任相關(guān)錯誤,所以必須在訪問前調(diào)用此方法) * @throws Exception */ private static void trustAllHttpsCertificates() throws Exception { javax.net.ssl.TrustManager[] trustAllCerts = new javax.net.ssl.TrustManager[1]; trustAllCerts[0] = new X509TrustManager() { @Override public X509Certificate[] getAcceptedIssuers() { return null; } @Override public void checkServerTrusted(X509Certificate[] arg0, String arg1) throws CertificateException {} @Override public void checkClientTrusted(X509Certificate[] arg0, String arg1) throws CertificateException {} }; javax.net.ssl.SSLContext sc = javax.net.ssl.SSLContext.getInstance("SSL"); sc.init(null, trustAllCerts, null); javax.net.ssl.HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory()); } }
訪問授權(quán)頁面:
授權(quán)成功:
發(fā)布微博成功:
控制臺輸出結(jié)果:
相關(guān)文章
Java實現(xiàn)調(diào)用第三方相關(guān)接口
最近在做一個項目,需要調(diào)用第三方接口,本文主要介紹了Java實現(xiàn)調(diào)用第三方相關(guān)接口,具有一定的參考價值,感興趣的可以了解一下2023-09-09springboot項目監(jiān)控開發(fā)小用例(實例分析)
這篇文章主要介紹了springboot項目監(jiān)控開發(fā)小用例,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-09-09JSON序列化導(dǎo)致Long類型被搞成Integer的坑及解決
這篇文章主要介紹了JSON序列化導(dǎo)致Long類型被搞成Integer的坑及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-01-01Spring中AOP的切點、通知、切點表達(dá)式及知識要點整理
這篇文章主要介紹了Spring中AOP的切點、通知、切點表達(dá)式及知識要點整理,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-03-03SpringBoot實現(xiàn)優(yōu)雅停機(jī)的正確方法
什么叫優(yōu)雅停機(jī)?就是向應(yīng)用進(jìn)程發(fā)出停止指令之后,能保證正在執(zhí)行的業(yè)務(wù)操作不受影響,直到操作運(yùn)行完畢之后再停止服務(wù)。本文就來和大家聊聊SpringBoot實現(xiàn)優(yōu)雅停機(jī)的正確姿勢,希望對大家有所幫助2023-01-01SpringBoot2實現(xiàn)MessageQueue消息隊列
本文主要介紹了 SpringBoot2實現(xiàn)MessageQueue消息隊列,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-04-04九個動畫組圖輪播總結(jié)全棧數(shù)據(jù)結(jié)構(gòu)數(shù)組鏈表
數(shù)據(jù)結(jié)構(gòu)和算法是密不可分的,兩者往往是相輔相成的存在,所以在學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)過程中,不免會遇到各種算法,數(shù)據(jù)結(jié)構(gòu)常用操作一般為:增刪改查?;旧纤械臄?shù)據(jù)結(jié)構(gòu)都是圍繞這幾個操作進(jìn)行展開,本文用九張動圖來闡述先進(jìn)后出的數(shù)據(jù)結(jié)構(gòu)2021-08-08JAVA匿名內(nèi)部類(Anonymous Classes)的具體使用
本文主要介紹了JAVA匿名內(nèi)部類,匿名內(nèi)部類在我們JAVA程序員的日常工作中經(jīng)常要用到,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-08-08