時間過得飛快,距離上次SDK更新已經3年有餘。隨著官方的不斷跟新,老版SDK的部分介面已經不能正常使用。因此在QQ群里來吐槽的、來謾罵的朋友也開始多了起來。隨著時代的發展,微博已經徹底的被微信甩開,因此對它的興趣已經喪失;同時對我自己來說,那麼幾年在行業裡面為了生存而奔波,日子越混越差,已經無暇再與...
時間過得飛快,距離上次SDK更新已經3年有餘。隨著官方的不斷跟新,老版SDK的部分介面已經不能正常使用。因此在QQ群里來吐槽的、來謾罵的朋友也開始多了起來。隨著時代的發展,微博已經徹底的被微信甩開,因此對它的興趣已經喪失;同時對我自己來說,那麼幾年在行業裡面為了生存而奔波,日子越混越差,已經無暇再與新浪官方同步更新SDK,因此自從13年以後就再也沒有更新過V2版的SDK。雖然微博大勢已去,但是依然有很多朋友通過新浪開放平臺的頁面下載了我發佈的這個SDK,可以說,由於長時間的不更新,老版本已經嚴重誤導了新來的朋友,這也是我開發了新版SDK的另外一個重要原因。
第三版SDK的一些說明
- 與老版本不相容
- 不再支持.NET 4.0以下的版本
- 沒有封裝官方API,但新版介面調用規範遵循新浪官方API的參數風格,具體請看示例
其他提示
- 第三版SDK基於微軟的HTTP Client Libraries,並且不再內部封裝JSON.Net,新建項目請自行Nuget。
- 由於新浪的限制,第三版SDK不再提供模擬登錄介面,Winform或者控制台項目請引用NetDimension.OpenAuth.Winform庫,裡面封裝了一個授權視窗,具體請看示例
新版使用方法
第一步,初始化客戶端
如果用戶還未進行授權的情況
使用微博開放平臺後臺中提供的appkey,appsecret以及回調地址callback_url來初始化客戶端。
var openAuth = new SinaWeiboClient("<appkey>", "<appsecret>", "<callback_url>");
然後取得授權頁面地址,並訪問該地址進行授權,並獲得Authorization_Code
var url = openAuth.GetAuthorizationUrl();
根據返回的Code換取AccessToken
openAuth.GetAccessTokenByCode("<CODE>"); if(openAuth.IsAuthorized) { var accessToken = openAuth.AccessToken; var uid = openAuth.UID; }
重要 獲得了AccessToken和UID後請保存好這兩個數據,以後的介面調用直接使用這兩個參數,就不用每次都執行第一步和第二步。
下麵,就可以跳轉到第二步來調用官方的API了。
當然,如果之前已經進行過授權,並且已獲得AccessToken和UID,使用下麵的方法來初始化客戶端。
var openAuth = new SinaWeiboClient("<appkey>", "<appsecret>", "<access_token>", "<uid>");
之後就可以直接跳轉到第二步來調用API了。
第二步,調用介面
這裡提供了Get和Post兩個方法來調用官方的API,同時提供了非同步的支持。使用的時候根據官方文檔的要求來選擇使用Get還是Post來調用API(官方的文檔中已經明確說明瞭調用方式)。
調用介面傳參的方式有兩個,一種是傳一個Dictionary<string,object>類型的參數組進去,另外一個是new一個匿名類傳進去,個人覺得用匿名類才會顯得非常科學。
例如,調用獲取當前登錄用戶最新微博的API
var result = openAuth.HttpGet("statuses/friends_timeline.json", new Dictionary<string, object> { {"count", 5}, {"page", 1}, {"base_app" , 0} }); //這裡可以使用字典或者匿名類的方式傳遞參數,參數名稱、大小寫、參數順序和規範請參照官方api文檔 if (result.IsSuccessStatusCode) { Console.WriteLine(result.Content.ReadAsStringAsync().Result); }
另外,如果需要非同步調用請參考下麵的例子。
// 調用獲取獲取用戶信息api // 參考:http://open.weibo.com/wiki/2/users/show var response = openAuth.HttpGetAsync("users/show.json", //可以傳入一個Dictionary<string,object>類型的對象,也可以直接傳入一個匿名類。參數與官方api文檔中的參數相對應 new { uid = openAuth.UID }); response.ContinueWith(task =>{ //非同步處理結果 });
當然,如果使用.net4.5的話,是可以直接使用async和await關鍵字來簡化上面的操作的。
另外,因為現在新浪官方的限制搞出了個登錄驗證碼,所以新版的SDK就不再提供以前版本的模擬登錄來獲取授權(ClientLogin)方式。針對Winform和Console應用,可以引用NetDimension.OpenAuth.Winform這個類,其中提供了一個擴展方法可以在上述兩種項目類型中彈出授權視窗,併在用戶授權後自動獲得Authorization_Code,具體操作請查看Winform和Console的示例代碼。
using NetDimension.OpenAuth.Winform; ... var form = openAuth.GetAuthenticationForm(); if (form.ShowDialog() == System.Windows.Forms.DialogResult.OK) { Console.WriteLine("用戶授權成功!"); var accessToken = openAuth.AccessToken; var uid = openAuth.UID; //其他操作 //... } else { Console.WriteLine("用戶授權失敗!"); }
執行上面的代碼,將彈出下圖所示的視窗。
用戶完成登錄後,SDK會使用正則表達式從回調地址中獲取Authorization_Code。
關於源代碼中的示例
示例沒啥好說的,源碼中有三個示例,分別是一個MVC的網頁示例,兩個桌面的控制台和WinForm示例。
示例裡面明文寫了一套APPKey和對應的Secret及回調地址,不改的話示例應該是可以正常運行的,如果改成自己的Key以後出錯,那麼就請自行Google如何設置回調地址。
MVC的示例設置稍微複雜點,要去改下IIS Express的配置,讓網站能通過127.0.0.1或者192.168.0.100這樣的IP地址訪問到,不然回調的時候無法訪問到,MVC示例的首頁上有修改教程,如果示例運行不起來請打開Views\Home\Index.cshtml看如果修改。
Winform示例運行截圖
網站示例運行截圖
另外需要註意的是,如果使用的是VS2015,IIS Express的配置文件applicationhost.config地址已經不再是“文檔\IIS Express\”,而是在項目地址下的.vs目錄下,該目錄是個隱藏目錄,直接地址欄裡面輸入路徑來訪問。
控制台示例運行截圖
示例中有調用騰訊微博的例子,但是騰訊的要求很嚴,申請app需要網站驗證,因為我用朋友的網站,所以請有需要的朋友還是自行註冊app(騰訊微博的開發者平臺dev.t.qq.com的api文檔伺服器是不是掛了?反正我是上不去了。)。另外,騰訊的例子里有個發圖片微博的方法,嚴格按照騰訊api文檔來寫的,但是不能正常使用,如果有朋友知道原因還請告知。寫騰訊的例子,只是為了展示新版的SDK通過繼承,很容易就可以拓展到其他諸如微信開放平臺、人人等平臺。具體要怎麼用,大家自行發掘。
示例的代碼已經包含在源代碼里,具體請自行參考代碼。
以上,就是新版本的所有內容。
正如開篇所說的,新浪微博感覺大勢已去,所以這個微博SDK也不會再更新新版本。第三版的這個SDK將最為最終版本,只做維護和BUG修正,不再增加和更新新內容。如果有朋友對新浪開發平臺繼續保持著興趣,請自行GitHub去Clone代碼,按自己的需求去擴展功能。
最後,感謝QQ群裡面的所有朋友這麼幾年以來的支持和鼓舞,謝謝。
新朋友歡迎進群討論,群號:241088256
原項目地址:
https://weibosdk.codeplex.com/
GitHub:
https://github.com/NetDimension/WeiboSDK