新浪微博.Net SDK第三版源代碼和示例【最後一次更新了】

時間過得飛快,距離上次SDK更新已經3年有餘。隨着官方的不斷跟新,老版SDK的部分接口已經不能正常使用。所以在QQ羣裏來吐槽的、來謾罵的朋友也開始多了起來。隨着時代的發展,微博已經完全的被微信甩開,所以對它的興趣已經喪失;同時對我本身來講,那麼幾年在行業裏面爲了生存而奔波,日子越混越差,已經無暇再與新浪官方同步更新SDK,所以自從13年之後就再也沒有更新過V2版的SDK。雖然微博大勢已去,可是依然有不少朋友經過新浪開放平臺的頁面下載了我發佈的這個SDK,能夠說,因爲長時間的不更新,老版本已經嚴重誤導了新來的朋友,這也是我開發了新版SDK的另一個重要緣由。html

第三版SDK的一些說明git

  • 與老版本不兼容
  • 再也不支持.NET 4.0如下的版本
  • 沒有封裝官方API,但新版接口調用規範遵循新浪官方API的參數風格,具體請看示例

其餘提示github

  • 第三版SDK基於微軟的HTTP Client Libraries,而且再也不內部封裝JSON.Net,新建項目請自行Nuget。
  • 因爲新浪的限制,第三版SDK再也不提供模擬登陸接口,Winform或者控制檯項目請引用NetDimension.OpenAuth.Winform庫,裏面封裝了一個受權窗口,具體請看示例

 

新版使用方法正則表達式

第一步,初始化客戶端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:

https://github.com/NetDimension/WeiboSDK

相關文章
相關標籤/搜索