Tag Archive for 'birdnest'

自建birdnest Twitter API proxy

之前一直以为birdnest必须在GAE环境下才能搭建,经由Black-Xstar的提醒,才知道只要主机支持python即可使用birdnest搭建twitter api proxy。经过尝试之后终于成功搭建了一个birdnest的twitter api proxy.

首先你要有一个支持python,并且你有ssh访问权限的虚拟主机空间。如果你没有,你可以选择在Google App Engine上搭建。具体可以参考ifanr论坛上的教程,这里不再赘述。

birdnest是一个python程序,它使用wsgi开启了一个http服务,能接受正常http的post和get请求。只要运行了这个python程序,它将在指定的端口监听。说了这么多废话,无非就是这个意思:birdnest不像php程序一样,把文件放在某个web目录下即可,需要单独运行它并保持这个程序打开。

需求:
svn客户端。如果没有,可以以web方式从birdnest官网co出最新的代码。
python环境。经过测试,至少需要>=python2.5,至于具体到哪个版本号我就没详细测试了。我使用的是python2.5.2
GNU screen。这玩意儿是标配吧?

具体步骤(假设在linux虚拟主机上操作。如果你使用的是windows主机,请自行安装svn客户端以及所需的python组件)

  1. checkout最新的代码:
    在任意目录执行:

    svn checkout http://birdnest.googlecode.com/svn/branches/stable birdnest-read-only

    代码将放置于当前目录下的birdnest-read-only目录下。注意这里co的是最新的stable分支的代码。trunk分支里的代码经过测试有代码错误,无法正常使用。

  2. 进入目录,执行
     python code.py 虚拟主机的ip:你需要的端口

    例如我的虚拟主机ip是64.62.216.123,我想让birdnest监听1234端口,那么我执行:

    python code.py 64.62.216.123:1234

    这时候可能有两种情况:

    1. 你看到如下输出:http://64.62.216.123:1234/。那么一切正常,恭喜你,你的birdnest已经搭建完毕
    2. 你看到类似这样的错误信息:

      Traceback (most recent call last):
      File “code.py”, line 9, in
      from birdnest.filter import Filter
      File “/home/yegle/birdnest/birdnest/filter/__init__.py”, line 5, in

      import simplejson
      ImportError: No module named simplejson

      很遗憾,你有麻烦了…你的python环境缺少birdnest需要的模块。没关系,手动安装之。具体的方法后面再说

  3. 假设你已经成功运行了birdnest,尝试用你的twitter客户端使用这个api地址,即http://你的ip:你的端口/api。
    birdnset提供了3种api,/api、/optimized、/text。具体的区别你可以在birdnest官网查到。
    如果你成功访问了这个api,终端将给出日志信息,格式类似于apache的访问日志。同时当前目录的log.txt将记录一些更加详细的信息。如果你不能访问这个api,或者访问遇到了错误,应该先看看log.txt再寻求帮助
  4. 客户端访问正常后,请ctrl+c结束birdnest,然后运行screen,再运行
    python code.py 64.62.216.123:1234

    然后用ctrl+a,d将当前的screen进程detach,退出ssh登陆。不出意外的话,这个时候你仍然可以使用你的api proxy。至此,birdnest twitter API proxy在自己主机上的搭建完成。

关于python环境:
首先仔细看birdnest运行时提示的信息,看缺少的是什么模块。分两种情况:

  1. 缺少的是python标准库里的模块。如提示缺少etree模块。这是因为你使用的python版本过低。
  2. 缺少的是其他模块。你需要手动安装模块。

如果你使用的是独立主机或者vps,最简单的方法就是让系统管理员来解决问题。
如果不是,并且你没有root权限,那么你只能安装python及其他模块到你的家目录了。
python的安装比较简单,configure的时候把prefix指定为你的家目录下某个文件夹即可
模块的安装,下载模块解压后,运行

python setup.py build

编译模块,然后

python setup.py install --prefix=你想安装的目录

。安装完成后,用

PYTHONPATH=你安装的目录 python code.py 你的ip:你的端口

来运行birdnest

使用tweetr架设twitter api proxy

twitter被墙了

估计很多人知道了http://nest.onedd.net/api这个twitter api proxy,在某些支持twitter api地址更换的软件(例如twitterfoxspaz以及symbian s60上的gravity),使用这个api proxy即可翻墙继续使用,和用穿墙代理以及修改hosts之类的方式比有非常明显的优势。

但是birdnest这个项目需要在Google App Engine上架设,众所周知GFW对GAE一直虎视眈眈,在GAE上架设twitter api proxy各种不靠谱。而我自己有php环境的虚拟主机空间,所以我一直在找一个php架设twitter api proxy的办法。

昨天经过@paveo的提醒,知道了tweetr这个项目。折腾半天后终于搞定了php环境下twitter api proxy的架设。

如何架设的办法在tweetr项目主页的wiki上有说明,英文过关的同学请自行阅读原文,其他同学请看本人的翻译:

环境需求:

>=PHP5

PHP包括curl支持

允许修改.htaccess文件

(译注:绝大多数虚拟主机空间都满足以上要求)

安装指南:

1、下载解压tweetr_php_proxyXXXX.zip,将其中的proxy/文件夹放到web目录下任意位置

2、这条请自行看原文,似乎是说,在flex程序里使用这个twitter api proxy,并且程序和api proxy不在同一域,需要将解压得到的crossdomain.xml放在api proxy所在域的web根目录下。这条基本无关主题,请无视……

3、修改index.php,将其中的$twitterOptions['baseURL']修改为你的proxy文件夹相对web根的路径。例如你将proxy文件夹重命名为twitterapi放在http://yegle.net/twitter/twitterapi下,这里就填写’/twitter/twitterapi’

=========================分割线

安装完实际使用中发现twitterfox和spaz都提示cannot authencation,看了一下代码,原来是部分请求没有发送验证用的用户名密码,猜测是因为这个api proxy本身只是为了跨域“读”twitter上的数据方便,没有考虑到需要“写”twitter数据。更改Tweetr.php,修改function parseRequest其中的一部分,具体位置在94行左右。

在其中加入2行:

strpos($this->url['path'], “statuses/replies.”) != false ||

strpos($this->url['path'], “account/verify_credentials.”) != false ||

即可

PS.这里的strpos(blablabla)!=false,双重否定太发指了!还有互相之间的或关系……各种逻辑混乱……

PS2.不要直接复制粘贴代码……wordpress会把双引号和单引号转换成其他字符……谁能告诉我有什么简单的在wordpress里粘贴代码的方法?