使用新浪微博开放平台api同步微博内容至自己网站(WeiboSDK新浪微博SDKv3源码和示例(图))
优采云 发布时间: 2021-10-18 00:17使用新浪微博开放平台api同步微博内容至自己网站(WeiboSDK新浪微博SDKv3源码和示例(图))
WeiboSDK 新浪微博SDK v3 源代码和示例前言
时间过得真快,距离上次SDK更新已经3年多了。随着正式版的不断更新,老SDK的部分接口已经不能正常使用了。于是,QQ群里抱怨辱骂的朋友开始增多。随着时代的发展,微博已经被微信彻底甩掉,失去了兴趣;同时,对于我自己来说,在这个行业里为了生存而生存几年后,日子越来越不好过,我没有时间。然后和新浪官方同步更新SDK,所以自13年之后,V2版本的SDK就没有再更新了。虽然微博的风潮没了,但还是有很多朋友通过新浪开放平台页面下载了我发布的SDK。可以说,由于长期不更新,老版本严重误导了新朋友。这也是我开发的。SDK 新版本的另一个重要原因。SDK第三版的一些说明
指示
第一步是初始化客户端
如果用户没有被授权
使用微博开放平台后台提供的a*敏*感*词*ey、appsecret、callback_url初始化客户端。
", "", "");">
var openAuth = new SinaWeiboClient("", "", "");
然后获取授权页面地址,访问授权地址,获取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("", "", "", "");
之后就可以直接跳转到第二步调用API了。
第二步调用接口
这里提供了Get和Post两个方法调用官方API,也提供了异步支持。使用时根据官方文档的要求选择是使用Get还是Post调用API(调用方法在官方文档中有明确说明)。
调用接口传递参数有两种方式。一个是传入一个Dictionary类型的参数组,一个是传入一个名为new的匿名类。我个人认为使用匿名类是非常科学的。
例如调用API获取当前登录用户的最新微博
{{"count", 5},{"page", 1},{"base_app", 0}}); //这里可以使用字典或者匿名类来传递参数,参数名,大小写,参数顺序和规范请参考官方api文档 if (result.IsSuccessStatusCode){Console.WriteLine(result.Content.ReadAsStringAsync( ).结果);}">
var result = openAuth.HttpGet("statuses/friends_timeline.json",
new Dictionary
{
{"count", 5},
{"page", 1},
{"base_app" , 0}
}); //这里可以使用字典或者匿名类的方式传递参数,参数名称、大小写、参数顺序和规范请参照官方api文档
if (result.IsSuccessStatusCode)
{
Console.WriteLine(result.Content.ReadAsStringAsync().Result);
}
另外,如果需要异步调用,请参考下面的例子。
对象的类型也可以直接传入匿名类。参数对应官方api文档中的参数 new {uid = openAuth.UID});response.ContinueWith(task =>{//asynchronous processing result});">
// 调用获取获取用户信息api
// 参考:http://open.weibo.com/wiki/2/users/show
var response = openAuth.HttpGetAsync("users/show.json",
//可以传入一个Dictionary类型的对象,也可以直接传入一个匿名类。参数与官方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 示例。
示例中,明文写了一组A*敏*感*词*ey以及对应的Secret和回调地址。如果你不改变它,这个例子应该可以正常工作。如果改成自己的Key出现错误,请自行谷歌设置回调地址。
MVC 的示例设置稍微复杂一些。需要修改IIS Express的配置,使得网站可以通过127.0.0.1或192.16 8.0.100这样的IP地址是可以访问的,否则在回调过程中无法访问。MVC示例的主页上有修改教程。如果示例不起作用,请打开 Views\Home\Index.cshtml 查看是否已修改。
Winform 示例运行截图
网站示例运行截图
还有一点需要注意的是,如果你使用的是VS2015,IIS Express配置文件applicationhost.config的地址不再是“Documents\IIS Express\”,而是在项目地址下的.vs目录下,这是一个隐藏目录, 直接在地址栏中输入路径即可访问。
控制台示例运行的屏幕截图
有调用腾讯微博的例子,但是腾讯的要求很严格。申请app需要网站验证,因为我用的是朋友的网站,所以请有需要的朋友或者自己注册app(腾讯微博开发者平台的api文档服务器是不是挂了?反正,我提不起来。)另外,在腾讯的例子中,有一种在微博上发图片的方法,严格按照腾讯api文档写的,但是不能正常使用。如果有朋友知道原因,请告诉我们。腾讯的例子只是为了说明新版SDK可以通过继承方便的扩展到微信开放平台、人人网等其他平台。请了解如何使用它。
示例代码已收录在源代码中,具体请自行查阅代码。
以上是新版本的全部内容。
正如开头所说,新浪微博觉得大势已去,所以本次微博SDK不会更新新版本。本SDK第三版为最终版本,仅用于维护和BUG修正,不再添加或更新新内容。如果有继续对新浪开发平台感兴趣的朋友,请到GitHub上克隆代码,根据需要扩展功能。
最后感谢QQ群里的所有朋友这几年的支持和鼓励,谢谢。