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

来源:http://www.cnblogs.com/linxuanchen/archive/2016/01/08/5113233.html
-Advertisement-
Play Games

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

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 主要介紹一下C#的delegate的用法以及如何實現類似javascript的each方法,並簡要說明delegate,Func, Action和 Predicate的區別
  • 前言最近在幫一家知名外企開發Universal Windows Platform的相關應用,開發過程中不由感慨:項目分為兩種,一種叫做前人栽樹後人乘涼,一種叫做前人挖坑後人遭殃。不多說了,多說又要變成月經貼了。講講MEF。MEF全稱Managed Extensibility Framework。我們...
  • 所謂條件表達式,就是分支語句,去掉分支語句咯1、分解條件表達式修改點:你有一個複雜的條件語句(就是if else語句)做法:將條件表達式的三個部分分別提煉出獨立函數即 if (A部分) { B部分; } ...
  • 說非同步前,首先講講這些概念,非同步/同步、多線程。 非同步:是指呼叫另一操作後,不等待其結果,繼續執行之後的操作,若之後沒有其他操作,當前線程將進入睡眠狀態,而CPU時間將有機會切至其他線程。在非同步操作完成後通過回調函數的方式獲取通知與結果。非同步的實現方式有多種,如多線程與完成埠。多線程將非同步操作放...
  • 在WPF中的實現和WinForm中的實現99%相似,將要實現接受拖拽釋放的控制項添加DragEnter事件和Drop事件,本例中控制項Grid grid作為接受控制項,添加事件操作如下:private void grid_Drop(object sender, DragEventArgs e){ stri...
  • 最近項目需要,要用到一個圖片查看器,類似於windows自帶的圖片查看器那樣,滑鼠滾動可以縮放,可以拖拽圖片,於是就寫了這個簡單的圖片查看器。前臺代碼: ...
  • A 窗體跳轉到B窗體代碼 A aa = new A(); aa.ShowDialog(this);//此處記得加this 當B窗體關閉須調用A 窗體時,可在A窗體添加共用方法 如: public void AA(){ //回到A時所需要實現的內容... } B 窗體 A aa; aa = (A)th...
  • 相信大家在做項目中,經常會根據不同的表new各種不同的Model,當需要對Model進行實例化的時候,先將數據從資料庫取出,將該數據中的每個值都賦值給一個model,假如你有10個Model,每次都會從不同的表中獲取數據,需要處理的數據完全不同,那麼就要寫10個方法,對著10個Model進行賦值。編...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...