twitter-api-proxy


an proxy of twitter api

这是一个基于appengine的twitter api 代理.

它只提供:

  • 纯API代理
  • 支持Oauth/Xauth (请查看 注意事项)
  • 对客户端透明,无须人工干涉oauth授权过程
  • 兼容basic方式授权的client

使用方法:

  • 自建api proxy
    1. 去twitter申请一个app,并勾上读写权限,并设置app类型为client类型.
    2. 下载代码,部署到你的appengine上.
    3. 将Config.py中的属性配置成你的app相应内容(oauth_consumer_key和oauth_comsumer_secret)
    4. 使用支持自定义api的第三方应用(如果有basic和oauth两个模式选择的话,依然选择basic的),应用地址为http://your.appengine.com/twitter.(或者修改Entry.py中的handle 以及app.yaml里的配置)

注意事项

  • 请务必以basic api proxy的方式使用此proxy.原因见原理部分.
  • 对来自 客户端 的oauth和xauth的支持取决于客户端client的实现.看客户端在做ouath签名的时候是拿twitter的url还是拿proxy的url.只有以twitter的url做签名的才能通过proxy.

原理:

  1. 当basic的客户端通过VerifyCredentials进行验证的时候,拦截此请求,转由appengine完成oauth验证过程.此过程将使用basic header里的用户名密码进行oauth授权.授权页面由appengine分析页面结果自动完成,无需人工干涉.
  2. oauth完成后,将用户的用户名,md5之后的密码,以及oauth_token和oauth_token_secret存放在appengine上.
  3. 对于其他api call,将从http header里获取basic authorize中的用户名密码,根据用户名取得存在appengine上的信息.通过对比保存的密码的md5值,决定是否继续代理api call
  4. 密码验证通过后,对于Appengine来说,它会截获 http://your.appengine.com/twitter , twitter后面的字符串模式,直接拼接到实际的REST请求串中.
  5. 利用前面从appengine取得的用户保存的信息,替换http header里的Authorization 为oauth格式
  6. 由appengine发送请求到达twitter的REST服务器,返回结果.
  7. appengine将返回结果作为相应,返回到客户端.

帮助

有bug或者其他什么问题反馈,请移步http://code.google.com/p/twitter-api-proxy/issues/list/,或者联系 @zizon

Project Information

Labels:
twitterapiproxy python twitter api proxy appengine