档案

Posts Tagged ‘新浪微博’

新浪微博OAuth认证总结

2011-07-25 留下评论

自从最近Twitter只支持OAuth认证方式以来,各大应用都纷纷转向OAuth认证方式,而新浪微博的开放平台也将在近日停止Base OAuth的认证方式。

为了能够继续使用新浪微博的开放平台,开始研究OAuth的认证方式,经过一段时间的实践,对于新浪微博开放平台的OAuth认证方式,有一定的经验。鉴 于网上对于这个平台的OAuth相关资料比较少,因此在此分享一下过程中积累的经验,希望可以帮助到一些要使用OAuth认证调用新浪微博接口的人~~

1.关于OAuth:

OAUth认证方式比于Base OAuth的认证方式最大的特点是,应用方并不需要保存用户的帐户与密码,只需要保存经过用户授权的Key与Secret组合即可对于平台上的所有接口资 源进行访问,在传输过程中也可以避免被不怀好意的人通过截包分析的方式获取到用户的帐号与密码。(有一说Twitter全面改用OAuth认证方式的原因 就是防止GFW通过截包获取到一些相关名人的帐号和密码)。具体的一些定义可以详细阅读OAuth的规范定义:OAuth规范

2.新浪微博开放平台:

新浪微博的开放平台基本上的接口,参数,返回格式都参考了Twitter的模式。当然,国内的另外一些开放平台都大量参考了Twitter的模式,因此基本上大同小异。要使用新浪微博的开放平台,当然必须先到它的网站上面进行注册:新浪微博API

注册之后,会得到Consumer Key 与 Consumer Secret这两个关键的字段,好好保存下来吧。

新浪微博的这个开发平台上面有充分的文档,能够很快的上手调用这些接口,除了个别较为难办的接口,我们下面再讨论。

3.对新浪使用OAuth:

使用OAuth,必须先让用户进行授权,一般来说授权的过程如下:
(1)由应用向新浪开发平台发出请求,获得未授权的Request Token与Request Secret,这个时候Request Secret暂时用不到,好好保存下来。

(2)将上一步获得的Request Token作为参数,引导用户浏览器跳至新浪微博的授权页面 ,用户进入这个页面登录新浪微博,进行Token的授权。如果在(1)中已经向服务器设置了浏览器的回调地址的话,则用户的浏览器将会被重定向至该地址,该地址将会新增一个参数:oauth_verifier,这个参数将在后面用到,好好保存。

(3)OAuth认证过程的最后一步,向服务器请求真正的 Token,将(1)中得到的Request Token,Request Secret和(2)中得到的oauth_verifier作为参数,传递给新浪微博服务器,服务器将会返回真正的Access Token与Access Secret,新浪微博还会返回用户在新浪微博中的userid。有了用户的Access Token与Access Secret就可以自由便利地调用新浪微博的开放接口了。

每个调用中,都必须带有OAuth的认证信息,作为OAuth的认证信息,基本上有两种方法可以加入到请求包中:

(1)最推荐的方法,采用HTTP的Authorization Header,这个头部的定义在RFC2617 里面有相关定义。

例如:

Authorization: OAuth realm= "http://photos.example.net/" ,
oauth_consumer_key=
“dpf43f3p2l4k3l03”
,
oauth_token= "nnch734d00sl2jdk" ,
oauth_signature_method= "HMAC-SHA1" ,
oauth_signature= "tR3%2BTy81lMeYAr%2FFid0kMTYa%2FWM%3D" ,
oauth_timestamp= "1191242096" , oauth_nonce= "kllo9940pd9333jh" ,
oauth_version= "1.0"


(2)或者可以采用,参数传递的方式,将OAuth的参数与正常的参数一样放置与Get的URL中,或者POST的包体内容中,都是可以的,

但遇到一些特殊情
          况就较难解决这个问题了。
4.OAuth认证参数解析:
 在上面可以看到,一个正常的OAuth认证中,包含以下若干参数:
  (1)oauth_consumer_key: 即是注册时,新浪给你的conusmer key,明文传输
  (2)oauth_token: 即是用户完成OAuth认证后的Access Token,在进行OAuth认证第三步的时候,为Request Token,第一步时不需要这个参数
  (3)oauth_signature_method:加密的方法,提供HMAC-SHA1, RSA-SHA1, PLAINTEXT 几种方法
  (4)oauth_signature: 对于全部参数进行加密后的字符串,包括consumer secret和access secret
  (5)oauth_timestamp:发请求的时间戳
  (6)oauth_version:可选的参数,基本上置为1.0,否则会出错的。
  (7)oauth_nonce:随机的值,防止重复调用
5.上传图片OAuth之痛:
  使用上面的方法,基本上可以解决所有的接口调用。但遇到难搞的上传图片这样的请求时,就需要一些方法取巧了。
  新浪微博的开放平台,要求上传图片时必须使用multipart/form-data的方式进行上传,但OAuth协议在定义时,描述Content-Type为application/x-www-form-urlencoded, 而并没有提及如何在multipart/form-data使用。
  在网上基本上找不到任何一个地方有提及在新浪微博的开放平台上以OAuth的方式上传图片,经过一个晚上的尝试与借鉴Twitter上的做法后,终于发现了解决方法。
  基本上,在协议上没有说明的内容,就必须由民间采用较为直观的方式进行解决。要在新浪微博的接口中进行图片上传,必须使用multipart/form-data作为Content-Type,而OAuth的认证参数不能放入form-data的参数中,必须使用Authorization Header来认证,而这时,必须将除了文件(file)的参数,就是将status这个参数加入到oauth的BaseString中进行加密,再将status作为fom-data的一个value中,这样就能够正常的上传图片并发表微博了。          通过这个简单而麻烦的方法,终于能够安全地上传图片到新浪微博。
6.最后
  至此,本人已成功调用新浪微博绝大多数的接口,并开始将应用覆盖搜狐微博,网易微博等开放平台,希望可以通过这篇文章,记录下一些经验与教训。
分类:Other 标签:,

新浪微博连接:使用新浪微博登陆 WordPress 博客

2011-07-24 留下评论

新浪微博开放了 API,并且支持 OAuth 协议,所以我和上次一样开发了新浪微博连接这款 WordPress 插件。

新浪微博连接是使用新浪微博 API 接口开发的一个 WordPress 插件,它的能让用户使用新浪微博账号登陆 WordPress 博客,并且可以直接使用新浪微博的头像,并且能够更新留言和日志到新浪微博。

新浪微博连接的主要功能

  • 使用新浪微博账号登陆 WordPress 博客,新浪微博连接插件会在留言框,注册页面,登录页面都会加入使用新浪微博连接的按钮,你只要几次点击,然后到新浪微博进行简单的验证就能使用新浪微博账号登陆 WordPress 博客。
  • 同步留言到新浪微博,新浪微博连接插件会在留言框增加一个选项,让用户选择是否把自己的留言同步到新浪微博,方便用户跟踪自己的网上行为,把新浪微博当作自己的 lifestream 一种方式。
  • 同步日志到新浪微博,新浪微博连接插件能够让 WordPress 管理员绑定一个新浪微博的账号,然后博客日志更新的时候,自动更新一条微博(标题+链接)到新浪微博。

新浪微博连接的安装要求

很多同学是有这个插件的主要的问题是不符合安装需求,新浪微博连接对服务器的要求比较高:

  • WordPress 3.0 版本以上
  • PHP 5.2,因为新浪微博 OAuth 类使用 PHP Class 语法,所以 PHP 版本要求 5.2 以上。
  • 支持 CURL 扩展,因为使用 CURL 进行连接,你可以通过 phpinfo() 函数来检测 PHP 版本和是否支持 CURL 扩展。

新浪微博连接的详细安装和使用说明

  1. 首先到这里下载 新浪微博连接 WordPress 插件,然后上传激活。或者直接在 WordPress 后台插件安装页面搜索“新浪连接”,然后在线安装激活。
  2. 安装激活之后,你应该在留言框处可以看到 新浪连接 的按钮。
  3. 如果没有出现该按钮,检查下是否你的主题的 comments.php 文件中含有 comment_form 这个 action,如果没有请加上:
    <?php do_action('comment_form', $post->ID); ?>
  4. 当然如果你想自定义 新浪连接 的位置,可以通过在 comments.php 文件添加以下函数实现:
    <?php sina_connect(); ?>
  5. 通过 WordPress 后台 > 设置 > 同步到新浪微博菜单来激活同步 WordPress 博客日志到新浪微博的功能。

新浪微博连接的常见问题

  1. 再次强调安装这个插件需要,WordPress 3.0 及以上版本PHP 5.2 及以上版本,并且支持 CURL 扩展,由此产生的问题,不再重复回答。
  2. 评论者的链接是微博中自己设的链接,能否调用评论者的微博地址?不能,如果你想实现该功能,请把 128 行的 $sinaInfo->url 改成:"http://t.sina.com.cn/".$sc_user_name
  3. 为什么使用新浪微博注册的用户的邮箱是 ****@t.sina.com.cn 这样的邮件地址,显然这是不存在的啊。

    因为新浪微博的 API 没有提供也不可能提供用户的邮箱地址,而 WordPress 用户注册,必须需要邮箱,所以只能使用这样的邮箱方式来代替,****@t.sina.com.cn,并且这样还有一个好处,当你需要找有多少用户是新浪微博的用户的时候,你可以使用这个 t.sina.com.cn 这个来检索。

  4. 自定义位置这个函数怎么用?

    这个只能告诉你把上面说的函数放到 comments.php 文件中,具体怎么放,怎么修改,你只能自己去学习。

  5. 出现 Call to undefined function menu_page_url() 或者 Call to undefined function get_user_meta() 这个问题,是怎么回事?

    请升级到 WordPress 3.0 版本,上面安装要求已经告诉你要 3.0 及以上版本。

  6. 如果用户使用新浪微博在博客上注册一个用户,并且他的新浪微薄用户名跟博客的一个现有用户相同,就会获取该用户的权限,这样是不是有风险?

    这样确实存在风险,你可以给新浪注册的用户名添加一个前缀来解决,在139行,'user_login' => $userinfo[1], 改成:'user_login' => 'sina_t_'.$userinfo[1],

下载新浪微博连接

对于新浪微博连接就介绍到这里,有什么问题请给我留言,你也可以在本博客使用新浪微博账号尝试登陆下。

下载:新浪微博连接 WordPress 插件

我新浪微博的地址:http://weibo.com/maniacxp

原文链接:新浪微博连接:使用新浪微博登陆 WordPress 博客

分类:WordPress 标签:, ,