新浪微博API現在運用比較廣泛,做一個完整的開發流程Demo
1、第一步注冊,就不多說了,注冊帳號以及成為開發者帳號,這步操作不會的話請你馬上砸掉電腦拔掉網線回家種田。
2、第二步創建應用,開發者帳號創建好了,打開新浪微博開發平臺: http://open.weibo.com
上面菜單欄點擊最后一個 管理中心
如果是web的應用的話選擇創建網站接入的應用,然后根據新浪微博的要求balabalabala自己去搞定
應用創建完畢。點擊應用跳轉頁面,點擊查看應用參數,可以看到應用的相關參數,這些參數將會在第四步用到。
3、第三步下載sdk,回到頂部的菜單欄,點擊 文檔 ,再點擊左邊菜單欄sdk,選擇java sdk,然后balabala下載,這步操作有問題也請回家種田。
所謂的sdk并非是sdk(個人覺得名稱有點誤導),而是一個可運行的工程,下載完畢之后解壓 ,并導入到eclipse,可以看到兩個目錄 src和example
src是新浪微博的部分
example是實例,接口的demo
4、第四步配置參數,找到src目錄下的config.properties
前三個參數需要自己配置 為第二步里說過的應用參數里的參數
后面的都是默認的不需要改
前三個參數配置如下
client_ID為App Key
client_SERCRET為App Secret
redirect_URI為 OAuth2.0授權的回調URL 應用信息>高級信息>OAuth2.0 授權設置下面的授權回調頁 這是一個你自己填寫的URL 指向的是你自己服務器 當然在開發階段我們可以使用任何URL 只要能夠讓我們了解OAuth授權的流程就好了 這里我們就輸入一個http://www.baidu.com 取消授權回調頁也是如此 注意這里的URL的字符串必須是一致
5、第五步獲取AccessToken,正常情況下AccessToken的獲取是需要通過OAuth2.0認證的,但是為了更簡單我先說一種簡單的方法。后面再講OAuth2.0
還是選擇最上面的菜單欄 文檔>API>API測試工具
選擇創建的應用 點擊獲取AccessToken 下面的文本框里就是我們要的AccessToken
6、第六步先做一個接口實例
去微博API里隨便找一個已有權限的接口,
我隨便找了一個 獲取用戶發布的微博 statuses/user_timeline 做測試用的
點擊這個接口查看這個接口詳情,可以查看到接口的每個傳入參數以及返回參數 這個無需多說。
不使用任何SDK實現Oauth授權并實現簡單的發布微博功能:
創建一個Java項目,編寫如下代碼,具體過程代碼中已寫的很清楚,這里不再做解釋:
注意先修改應用ID、應用密碼和回調頁面成你自己的!訪問授權頁面:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
|
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實現新浪微博Oauth授權并實現發微薄小Demo * 日期:2012年11月11日 */ public class Test { static String clientId= "2355065950" ; //你的應用ID static String clientSecret= "72037e76bee00315691d9c30dd8a386a" ; //你的應用密碼 static String redirectUri= "https://api.weibo.com/oauth2/default.html" ;//你在應用管理中心設置的回調頁面 public static void main(String[] args) throws Exception { testHttps(); //測試 //第一步:訪問授權頁面獲取授權 System.out.println( "請打開你的瀏覽器,訪問以下頁面,登錄你的微博賬號并授權:" ); System.out.println( "https://api.weibo.com/oauth2/authorize?client_id=" +clientId+ "&response_type=code&redirect_uri=" +redirectUri+ "&forcelogin=true" ); //第二步:獲取AccessToken System.out.println( "請將授權成功后的頁面地址欄中的參數code:" ); String code= new Scanner(System.in).next(); getAccessToken(code); //第三步:發布一條微博 System.out.println( "請輸入上面返回的值中accessToken的值:" ); String accessToken= new Scanner(System.in).next(); updateStatus( "發布微博測試!來自WeiboDemo!" , accessToken); } /** * 測試能否正常訪問HTTPS打頭的網站, */ public static void testHttps() { try { trustAllHttpsCertificates(); //設置信任所有的http證書 URL url= new URL( "https://api.weibo.com/oauth2/default.html" ); URLConnection con=url.openConnection(); con.getInputStream(); System.out.println( "恭喜,訪問HTTPS打頭的網站正常!" ); } catch (Exception e) { e.printStackTrace(); } } /** * 以Post方式訪問一個URL * @param url 要訪問的URL * @param parameters URL后面“?”后面跟著的參數 */ public static void postUrl(String url,String parameters) { try { trustAllHttpsCertificates(); //設置信任所有的http證書 URLConnection conn = new URL(url).openConnection(); conn.setDoOutput( true ); // 這里是關鍵,表示我們要向鏈接里注入的參數 OutputStreamWriter out = new OutputStreamWriter(conn.getOutputStream()); // 獲得連接輸出流 out.write(parameters); out.flush(); out.close(); // 到這里已經完成了,開始打印返回的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 在授權頁面返回的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發布一條微博 * @param text 要發布的微博內容 * @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( "發布微博成功!" ); } /** * 設置信任所有的http證書(正常情況下訪問https打頭的網站會出現證書不信任相關錯誤,所以必須在訪問前調用此方法) * @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()); } } |
訪問授權頁面:
授權成功:
發布微博成功:
控制臺輸出結果: