随时随地免翻墙通过API OAuth验证方式用twitter

为了安全原因,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的比较好的客户端




相关文章:

coded by nessus

随时随地免翻墙通过API OAuth验证方式用twitter》上有 20 条评论

  1. 请教博主,我在注册Twitter API时,填写https://xxx.appspot.com/oauth
    /twitter/callback后被拒绝,提示非法url地址,但是如果填https://xxx.appspot.com/就可以,当然这个callback地址是错误的。
    这可如何是好?

  2. 额,应该是https://xxx.appspot.com/oauth/twitter/callback
    xxx修改成你google申请项目时候的项目名称,而不是xxx

  3. 用这个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

  4. 请教博主,gae上传完成,callback回去之后得到的那个key是不是浏览器地址栏中“https://nqoauth.appspot.com/?oauth_token=”后面的长长的那一串字符?
    后面博主说“你可以在gtap下面修改你的key”是改那一行上的?是不是consumer_key这个,如不是,还请给个行号。

  5. @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申请项目的名字一致.这几个要点做到的话,应该没什么问题.你再试试,如果还有问题可以再回复我

  6. @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 这个操作需要翻墙

  7. 还是请教博主,“完成之后callback回去”,这步已完成,之后“完成后显示一个key”,这个key在哪里?是不是浏览器地址栏里最后的那一串东西?

  8. 还想问一下博主,一开始的callback.php,这个php文件是在哪里获得的?

  9. 那个key 在callback回去的页面里会直接显示,你可以在下面的输入框中自己修改,恭喜@niqian 搭建成功 :)

  10. 我顺便补充一句,塞班系统上的Gravity不是免费的,需要花钱购买,原价是70多块的样子,在ifanr上团购是50块,但是这笔钱是一次性支出终身免费使用的,即使你换了手机只要还是塞班系统,还是可以用下去,性价比是很不错的

  11. 原来是自己的callback的url中出现空格,去掉之后一切顺利!
    谢谢博主!

  12. oauth.py 和 oauth_config.py
    这个两位文件都要填写
    consumer_key: 和 consumer_secret
    少一个就会出错 。

  13. 求助,我用一个免费php空间搭建了twip,然后也能在网页上看到时间线了。但我在用twitbird pro的时候,总是连接服务器失败。换回老的appspot上建的api就没问题