twiproxy – 基于GTAP 0.4的twitter API proxy

twitter终于封杀了basic auth,为了避免被拒之墙外,在Google Appengine上装了一个GTAP 0.4的版本,貌似Twitterrific可以用了,但Twitter的官方客户端还不能使用。

说起Twitter官方,那可是很纠结的一段。

最初还是tweetie的时候,特意买了一套,谁知不久twitter被封杀,tweetie不支持代理,等啊等,听说tweetie 2支持代理了,才发现之所以叫2原来是不能升级令要付钱的,嘿嘿,有点上当的感觉啊

后来,tweetie被twitter收购,变成官方,免费的客户端,高兴啊,赶快去下载,发现下的不能用,原来又升tweetie 3了,而tweetie 3只支持xAuth,比如GTAP这样的,只支持oAuth的也不能用。

没办法,偷懒不了,自己动手吧

说起xAuth,其实是oAuth的简单模式,和Basic Auth最大的不同是,不再传递用户名和密码,而是传递access_token和自签名数据,GTAP之所以不支持,是因为没有对oauth/access_token这条指令做支持。

所以,在GTAP上做了几处修改:

  • 添加oauth/access_token这条指令的处理,将客户端发送过来的用户名/密码转换成access_token和access_token_secret
  • 当客户端发送请求时,通过客户端发送的access_token获取access_token_secret。GTAP使用用户的密码对保存的access_token和access_token_secret进行加密,导致无法直接通过access_token获取access_token_secret,这本是安全机制,不过考虑到部署者完全可以通过log方式输出用户名密码或者token,所以改为明文存储。可能还有更好的办法,这里先偷个懒吧,反正一般都是自己部署的APP
  • 增加了basic命令,按说起来,通过代理是完全可以支持原有的Basic Auth的客户端的,比如Chrome著名的插件Metrist,通过basic可以实现这个,但目前的测试结果比较奇怪,数据已经正常返回了,但Metrist只有偶尔可以获取到,不知道为什么

为了开发方便,在Google Code上重新构建了一个项目twiproxy,采用和GTAP一样的开源协议,有兴趣的可以去看看,也欢迎提供修改建议:)

最后列一下twiproxy的功能

  • 支持原有GTAP 0.4的功能
  • 支持xAuth模式,即支持twitter for iPhone登录
  • 支持原有basic auth客户端(未确认)

地址:

  • twitter.com : xxx.appspot.com/
  • api.twitter.com : xxx.appspot.com/api
  • basic auth : xxx.appspot.com/basic

Related posts:

9 thoughts on “twiproxy – 基于GTAP 0.4的twitter API proxy

  1. 麻烦告诉我怎么用gae搭建支持XAuth的twiproxy,因为我的手机只支持java,用的twibble客户端,而它只支持XAuth,好象你的twiproxy解压后没有关于XAuth的文件夹,只有关于OAuth的文件,我是新手,麻烦详细介绍搭建支持XAuth的twiproxy的API,现在没有关于搭建支持XAuth的twitter的API的文章,我急需要,一定要教我呀!我的邮箱taotao158711@gmail.com

    • twiproxy基于GTAP构建,所以配置方法与GTAP一致,请在网上搜索GTAP,有很多非常详尽的安装指南

  2. 在最新版的Twitter for iPhone(v3.2.1, 2010/11/17发布), 登录可以, 刷timeline不行, 出现XmlParseStartTag: invalid element错误, 但是search API却是可用的. 同样的api在TwitBird下都OK. 

  3. 搞定了, 呵呵, 把123.appspot.com/改为123.appspot.com/api/就好了, 不过Push Notification不行, 设置页面打不开. 还是谢谢了! 

  4. @deviny 可以先在iPhone上翻墙(VPN什么的), 然后不用api直接添加账户, 然后设置push, 再拆墙. 这样, 就可以通过新添加的账户来接收push, api proxy账户来看推/发推. 

  5. GAE被运营商封杀了,如联通,这样的话,在没有WIFI(基本走的电信的网络)的状态下,只能通过联通3G上网了,虽然使用Twiproxy,但是没法连接 http://xxx.appspot.com 的话,还是不行,Twitter for iPhone还可以设置HTTP代理吗?

  6. main.py 源代码里 有一段
    self.response.out.write( 'oauth_token=%s&oauth_token_secret=%s&user_id=153814517&screen_name=%s&x_auth_expires=0' % (oauth_token, oauth_token_secret, screen_name) )

    user_id=153814517 这个是什么意思?

Leave a Reply

Your email address will not be published. Required fields are marked *