0%

基于php定时同步twitter到新浪微博

吐槽:因为一直都习惯retweet一些好黄好暴力的推,又不想手动同步到新浪,就折腾了一个下午,想用别人基于python实现的wet,苦于真正开发过,首先在gae那里上传,怎知道一句不支持os.makedirs就把我弄到无语了,然后再折腾sae,申请了一个内测python账号,不过又返回500错误,应该也是由于gae同样的问题。几个小时就过去了,心想自己已经基于php用sina的openapi发过微博,再弄一个php定时获取twitter内容就行了,然后就决定还是自己写好了。

第一步:获取tweet
有两种方法,第一种是用官方的http://twitter.com/statuses/user/timeline/用户名.rss源,然后用php编程获取想同步的内容。这种方法需要墙外的服务器,而且获取的信息量比较少;所以我才用了第二种方法,使用自己的API来获取,例如格式为http://你的API地址/statuses/user\_timeline.json?since\_id=155030004701405184。这代表着获取id为155030004701405184之后你的tweet,而且格式为json。我的思路是记录tweet的id,因为不想用SQL来保存一个数字,就用一个TXT文本保存,每抓取一次就打开一次文本获取tweet的id,如果有新的tweet,就比较id大小,进而记录较大的到TXT文本中。
第二步:发送到新浪微博
因为新浪微博的API要审核,随便弄个发微博的页面先通过审核,主要是要它的APP KEYAPP SECRECT。新浪有php开发的sdk,尽量使用OAUTH1.0的,这样授权出来的OAUTH的码不会变,使用OAUTH2.0的话,授权的OAUTH有时间的限制,时间久了可能要再授权。先进行一次授权,include它的weibooauth.php,把OAUTH_TOKEN和OAUTH_TOKEN_SECRET都echo出来并记录。就凭APP KEYAPP_SECRECT和OAUTH_TOKENOAUTH_TOKEN_SECRET就可以发微博啦。例如

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
id;
if($new_id > $old_id) {
$old_id = $new_id;
}

$nonono=$item -> text;

$result = $c->update( $nonono );
if($result['id']) {
$fp=fopen("id.txt",'w');
fwrite($fp,$old_id);
fclose($fp);
} else {
}

endforeach;
endif;
?>

这前两步解决了同步的问题。
第三部:定时检测。
有很多方法,如果你是外国的linux主机主机,而且还是cPanel面板的话,就会有一个cron job来执行定时任务。添加任务:
* * * * * php /home/***.**/public_html/***.**/weibo/sync.php
在网上查了很多方法,有些是填php的完整路径,并不是php,而后面的一定要是最绝对路径。填错了php路径可能显示/bin/sh: /usr/lib/php: is a directory登提示。
第二个就是运行的文件一定要修改他的权限为777,要不会提示Permission denied。
很多东西没有细说,折腾一下还是可以滴。