这两天陆续使用了好几个网站的API,很是不爽,所以写一个简单的小结在这里,仅供参考,如有错误,请在回复中指出。
注意:写下这段文字的时间是2012年12月9日,这些内容的变化是非常快的。
OAuth版本
这是最令人头疼的问题,不同的网站使用不同版本的OAuth,而OAuth 1.0和2.0不互相兼容。甚至即便使用OAuth 2.0的网站,也有不同的API调用方法。
在我使用的几个网站中,Twitter、Fitbit和饭否使用的是OAuth 1.0。而foursquare、人人网和新浪微博使用的是OAuth 2.0标准。(注:这些信息来自它们的文档)
按照OAuth工作组Hourse Luke的说法,两个版本相比,对开发者来说最大的不同是,OAuth 2.0中,access token不是长期有效的了。但实际上,通过查阅foursquare、人人网和新浪微博的文档,它们的对token的描述各有不同:
- foursquare说,它的access token是不会过期的
- 新浪微博说,对于普通应用,access token的有效期是7天,过期之后用户必须 重新授权
- 人人网说,它的access token会在一定时间内过期,但是可以用refresh token来换新的access token,而refresh token是长期有效的
这简直是蛋疼的要死。
解决方案
对我来说,写这个程序的目的是把fitbit和foursquare的信息同步到国内的网站上,它们本身支持同步信息到Twitter和facebook。所以我起初的思路是想办法把信息从Twiiter同步到饭否等网站上,于是我找到了月光博客的这篇文章,作者写了一个以Twitter为中心的同步工具。遗憾的是,这个工具是将近三年前的了,由于各网站的更新,代码已经完全无法使用了。
所以只能设法自己写一个了。
对于我的需求,其实是不需要写一个多么复杂的应用的。因为只是写给自己用的。遗憾的是,在这么多网站中,只有Twitter考虑到了用户的这种需求,Twitter提供了“Single-user OAuth”,这样无需使用任何工具,即可得到供自己使用的access token和access secret。
对于其他网站,则必须自己来生成了。在此,推荐使用python-oauth2这个项目。项目的README
中有一个OAuth的示例。使用这个程序即可非常方便的获得OAuth 1.0网站(fitbit和饭否)的access token。而且文档中同样给出了非常简洁的使用示例,可以直接拿来使用。
对于OAuth 2.0则没有这么方便了。刚才说过,不同网站的策略不一样。这里简单描述一下:
foursquare
可以通过foursquare-app-framework迅速得到一个应用框架,我们需要做的就是根据文档去修改参数,然后填充自己的代码即可。
人人网
人人网则要相对麻烦一些。
要解决的第一个问题是,如何得到access token和refresh token。我的做法是,从它的开发手册中下载一个php-connect程序,然后部署到一个php服务器上,得到refresh token和access token。
然后,我们可以在人人网的开发指南中找到Python SDK,这样我们就可以通过access token去访问数据了。
但是这里有一个问题,人人的access token是会过期的,所以方便起见,在每次调用API前,可以用长期有效的refresh token先换取access token,再访问API。
新浪微博
这货竟然要每7天授权一次,还是不用比较好。
小结
前文提到的Hourse Luke这个人在2012年7月辞掉了OAuth 2.0的首席作和和校订者,从标准中删掉了自己的名字,然后离开了工作组。
他说:如果你现在用1.0用得很成功,就忽略掉2.0吧。