备份Twitter Friend Timeline到Google Calendar

Twistory是一个不错的服务,但是他不支持Protected User的时间线备份,并且只能进行User Timeline的备份。我的想法是能进行我的Friend Timeline的备份,按照时间进行备份,这样可以在以后方便地管理,并且可以用google进行搜索,不用管twitter search那个烂玩意儿了。

本日志中代码以Creative Attribution-Noncommercial-Share Alike Commons(创作共用 署名-非商业性使用-相同方式共享协议)协议开放。

NND谁知道怎么让wp-syntax自动换行?折腾半天还是不行…

昨天研究了一下Google Calendar API,发现一个问题…Google只给出了用Zend Framework封装好的库函数的调用方法,具体实现没说。本来准备研究一下那几个函数的,结果发现原来里面附带的Calendar.php可以当命令行脚本使用,支持从命令行用参数添加Event。最后的结果就是这个了:

< ?php
        //Licensed Under Creative Commons by-nc-sa
        //Original Author: @yegle ,yegle.net
	$last_id = intval(file_get_contents(".lastbackup"));
	$str = file_get_contents("http://TwitterUserName:TwitterPassword@twitter.com/statuses/friends_timeline.xml?since_id=".$last_id);
	if($str === FALSE ) exit();
	$xml = simplexml_load_string($str);
	$i = 0;
	$return = 0;
	foreach($xml->status as $item){
		$timestamp = strtotime($item->created_at);
		$id = $item->id;
		$date = date("Y-m-d",$timestamp);
		$time = date("H:i",$timestamp);
		$text = $item->text;
		$text = str_replace("\"","\\\"",$text);
		$user = $item->user->screen_name;
		$cmd="/usr/bin/php /home/yegle/Calendar.php createEvent YourGoogleAccountName YourGooglePassword \"FROM:$user $text\" \"$text::$id\" '' '$date' '$time' '$date' '$time' '-07' >>twitterbackup.log";
		system($cmd, &$return );
		if($return !==0 ) exit();
		$i++;
	}
	if($i!==0) file_put_contents(".lastbackup",strval($xml->status[0]->id));
?>

使用说明:
其中用system函数调用PHP执行了Calendar.php,Calendar.php是从ZendFramework里找到的一个Gdata演示程序。

将以上内容保存为一个PHP文件,如backuptwitter.php
下载最新的ZendFramework,使用该地址或自行在ZendFramework下载最新版本
解压缩,将其中的libarary目录复制到合适的位置,例如/home/yegle/library/
将demos/Zend/Gdata/Calendar.php复制到其他地方待用。
修改Calendar.php,在文件第一个

< ?php

之后添加如下代码:

set_include_path("/home/yegle/library/:".get_include_path());

注意修改其中的路径

最后修改backuptwitter.php,将其中的用户名密码全部替换成你的实际用户名密码,其中的cmd变量也做相应的修改以符合你的实际情况。

最终的效果:
每条推的内容将被填入Event的Title
推的时间会被填入Event的起止时间
Description里会填入推的内容以及id,方便以后去twitter.com查看原始推。

//Fixme:

  1. 使用system函数调用脚本进行事件的添加,万一有出错,可能导致部分推没有备份
  2. 使用前,必须往.lastbackup文件里写入一个你当前Friend Timeline里最后一条推的id

14 Responses to “备份Twitter Friend Timeline到Google Calendar”


  • 好吧…我承认我看不懂….能具体解释下怎么用不??? @littlebena

    [回复]

  • 好吧…我承认我看不懂….能具体解释下怎么用不??? @littlebena

    一样看不懂的路过..@wx8600

    [回复]

  • yegle特地到我blog推销这个脚本,特此围观;-)

    不懂PHP,但借着Java的底子基本看明白这个脚本。备份到Google Calendar确实是个好办法,但是最好重新开个Google账号为妙,因为我是重度GTD用户严重依赖gcal+RTM的组合。

    之前不知道Twitter提供的这friends_timeline.xml输出,貌似也可以用feedburner烧一个私有的RSS用Google Reader备份了。

    关于last_id我还有个疑问,若我找出使用Twitter以来的第一条推,twitter.com/statuses/friends_timeline.xml?since_id=last_id能否会按照现有的following列表输出从那个tweet起的所有friends_timeline?官方这个xml是否有这方面的限制,谢谢;-)

    [回复]

    yegle 回复:

    根据官方的说法,每个timeline只能最多获取从最后一条往前3200条的推,但是实际据说可以获取几万条,我没有实际测试过

    可以添加count=XXX&page=XXX来实现翻页,具体可以查阅twitter api的文档

    说实话这个代码我自己看了都很囧…很久以前写的了=。=

    [回复]

  • @yegle 我不懂编程……不知道这个脚本能不能修改成自动将某一feed的条目添加为Google Calendar 项目?

    [回复]

    yegle 回复:

    可以:-)

    [回复]

    峄峰 回复:

    麻烦能不能将修改的代码发出来?我对 php 等各种语言一窍不通的……谢谢了~

    [回复]

  • 你好
    我没看过twitter的api文档,目前由于长时间不在Linux环境下工作,加上对php的不熟练,现在想把这个程序移植到win下的jsp页面上
    有几个问题:
    last_id的含义我不理解,是指哪个?发推人的id还是?
    如何查找?不会是从web上more下去吧……(笑,应该有些人已经编出了整理的页面,但是没抓到关键词,没搜到)
    twitter 的api定义的/twitter.com/statuses/friends_timeline.xml是否能有时间限制?否则按照能向前推进成千上万条的进度,每次备份执行时是否会造成重复备份,这又回到last_id不能理解的问题上……
    望回答,谢谢~

    [回复]

    yegle 回复:

    last_id指同步的最后一条推的id
    其余几个问题参考twitter api文档就可以了

    [回复]

    charliebrown 回复:

    好的~谢谢~

    [回复]

  • 你好
    很抱歉刚刚冲动了
    last_id的id是status_number中的number是么?这个值是你手动填的?那么如何查询每一天第一条的id呢?
    谢谢

    [回复]

  • 博主你好。
    想问下这个问题:我在使用file_get_contents函数时,获取形如http://api.twitter.com/1/statuses/user_timeline/12345.xml or http://api.twitter.com/1/statuses/user_timeline/bob.json 的文档时,无论本机还是空间上运行都会显示连接超时,但是换成其他网址,如http://www.google.com时则正常。
    不知你是否遇到过这个问题,是如何解决的?

    [回复]

    yegle 回复:

    你的网络环境翻墙了没?

    [回复]

    喵呜 回复:

    额,翻了。我关了还是不行,不过这个问题我用feedburner解决了。
    现在碰到的问题是:我在本机可以正常运行twitter2renren的脚本,但是扔到虚拟主机上后,我主动点击显示The URL has moved here。不知道你遇到过没?

    [回复]

Leave a Reply


根据下图提示点击图片相应位置提交评论
Clickcha - The One-Click Captcha