今天Twitter开发者邮件列表上有一则官方声明,原文链接:https://groups.google.com/group/twitter-development-talk/browse_thread/thread/c2c4963061422f28
原文比较长,只要关心其中对中国用户影响最大的一条就可以:twitter计划在2010年6月份停止HTTP Basic Auth支持。
Continue reading ‘twitter抛弃HTTP Basic Auth对中国用户的影响’
今天Twitter开发者邮件列表上有一则官方声明,原文链接:https://groups.google.com/group/twitter-development-talk/browse_thread/thread/c2c4963061422f28
原文比较长,只要关心其中对中国用户影响最大的一条就可以:twitter计划在2010年6月份停止HTTP Basic Auth支持。
Continue reading ‘twitter抛弃HTTP Basic Auth对中国用户的影响’
声明:脚本以CC by-nc-sa协议公布,如需转载请给出原文链接并保留脚本头部的版权声明。
声明:本人不对可能发生的您的renren.com好友被刷屏、脚本错误反复刷屏、您的好友解除与你的好友关系、您的renren.com帐号被举报等等任何不良后果负责~
100129:修正脚本的bug
网上已经有一个twitter2renren的同步网站了,地址在这里:http://twitter2renren.appspot.com/
问题有两个,一个是据说现在已经无法同步了,另一个是这个网站需要输入twitter用户名密码,不支持OAuth,这让我很不放心。于是决定自己写个脚本。
自己动手丰衣足食,不过也有问题,一是一般只用于解决自己的问题,其他人可能还需要修改才能用,二是一般都是无比quick and dirty,懒得写注释和注意排版。这次这个代码好像好多人想用,所以已经尽量考虑比较多的特殊情况,排版也稍微好看一点了……
使用说明:
根据代码中的提示,修改几个变量的值
然后尝试运行一遍脚本,如果没有报错的话,你会看到最近的推显示在屏幕上。这是转发twitter到renren.com后根据renren返回的json解码得到的信息。
根据你执行脚本时的速度选择crontab的时间间隔。我这里选的是5分钟。执行crontab -e
添加以下代码:
*/5 * * * * /path/to/twitter2renren.php 2>&1 >>/path/to/logfile
Done!
以下为代码:
< ?php // //twitter2renren.php //By @yegle, yegle.net //Licensed under CC by-nc-sa // $file = '用于记录你最后一次同步tweet id的文件路径。注意不要删除并让脚本能读取!'; $cookie_file = '保留curl模拟登陆renren.com的cookie文件路径。'; $name_pwd = '你的twitter用户名密码。格式为:yourusername:yourpassword'; $hashtag = '如果你希望在你的推里包含特殊字符串时才转过去,请设置该变量,否则只转发不是以@开头的推'; $renren_username = 'renren.com登录用户名'; $renren_password = 'renren.com登录密码'; //配置完毕,请停止编辑文件! //That's it!Stop editing anything below unless you know what you are doing! if(file_exists($file)){ $lastid = intval(file_get_contents($file)); } else{ touch($file); $lastid = 0; } $timeline_url = 'http://'.$name_pwd.'@twitter.com/statuses/user_timeline.json?count=200'; if($lastid!==0) $timeline_url.='&since_id='.$lastid; $timeline = file_get_contents($timeline_url); $arr = json_decode($timeline,TRUE); if(empty($arr)) exit(); $new_id = $arr[0]['id']; if($new_id == '') exit(); file_put_contents($file,$new_id); $post_arr = array(); foreach($arr as $tweet){ if(strpos($tweet['text'],'@')!==0){ if($hashtag!=='' && strpos($tweet['text'],$hashtag)!==FALSE){ $post_arr[] = $tweet['text'].' [twitter]'; } } } $post_arr = array_reverse($post_arr); $renren_login = 'http://passport.renren.com/PLogin.do'; $ch = curl_init($renren_login); curl_setopt($ch,CURLOPT_COOKIEJAR,$cookie_file); curl_setopt($ch,CURLOPT_POST,TRUE); curl_setopt($ch,CURLOPT_FOLLOWLOCATION,TRUE); curl_setopt($ch,CURLOPT_POSTFIELDS,'email='.$renren_username.'&password='.$renren_password.'&autoLogin=true&origURL=http://www.renren.com/Home.do&domain=renren.com'); curl_setopt($ch,CURLOPT_RETURNTRANSFER,TRUE); curl_exec($ch); curl_close($ch); $renren_status = 'http://status.renren.com/doing/update.do'; foreach($post_arr as $item){ $post = 'c='.urlencode($item).'&raw='.urlencode($item).'&isAtHome=0'; $ch = curl_init($renren_status); curl_setopt($ch,CURLOPT_POST,TRUE); curl_setopt($ch,CURLOPT_POSTFIELDS,$post); curl_setopt($ch,CURLOPT_RETURNTRANSFER,TRUE); curl_setopt($ch,CURLOPT_COOKIEFILE,$cookie_file); curl_setopt($ch,CURLOPT_FOLLOWLOCATION,TRUE); curl_setopt($ch,CURLOPT_REFERER,'http://status.renren.com/ajaxproxy.htm'); $ret = curl_exec($ch); curl_close($ch); $ret = json_decode($ret,TRUE); echo $ret['msg']."\n"; } ?>
为加强使用API proxy的安全性,避免将密码直接透露给API proxy的缺陷,新版本的twip加入了OAuth支持。
使用方法:以我的twip为例:
1、在http://yegle.net/twip/trunk/oauth.php,点击最下方的链接,在twitter.com上登录(此步骤需翻墙)
2、选择Allow允许twip访问你在twitter.com上的数据
3、页面跳转回http://yegle.net/twip/trunk/oauth.php,你可以看到页面取得了你的基本信息(以XML形式)
4、刷新页面后你可以选择删除服务器上的access token,也就是不再使用OAuth方式使用twip
客户端上设置:
使用你的正常用户名和一个错误的密码登录,其他设置与以前相同
问题与缺陷:
丢失所有tweet的来源客户端。因为是通过OAuth中转,tweet的来源将变成该App在twitter.com上所填写的软件名称。
我该怎么做?
如果你对API proxy的拥有者不信任,请用OAuth方式使用twip
如果你是API proxy的拥有者,或者信任API proxy的拥有者,请继续用以前的方式使用API proxy,原HTTP basic auth方式仍然有效。
twip是本人在google code上开设的一个开源项目,目标是建立一个基于PHP的twitter API proxy。
什么是twitter API proxy?
简单地说,就是把客户端发过来的POST和GET请求转发到原始API地址,并将返回的http header和内容返回给客户端,实现了原始twitter API的所有功能。而对客户端来说,除了提供一个可供配置的API地址选项,不需要做任何代码上的更改
现有的Twitter API proxy程序主要有两个:基于Python的birdnest,基于PHP的tweetr。birdnest不用多说,功能很完备,可以在Google App Engine上架设,方便了没有网页空间的用户。tweetr则提供了基本的功能,但是又不完备(不返回header信息,没有将客户端类型的POST值传至服务器)。
本来twip项目准备从tweetr项目fork,专门维护一个PHP版twitter api proxy,但是发现tweetr的面向对象风格的代码实在读着不爽,加上API proxy本身没有太多技术含量,所以决定还是自己实现一个。
目前为止实现的还算不错,已经非常可用了。
如果你想自己架设一个,checkout代码后,修改config.php中的选项,注意$webroot变量的修改,然后上传到国外的虚拟主机空间即可。
附TwitterFox的API地址修改方法:
系统中查找nsTwitterFox.js文件,修改其中的TWITTER_API_URL为你架设的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组件)
svn checkout http://birdnest.googlecode.com/svn/branches/stable birdnest-read-only
代码将放置于当前目录下的birdnest-read-only目录下。注意这里co的是最新的stable分支的代码。trunk分支里的代码经过测试有代码错误,无法正常使用。
python code.py 虚拟主机的ip:你需要的端口
例如我的虚拟主机ip是64.62.216.123,我想让birdnest监听1234端口,那么我执行:
python code.py 64.62.216.123:1234这时候可能有两种情况:
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需要的模块。没关系,手动安装之。具体的方法后面再说
python code.py 64.62.216.123:1234然后用ctrl+a,d将当前的screen进程detach,退出ssh登陆。不出意外的话,这个时候你仍然可以使用你的api proxy。至此,birdnest twitter API proxy在自己主机上的搭建完成。
关于python环境:
首先仔细看birdnest运行时提示的信息,看缺少的是什么模块。分两种情况:
如果你使用的是独立主机或者vps,最简单的方法就是让系统管理员来解决问题。
如果不是,并且你没有root权限,那么你只能安装python及其他模块到你的家目录了。
python的安装比较简单,configure的时候把prefix指定为你的家目录下某个文件夹即可
模块的安装,下载模块解压后,运行
python setup.py build
编译模块,然后
python setup.py install --prefix=你想安装的目录
。安装完成后,用
PYTHONPATH=你安装的目录 python code.py 你的ip:你的端口来运行birdnest
twitter被墙了
估计很多人知道了http://nest.onedd.net/api这个twitter api proxy,在某些支持twitter api地址更换的软件(例如twitterfox、spaz以及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里粘贴代码的方法?
另外一个twitter插件,与twitter tools功能类似,但是选项简单得多
似乎我找到的是原始作者的插件……现在有另外一个维护者在维护这个插件,下载了V2版
最近评论