基于PubSubHubbub的Feed实时同步到Twitter服务
为了这个蛋疼的Project,刷了好多屏,发了好多测试日志,给大家带来了很多不便,先行道歉。
更新记录
2010-9-15:Bug修正,允许prefix为空。
2010-3-3:处理退订。
2010-3-2:以发布时间标记更新,解决重复发布问题。
2010-2-9:引入Universal Feed Parser库,基本上可以处理所有的Feed格式了。
项目主页
http://p.ream.at/projects/hub2tweet
下载
hub2tweet
演示
hub2tweets
williamlong在GAE上搭建过一个基于PubSubHubBub的RSS Feed实时同步Twitter服务,基于hub2tweet。但我不喜欢他定制的发布格式,而且他一直没有公布代码,所以我只好从hub2tweet起家重新又改了一遍。
修改的结果与他描述的并无多大区别,唯标题之前可以加个Prefix以示区分,缩短网址改用is.gd(还有个orz.se备用),发布出来的tweet的效果大致如下:
[Prefix] 思想改造与极权主义心理: 原作者:Robert Jay Lifton 来源Thought Reform and the Psychology of Totalism 译者george@tecn北卡罗莱纳大学出版社 ... http://bit.ly/c9Ib2q
如果你觉得上面的形式很符合自己的审美观,可以直接用我搭建好的hub2tweets。不过不建议这么做,因为我改完的这个程序完全就是删档封测版(网游术语,指位于不删档封测、第一内测、第二内测、第n内测、公测之前的测试版),我会不停的在上面修改——也就意味着不停的出bug。
推荐的方法是下载我改过的hub2tweet,看懂代码后修修补补自己在GAE搭建一个,或者干脆还是从hub2tweet改起。
上传到GAE后要先访问http://your_app_name.appspot.com/admin/oauth_config配置Consumer key和Consumer secret,也就意味着要提前申请twitter appilication。目前只能处理Atom Feed,不知道williamlong是怎么改成让它支持RSS Feed的。好在WordPress和Google Reader Share都能输出Atom Feed。引入Universal Feed Parser库,基本上可以处理所有的Feed格式了。
另外,经过实验,WordPress的PubSubHubbub插件不能正常与hub服务器通信,WP PubSubHubbub插件正常。
19 Responses
老大,你的网站上的那个下载链接失效了,能不能发一份到我的邮箱啊,谢谢!!
Reply
改好了。
Reply
@Chu 我也想要个,用月光的feed-twitter搭建了个捞出毛病
Reply
p.ream.at的DNS设置错了- -,过一会儿那个链接应该就能用了。
Reply
依然是400错误
Reply
我查了服务器的log,从昨天到今天,从来没有产生过400错误。
Reply
是404 ,我点击“推荐的方法是下载我改过的hub2tweet,”(弹出地址是http://d.ream.at/wp-content/share/hub2tweet.zip),显示nothing found...
Reply
好了,现在应该都改对了。
Reply
请问PubSubHubbub多久通知一次,每次通知后有没有发送数量限制?twitterfeed半小时一次,每次只推送5个。PubSubHubbub会比twitterfeed好吗?谢谢
Reply
如果你的feed原生就带PubSubHubbub支持(比如Google Reader Share、WordPress+WP PubSubHubbub等),那么更新是实时的,发送数量限制只取决于feed大小(比如WordPress只发10条)。
feedburner会在自己更新了feed后推送更新,号称延迟是半小时。但实际上我用feedburner烧写豆瓣的feed,经常延迟一个星期,而烧写我的博客,延迟5分钟都不到。
Reply
也许正如您所说,要延迟一个星期,我昨晚的feed(用feedburner烧写)今天早上看也并没有被推送到twitter。
看来还是没有什么好办法,只能继续用twitterfeed或feedburner了。
对了,请问您知不知道怎么让feedburner自动推送feed到twitter时的短地址不经过feeds.feedburner.com?因为feeds.feedburner.com被墙了,所以如果使用goo.gl先指向feedburner再指向我的网站的话,不能翻墙的朋友就会卡在feeds.feedburner.com而无法到达我的网站呢。
btw,之所以我希望用feedburner而不是twitterfeed是因为feedburner一次能推送8个feed,而twitterfeed只有5个。
Reply
不知道。
Reply
没有失效是指什么?可以把feed的内容都推送到twitter吗?慢一点也没有关系,只要推送得全就行。
Reply
这个程序不能保证把feed的所有内容都推送到twitter,因为它只在PubSubHubbub服务器通知feed更新时,才发tweet,并且不检查tweet是否发送成功。有三种情况导致该过程失败:
1. PubSubHubbub服务器通知feed更新时程序没有运行;
2. PubSubHubbub服务器通知feed更新时没有向程序POST更新内容;
3. feed更新时twitter down了。
Reply
我将discuz!的feed通过feedburner烧写后出现以下错误:
Traceback (most recent call last):
File "/base/python_runtime/python_lib/versions/1/google/appengine/ext/webapp/__init__.py", line 513, in __call__
handler.post(*groups)
File "/base/data/home/apps/fyxtwitter/6.344796866203648449/pubsubhandlers.py", line 120, in post
response = urlfetch.fetch(hub_link, payload=params, method='POST')
File "/base/python_runtime/python_lib/versions/1/google/appengine/api/urlfetch.py", line 241, in fetch
return rpc.get_result()
File "/base/python_runtime/python_lib/versions/1/google/appengine/api/apiproxy_stub_map.py", line 501, in get_result
return self.__get_result_hook(self)
File "/base/python_runtime/python_lib/versions/1/google/appengine/api/urlfetch.py", line 331, in _get_fetch_result
raise DownloadError(str(err))
DownloadError: ApplicationError: 5
但是加是加上去了。
Reply
这是个普通的连接错误,可以不管,没加上去可以重新加一下。
discuz不支持PubSubHubbub,即便通过feedburner烧写也没什么时效性可言。
Reply
那请问怎样的feed才符合标准呢?
我的是discuz!自动生成的feed。
Reply
按照您的介绍上传后,登录twitter没问题,当出现设置feed的界面并输入feed提交后,出现以下提示:
Traceback (most recent call last):
File "/base/python_runtime/python_lib/versions/1/google/appengine/ext/webapp/__init__.py", line 513, in __call__
handler.post(*groups)
File "/base/data/home/apps/fyxtwitter/6.344796866203648449/pubsubhandlers.py", line 116, in post
verify_token=verify_token, format=format, verified=debug)
File "/base/python_runtime/python_lib/versions/1/google/appengine/ext/db/__init__.py", line 813, in __init__
prop.__set__(self, value)
File "/base/python_runtime/python_lib/versions/1/google/appengine/ext/db/__init__.py", line 542, in __set__
value = self.validate(value)
File "/base/python_runtime/python_lib/versions/1/google/appengine/ext/db/__init__.py", line 2447, in validate
value = super(StringProperty, self).validate(value)
File "/base/python_runtime/python_lib/versions/1/google/appengine/ext/db/__init__.py", line 569, in validate
raise BadValueError('Property %s is required' % self.name)
BadValueError: Property topic is required
请问该如何解决?
谢谢!
Reply
你输入的feed地址不符合标准,没有self link。
Reply
Top Seven
Recent Comments
Categories
Blogroll
Login
Sponsor