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


時間過得飛快,距離上次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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2026 CODEPRJ.COM