通过OAuth认证和操作新浪微博


前段时间看信天游http://www.travelsky.com/网站,看到中间有信天游的新浪官网微博,我最开始以为是通过OAuth读取的新浪微博,最后通过查看页面代码,才知道通过的widget读取的微博,url地址如下:

http://widget.weibo.com/weiboshow/index.php?width=0&height=200&fansRow=1&ptype=1&speed=0&skin=2&isTitle=0&noborder=0&isWeibo=1&isFans=0&uid=1718546910&verifier=1

下面的uid参数变成我的新浪微博的uid了,就变成我的微博的一个widget了。

初识OAuth:

下面讲一下另外一种方式读取微博和操作微博的方式, OAuth协议来认证和操作新浪微博的过程。

OAuth官网是http://oauth.net/,上面有介绍该协议,为桌面或者网站程序提供一个简单的标准的方式去访问需要授权的API开发协议。 起草于2006年,2007年发布第一个版本,最新的2.0处于草稿阶段,http://tools.ietf.org/html/draft-ietf-oauth-v2-22,可以看到协议的描述。对于.net,也有人写了OAuth的服务端和客户端的实现代码:http://code.google.com/p/oauth-dot-net/,如果需要编写服务端代码也有一定参考价值。

现在的互联网公司的网站等都推出了开放平台,比如新浪微博开放平台http://open.weibo.com/,腾讯社区开放平台http://opensns.qq.com/,淘宝网开放平台http://open.taobao.com/,等,其中新浪、腾讯等开放平台可以通过OAuth认证并交互处理数据。

新浪微博OAuth认证及操作:

为了更清楚的了解OAuth协议客户端的调用过程,我没有用官方推荐的.net客户端OAuthBase.cshttp://oauth.googlecode.com/svn/code/csharp/OAuthBase.cs )做一些基础的加解密编码工作,而是全部自己调用.net框架类库的方式加解密编码等来调用新浪的OAuth开放平台,让我在用OAuth验证过程中,遇到各种返回401未经授权的问题,但最后终于找到问题原因并解决了。

下面介绍OAuth认证新浪微博获取粉丝并发布微博的过程。

新浪微博开放平台官网SDK提供了一个网友的提供的开放平台调用DEMOhttp://code.google.com/p/opensinaapi/,可供参考。

要使用新浪微博开放平台,首先需要申请一个应用,我申请的应用如下:

申请后,会得到两个参数:App KeyApp Secret,这个都是后面通过OAuth调用需要用到的参数。

下面直接借用新浪OAuth认证的流程图:

一个认证过程,需要有3次的交互,用到的URL地址分别为:

http://api.t.sina.com.cn/oauth/request_token

http://api.t.sina.com.cn/oauth/authorize

http://api.t.sina.com.cn/oauth/access_token

分别为请求临时未授权的Request Token,它将返回比较重要的oauth_tokenoauth_token_secret参数;

然后请求对该Request Token授权;

然后对授权后的Request Token请求Access Token,它也将返回oauth_tokenoauth_token_secret参数,这两个参数将作为后续的发布微博,获取微博粉丝等的重要参数,还返回新浪的uid,不过这里基本不用。

http://open.weibo.com/wiki/index.php/Oauth,这里有认证流程的描述,细节可以参考。但我在开发过程中遇到一定的问题,比如HMACSHA1加密字符串为类试:GET&http%3A%2F%2Fapi.t.sina.com.cn%2Foauth%2Frequest_token&oauth_consumer_key%3D1331820154%26oauth_nonce%3D7971285%26oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3D1318247463%26oauth_version%3D1.0。这里的“=”符号不是用.netURLEncode的,而是%3D,我开始用框架自带的URLEncode后为%3d,导致老是提示401未授权的问题。这里的所有URLEncode后的小写字母都必须大写,并且request_token&oauth_consumer_key这里的“&”符号并没有进行任何编码处理,否则也会出问题。

新浪微博提供的API接口也相当多,详细描述可以参考http://open.weibo.com/wiki/API%E6%96%87%E6%A1%A3, 下面以获取粉丝为例:http://open.weibo.com/wiki/Statuses/followers,请求URL地址为:http://api.t.sina.com.cn/statuses/followers.(json|xml) 基本都支持xmljson两种返回格式,请求方式为GET,新浪API有比较详细的描述,我用xml,它会返回类试:

<?xml version="1.0" encoding="UTF-8"?><users><user><id>2290721941</id><screen_name>辉明时</screen_name><name>辉明时</name><province>45</province><city>1000</city><location>广西</location><description></description><url></url><profile_image_url>http://tp2.sinaimg.cn/2290721941/50/5612099136/1</profile_image_url><domain></domain><gender>m</gender><followers_count>5</followers_count><friends_count>46</friends_count><statuses_count>1</statuses_count><favourites_count>0</favourites_count><created_at>Tue Aug 09 00:00:00 +0800 2011</created_at><following>false</following><verified>false</verified><allow_all_act_msg>false</allow_all_act_msg><geo_enabled>true</geo_enabled><status><created_at>Tue Aug 09 19:38:47 +0800 2011</created_at><id>3344565122238306</id><text>为什么你下雨还要拉着我出来散步… []</text><source><a href="http://weibo.com">新浪微博</a></source><favorited>false</favorited><truncated>false</truncated><geo/><in_reply_to_status_id></in_reply_to_status_id><in_reply_to_user_id></in_reply_to_user_id><in_reply_to_screen_name></in_reply_to_screen_name><mid>3344565122238306</mid></status></user>。。。

xml字符串返回,自己可以通过xml的结构,组装成相应数据结构,再展现出来。

下面通过OAuth发布一条新浪微博出来,请求的URL地址为:http://api.t.sina.com.cn/statuses/update.(json|xml) ,这里需要请求方式为POST,具体参数可以参考http://open.weibo.com/wiki/Statuses/update

发布成功后为:

这里是因为我创建了一个应用,但应用还没有正式审核,所以这么显示的。

感兴趣的,或者经常玩新浪微博的,可以follow me哦,http://weibo.com/lawsonliu/

优质内容筛选与推荐>>
1、7.2.1 - 并发多线程 进程理论知识
2、vs2010编辑器中找不到System.Web.Extensions.dll
3、BZOJ 1597 Usaco2008 Mar土地购买
4、button标签与input type=button标签使用的差异
5、看板娘相关源码介绍


长按二维码向我转账

受苹果公司新规定影响,微信 iOS 版的赞赏功能被关闭,可通过二维码转账支持公众号。

    阅读
    好看
    已推荐到看一看
    你的朋友可以在“发现”-“看一看”看到你认为好看的文章。
    已取消,“好看”想法已同步删除
    已推荐到看一看 和朋友分享想法
    最多200字,当前共 发送

    已发送

    朋友将在看一看看到

    确定
    分享你的想法...
    取消

    分享想法到看一看

    确定
    最多200字,当前共

    发送中

    网络异常,请稍后重试

    微信扫一扫
    关注该公众号