时间过得飞快,距离上次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", },
{"page", },
{"base_app" , }
}); //这里可以使用字典或者匿名类的方式传递参数,参数名称、大小写、参数顺序和规范请参照官方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

新浪微博.Net SDK第三版源代码和示例【最后一次更新了】的更多相关文章

  1. 0038 Java学习笔记-多线程-传统线程间通信、Condition、阻塞队列、《疯狂Java讲义 第三版》进程间通信示例代码存在的一个问题

    调用同步锁的wait().notify().notifyAll()进行线程通信 看这个经典的存取款问题,要求两个线程存款,两个线程取款,账户里有余额的时候只能取款,没余额的时候只能存款,存取款金额相同 ...

  2. unix网络编程第三版源代码ubuntu下配置的问题解决

    第一步:首先下载本书配套的源码unpv13e.tar.gz 第二步:解压后进入根文件夹有一个README 4 Execute the following from the src/ directory ...

  3. Linux - Unix环境高级编程(第三版) 源代码编译(即头文件apue.h如何使用问题)【转】

    本文转载自:http://blog.csdn.net/hadas_wang/article/details/43203795 1. 下载代码:http://www.apuebook.com/code3 ...

  4. 《CLR.via.C#第三版》第一部分读书笔记(一)

    最近开始仔细研读<CLR.via.C#第三版>这本书.读pdf文档确实很累.建议有条件的朋友还是买书看吧. 我的笔记用来记录我对这本书的理解,简化下逻辑,对每个部分我觉得是要点的进行归纳总 ...

  5. [Android 4.4.3] 泛泰A860 Omni4.4.3 20140610 RC2.0 三版通刷 by syhost

    欢迎关注泛泰非盈利专业第三方开发团队 VegaDevTeam  (本team 由 syhost suky zhaochengw(z大) xuefy(大星星) tenfar(R大师) loogeo cr ...

  6. [Android 4.4.3] 泛泰A870 Mokee4.4.3 20140610 RC2.0 通过刷第三版 by syhost

    欢迎关注泛泰非盈利专业第三方开发团队 VegaDevTeam  (本team 由 syhost suky zhaochengw(z大) xuefy(大星星) tenfar(R大师) loogeo cr ...

  7. Linux设备驱动程序 第三版 读书笔记(一)

    Linux设备驱动程序 第三版 读书笔记(一) Bob Zhang 2017.08.25 编写基本的Hello World模块 #include <linux/init.h> #inclu ...

  8. 《Effective Java 第三版》新条目介绍

    版权声明:本文为博主原创文章,可以随意转载,不过请加上原文链接. https://blog.csdn.net/u014717036/article/details/80588806前言 从去年的3月份 ...

  9. 关于阮一峰老师es6(第三版)中管道机制代码的理解浅析

    最近正在学习阮一峰老师的es6(第三版)教材,在学到第七章<函数的扩展>中的箭头函数嵌套时,文中提到了一个关于“管道机制”的示例,文中源代码如下: //es6(第三版)教材中的管道机制源代 ...

随机推荐

  1. .NET Framework中重点类型的继承关系

    继承关系 Object ├─Array │ └─T[] ├─ArrayList ├─List<T> └─String 集合类型的接口 下图展示了集合类型的各种接口的相互关系.注意,下图中所 ...

  2. vs如何在C++中调用Lua

    最近Cocos2dx的学习卡壳了,一般的照抄代码我不想写上来,但想示例也想得我头晕...为了放松大脑调整状态于是开始学习Lua.Lua的语法学习还是比较简单的,学过javascript或者vbscri ...

  3. Atitit usrQBK1600 技术文档的规范标准化解决方案

    Atitit usrQBK1600 技术文档的规范标准化解决方案 1.1. Keyword关键词..展关键词,横向拓展比较,纵向抽象细化拓展知识点1 1.2. 标题必须有高大上词汇,参考文章排行榜,1 ...

  4. 每天一个linux命令(11):nl命令

    nl命令在linux系统中用来计算文件中行号.nl 可以将输出的文件内容自动的加上行号!其默认的结果与 cat -n 有点不太一样, nl 可以将行号做比较多的显示设计,包括位数与是否自动补齐 0 等 ...

  5. web前端攻击详解

    前端攻击成因 在web网页的脚本中,有些部分的显示内容会依据外界输入值而发生变化,而如果这些声称html的程序中存在问题,就会滋生名为跨站脚本的安全隐患 XSS跨站脚本攻击: 英文全称cross-si ...

  6. HTML学习目录

    前面的话 HTML被认为是前端知识体系里面最简单的知识,几年前,很多人都推荐在W3C上学习个几天就能够基本掌握.但随着HTML5和移动端的强势发展,HTML的技能点也越来越难.世上无难事,好学好总结. ...

  7. 文本溢出text-overflow和文本阴影text-shadow

    前面的话 CSS3新增了一些关于文本的样式,其中text-overflow文本溢出和text-shadow文本阴影有些特别.因为它们有对应的overflow溢出属性和box-shadow盒子阴影属性. ...

  8. Angularjs中link函数参数含义小节

    restrictE: 表示该directive仅能以element方式使用,即:<my-dialog></my-dialog>A: 表示该directive仅能以attribu ...

  9. easyui-datagrid行数据field原样输出html标签

    easyui-datagrid 绑定的行 field 原样输出html标签.处理效果如图: Html页面代码如下: ... <tr> <th field="id" ...

  10. spring aop源码实现分析

    1. 先分析Advice before执行Cglib2AopProxy的intercept方法: /** * General purpose AOP callback. Used when the t ...