您现在的位置是:首页 > 学无止境
基于PECL OAuth打造微博应用
转载自:http://huoding.com/2011/01/16/42
作者:老王
最近,国内主要门户网站相继开放了微博平台,对开发者而言这无疑是个利好消息,不过在实际使用中却发现平台质量良莠不齐,有很多不完善的地方,就拿PHP版SDK来说吧,多半都是用TwitterOAuth 改的,一旦多平台集成,很容易出现命名冲突之类的问题。
既然官方SDK不给力,那我们只能发扬自力更生的革命精神了!好消息是PHP本身已经有了一个标准的OAuth实现:PECL OAuth !下面以此为例来讲解一下如何实现微博应用:
说明:首先需要对OAuth概念有一定的了解,如不清楚可以参考我以前写的文章:OAuth那些事儿 ,其次需要注册成为各个微博平台(新浪 ,腾讯 ,搜狐 ,网易 )的开发者,拿到属于你自己的CONSUMER_KEY和CONSUMER_SECRET(有时也被称作APP_*)。
下面开始!假定我们要开发一个类似Follow5 和微博通 的应用,简单点说就是把消息同时发送到多个微博平台,出于安全性的考虑,不会使用HTTP Basic,而会使用OAuth,这就需要我们先拿到Access Token和Access Token Secret。
以新浪微博为例,大致的代码如下:
腾讯微博相比较而言有点特殊,大致代码如下:
注意:参数nonce和callback的设置,详见:使用 PECL 的 OAuth 库访问 QQ 微博 API 。
照猫画虎就能得到搜狐和网易的Access Token和Access Token Secret了,我就不罗嗦了。
下面继续做我们的微博应用,发消息一般都是文本形式的,不过有中国特色的微博开放平台支持文本加图片的方式:图片上传到服务器,但本身并不参与签名。这和标准OAuth是冲突的,所以要扩展一下PECL OAuth,并且尽可能兼容原类的使用方法和习惯:
注意:为了让代码潮一点,用了一些PHP5.3以上版本才有的特性,你可以改写成低版本。
如果使用CURL方式发送请求的话,最好发送一个空的Expect头,否则如果POST数据大于1K,CURL会自作主张发送 Expect:100-continue头,对多数Web服务器来说这没问题,但低版本Lighttpd(如1.4)则会出现HTTP 417错误。
详见:‘Expect’ header gives HTTP error 417
如果使用PHP Streams方式发送请求的话,缺省使用的是HTTP1.0版本,可以通过tcpdump命令来检测这种现象,大致方法如下:
shell> tcpdump -A host foo.com
此时,某些防火墙会过滤掉非标准HTTP1.0的请求头,如Host请求头,从而造成错误。
详见:由于 HTTP request 不规范导致的被防火墙拦截 。
新类MicroblogOAuth直接扩展自PECL的OAuth类!随着PHP内核API的逐渐类化,这样的扩展方式将会越来越常见,值得开发人员重视。
为了让调用方式更统一,使用工厂方法包装MicroblogOAuth的实例化过程:
先看看搜狐是如何发送文本加图片消息的:
说明:搜狐要求文本要先编码,然后和图片一起发送,这点不同于其它微博开放平台。
再看看网易是如何发送文本加图片消息的:
说明:网易发送文本加图片消息是分两步实现的,先上传图片,然后把图片的URL附加在文本信息的后面再发送到服务器,这点不同于其它微博开放平台。
收工!微博开放平台的使用并没有太多复杂的地方,仔细看文档调试,一般的问题都很容易解决。有了上面的基础代码,只要再使用适配器模式分别包装一下各个微博平台,很容易就能实现一套通用SDK,搞定新浪,腾讯,搜狐,网易!
上一篇:在PHP语言中使用JSON
下一篇:jQuery1.5的改进细节
文章评论
- 登录后评论
点击排行
-
php-fpm安装、配置与优化
转载自:https://www.zybuluo.com/phper/note/89081 1、php中...
-
centos下postgresql的安装与配置
一、安装(以root身份进行)1、检出最新的postgresql的yum配置从ht...
-
Mysql的大小写敏感性
MYSQL在默认的情况下查询是不区分大小写的,例如:CREATE TABLE...
-
关于URL编码
转载自:http://www.ruanyifeng.com/blog/2010/02/url_encoding....
-
header中的Cache-control
网页的缓存是由HTTP消息头中的“Cache-control”来控制的,常见的...