为了安全原因,twitter将在不久的将来彻底停止使用HTTP Basic Auth这种验证方式,全面改用更为安全的OAuth方式,也就是说,理论上每次通过api来访问twitter,都得先跳转到twitter官方登陆以后在callback到你的客户端twitter软件上,这就造成了一个问题,墙内用手机或者其他twitter客户端的话,每次都得翻墙先登陆一下,这可就麻烦了.以前的普通api验证将全面失效.
群众的力量是强大的,在不久之后就有人写出了支持OAuth验证方式的api.还有好多种方式,为此我选了几个比较热门的试了一下.一开始我用的是twip但是发现要用这个api,必须找一个支持php的空间,而且还必须满足某些权限的需求.这就比较麻烦了.不可能放在自己空间里.那天空间被墙了就不值得了.后来无意间有爱好者修改了gtap,使它支持了OAuth的验证方式,这个就相当爽了.哈哈.更重要的是,它是基于google app engine 也就是大名鼎鼎的GAE制作的.api放置空间的问题就很容易得到解决了,下面就说说搭建自己的OAuth验证方式API的方法.
首先自然要先注册一个GAE的账号,关于如何注册,应该来说还是比较简单的.相关文章也很多,可以自己google.我这里贴一个链接,当然,这一切的前提你得拥有一个google账号,步骤当中需要用手机接收一个验证码,可以放心填写手机号码,不产生费用
http://imnerd.org/apply-gae.html
注册好以后,下来就是搭建你的GAE上传环境了,搭建的话,著名的月光博客有一段描述,我就不重复了,给链接地址
http://www.williamlong.info/archives/1956.html
这里要注意一下,下半段讲的是关于BirdNest,这个是基于base auth方式的,可以不必理会.还有上传修改好的程序到GAE的话,google SDK安装好以后会带一个叫GoogleAppEngineLauncher,不需要手动去敲命令,直接用那个工具上传你的代码即可
准备工作做好以后,下来就是下载我们的主角gtap修改版,下载地址如下
http://code.google.com/p/gtap/issues/detail?id=9
注意看一下,最新的修改版在8楼,作者又更新了一点小bug,下载下来以后,你要做的事情是先把代码放着,这个时候你需要翻墙了.登陆twitter去申请app key
登陆Twitter程序中心注册一个新程序,注册的时候Application Type选”Browser”,Callback URL填入填写能访问到”callback.php”文件的完整网址,我们这里用的gtap callback地址是”https://xxx.appspot.com/oauth
/twitter/callback”,Default Access type选”Read & Write”。注册完成后系统将自动分配给你”CONSUMER_KEY”和”CONSUMER_SECRET”
下一步就是打开下载下来的gtap文件当中的oauth.py,推荐用ultra edit打开,找到其中的 OAUTH_APP_SETTINGS = … 下面有两行’consumer_key’: 和 ‘consumer_secret’: 把你刚刚申请到的两个字符串填到里面去,保存退出
下一步打开app.yaml,修改你的application: 第一行,后面填上你GAE的app name
做好这些准备工作以后,你就可以正式上传你的gtap代码到GAE了.哈哈,用之前提到的GoogleAppEngineLaunche提交代码
上传完成以后,工作就完成了大半.哈哈然后就是访问访问https://xxx.appspot.com/oauth/twitter/login 点注册(这个时候需要翻墙来登陆一下twitter,完成之后就callback回去),完成后会显示一个key,你可以在gtap下面修改你的key,其实也就是你的api密码,可以和你的twitter账户密码不相同,然后就OK啦 哈哈
最后一步就是在你的客户端程序当中,填入你的api地址 https://xxx.appspot.com/gtap_oauth/,用户名随意,密码就是你最后填入的那个key 注意这里是https,一开始我忽略了,只能看推,不能发,后来改成https就好了.
enjoy ; )
————————————
补充一下,我们常用的twitter客户端 chrome下最好用的插件 chrowety ,iphone当中最好用的我觉得是TwitBird,有免费版,功能貌似一个不少.可能有广告吧.我买的是pro版,哈哈.还有就是塞班系统下比较有名的Gravity,都是支持api的比较好的客户端
小果
2010年05月18号 at 10:21 下午
Coriolanus
2010年05月19号 at 10:55 上午
请教博主,我在注册Twitter API时,填写https://xxx.appspot.com/oauth
/twitter/callback后被拒绝,提示非法url地址,但是如果填https://xxx.appspot.com/就可以,当然这个callback地址是错误的。
这可如何是好?
mf
2010年05月19号 at 2:32 下午
额,应该是https://xxx.appspot.com/oauth/twitter/callback
xxx修改成你google申请项目时候的项目名称,而不是xxx
syuanli
2010年05月19号 at 7:53 下午
用这个https://xxx.appspot.com/oauth
/twitter/callback X换成我申请的ID进入出现这以下内容是什么意思,我技术小白,不懂,以前建API都没问题。望回复: syuanv@gmail.com
Traceback (most recent call last):
File “/base/python_runtime/python_lib/versions/1/google/appengine/ext/webapp/__init__.py”, line 511, in __call__
handler.get(*groups)
File “/base/data/home/apps/syuanlix/1.342057793787034897/oauth.py”, line 440, in get
self.handle(service,action)
File “/base/data/home/apps/syuanlix/1.342057793787034897/oauth.py”, line 455, in handle
self.response.out.write(getattr(client, action)())
File “/base/data/home/apps/syuanlix/1.342057793787034897/oauth.py”, line 301, in callback
return get_request_token()
NameError: global name ‘get_request_token’ is not defined
niqian
2010年05月19号 at 8:17 下午
请教博主,gae上传完成,callback回去之后得到的那个key是不是浏览器地址栏中“https://nqoauth.appspot.com/?oauth_token=”后面的长长的那一串字符?
后面博主说“你可以在gtap下面修改你的key”是改那一行上的?是不是consumer_key这个,如不是,还请给个行号。
mf
2010年05月19号 at 8:39 下午
@syuanli 我进twitter看了一下,我的twitter app里面设置的callback地址是 http://xxx.appspot.com/oauth/twitter/callback 成功了.没有用https,可能我设置的时候没注意.不知道用https是不是就不行了.你可以试试http方式,其他的话,就是Default Access type: 设置成read and write模式 Application Type 选 Browser 这是两个比较关键的地方.
剩下的就可能是你的gtap是否修改正确并且上传了.需要修改的是两个文件,我文中提到的key修改,和另一个文件的app名字.要和你GAE申请项目的名字一致.这几个要点做到的话,应该没什么问题.你再试试,如果还有问题可以再回复我
mf
2010年05月19号 at 8:46 下午
@niqian 你在gtap中要修改的key是从twitter里申请application API的时候得到的,包括Consumer key和Consumer secret,在你申请twitter application成功之后会自动告诉你.你将两个字符串填到oauth.py的54和55行
‘consumer_key’: ’000000000(你自己的key)’,
‘consumer_secret’: ’00000000(你自己的consumer_secret号)’,
twitter application申请地址应该是你登陆twitter的http://twitter.com/apps 这个操作需要翻墙
niqian
2010年05月19号 at 8:58 下午
还是请教博主,“完成之后callback回去”,这步已完成,之后“完成后显示一个key”,这个key在哪里?是不是浏览器地址栏里最后的那一串东西?
niqian
2010年05月19号 at 9:39 下午
还想问一下博主,一开始的callback.php,这个php文件是在哪里获得的?
niqian
2010年05月19号 at 9:43 下午
打扰博主了,问题已解决
mf
2010年05月19号 at 10:30 下午
那个key 在callback回去的页面里会直接显示,你可以在下面的输入框中自己修改,恭喜@niqian 搭建成功
小果
2010年05月19号 at 10:32 下午
我顺便补充一句,塞班系统上的Gravity不是免费的,需要花钱购买,原价是70多块的样子,在ifanr上团购是50块,但是这笔钱是一次性支出终身免费使用的,即使你换了手机只要还是塞班系统,还是可以用下去,性价比是很不错的
Coriolanus
2010年05月20号 at 4:50 下午
原来是自己的callback的url中出现空格,去掉之后一切顺利!
谢谢博主!
colin
2010年05月21号 at 2:24 上午
一直用破解版的Gravity
Levi
2010年06月8号 at 4:26 下午
oauth.py 和 oauth_config.py
这个两位文件都要填写
consumer_key: 和 consumer_secret
少一个就会出错 。
小懒。
2010年06月8号 at 10:44 下午
ptcoogle
2010年06月22号 at 11:14 下午
求助,我用一个免费php空间搭建了twip,然后也能在网页上看到时间线了。但我在用twitbird pro的时候,总是连接服务器失败。换回老的appspot上建的api就没问题
Lionel
2010年06月24号 at 10:46 上午
我已经搭建好了,可是怎样把这枚API用于客户端呢。求指教。
mallocfeng
2010年06月27号 at 8:22 下午
@ptcoogle twip我也没有搭建成功,所以我用的是gtap
mallocfeng
2010年06月27号 at 8:23 下午
@Lione 我文章末尾已经下了,把api地址复制进客户端的api地址那一栏即可..前提是客户端要支持自定义api