時間過得飛快,距離上次SDK更新已經3年有餘。隨着官方的不斷跟新,老版SDK的部分接口已經不能正常使用。所以在QQ羣裏來吐槽的、來謾罵的朋友也開始多了起來。隨着時代的發展,微博已經完全的被微信甩開,所以對它的興趣已經喪失;同時對我本身來講,那麼幾年在行業裏面爲了生存而奔波,日子越混越差,已經無暇再與新浪官方同步更新SDK,所以自從13年之後就再也沒有更新過V2版的SDK。雖然微博大勢已去,可是依然有不少朋友經過新浪開放平臺的頁面下載了我發佈的這個SDK,能夠說,因爲長時間的不更新,老版本已經嚴重誤導了新來的朋友,這也是我開發了新版SDK的另一個重要緣由。html
第三版SDK的一些說明git
其餘提示github
新版使用方法正則表達式
第一步,初始化客戶端json
若是用戶還未進行受權的狀況api
使用微博開放平臺後臺中提供的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後請保存好這兩個數據,之後的接口調用直接使用這兩個參數,就不用每次都執行第一步和第二步。app
下面,就能夠跳轉到第二步來調用官方的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: