TwiTalker

Oct 8th, 2009 – 8:27 pm | Design

TwiTalker 是我九月初做的一个应用,提供推特Gtalk机器人服务,通过绑定添加TwiTalker 机器人可以在Gtalk上更新自己的推特和接收好友消息。代码花了两多周时间,9月19号开始公开测试,拖到现在才想到是时候总结下了,一方面是自己懒,一方面也是前段时间还一直在进行增加功能和后台优化。

和Della一样,这个应用也是基于Google App Engine。今年初开始就一直有传闻GAE将支持XMPP,自己盯着Google开放这个功能已经半年,终于在九月时候等到了。刚好饭否已经被那个啥了,转移到Twitter后发现它的官方Gtalk机器人已经失效多时,于是就想着要做这么一个应用,开始也只打算做着自己用的,后来觉得应该有人也需要这么个工具,于是干脆按多用户的结构去设计。

简介

TwiTalker和其他微博IM机器人一样,主要功能就是发推和接收消息。在此基础上你可以设置接收消息的模式,时间间隔;还有做一些基本的操作,如加删好友,收藏RT消息,发送DM等。目的也是尽可能让用户在IM上就可以基本使用Twitter,个人感觉功能增加改进到现在也已经差不多了。如果你想详细了解使用过程,建议你先访问帮助文档,或者看看这篇文章,写得挺详细的。

设计思路和结构

TwiTalker以Google App Engine为平台,主要用到它的XMPP模块、Cron Job和数据库。Twitter的API肯定是必不可少的,开发语言是Python

XMPP部分实现的是在Gtalk上的通讯,机器人接收用户消息以及发送消息给用户都依靠于它,强大的GAE已经把这个模块封装得特别傻瓜,直接看它的文档就可以很快上手运用到程序中。

同时利用Cron job来定时获取每个用户的最新消息和DM,并将它们发送给各个绑定Twitter的Gtalk用户。

数据库中保存的是每个用户唯一和Twitter关联的OAuth验证码和密钥,因为没有涉及用户密码等隐私信息,所以是相当安全的,还有一些设置信息,如接收消息设置模式和时间等。

当一个新用户向TwiTalker机器人发送验证信息时,程序在判断验证成功后就会把该用户添加到数据库中,此时用户就可以在Gtalk上发推,XMPP会自动接收用户发推的消息并在数据库中找出绑定用户,并把消息连同OAuth验证信息发送给Twitter进行更新。其他一些操作(加删好友,收藏RT) 也是这个原理。每隔一分钟,Cron job就会自动判断每个用户的接收消息时间是否已经到了(因为一些用户设置的是五分钟刷新),如果刷新时间到了,程序则通过Twitter的API获取每个用户的最新消息和DM并通过机器人帐号返回给用户。

Google App Engine的限制也是出了名的多,所以在开发时候要考虑把尽量多的功能和用户加到有限的服务器上也是颇为麻烦的一件事。由于GAE的CPU处理时间每次只有30秒,所以不可能一次性处理所有用户的消息接收更新问题;而且发现越频繁的Cron程序的出错率也越高;同时在获取Twitter消息时还偶尔有一些诡异的获取错误。综合以上的种种限制,同时为了最大保证程序的稳定,我把用户数的上限向下调了N次,并做了几次压力测试,最后确定一个机器人帐号,即是一个App最多容纳250名用户,满额的话再启用新的帐号(当时也没想到会有那么多人用这个,呵呵)。后台数据库设了10个表,每个表25个用户,10个Cron Job分别处理各自的数据库表,这是因为CPU30秒处理时间的限制,没法一次处理那么多用户,而且10个Cron也是GAE能设置的上限了

一些问题

TwiTalker推出后传播的速度比我想象的要快很多,在测试第一周里也增加也许多功能,解决了一些比较严重的Bugs,其间也进行了一次调查问卷,根据这些反馈也作出了一些更改。同时也发现一些用户还不是很清楚TwiTalker的一些功能,所以一并在这里简单说下。

关于延时问题,TwiTalker已经增加了可以自动设定接收消息时间的功能,最短1分钟刷新一次,这已经是GAE所能允许的最短时间了,最长5分钟刷新一次,需要注意的是,每次通过API抓取Twitter信息最多只能返回二十条消息,我测试的时候是这样的,所以如果好友更新消息数过多的话,设置较长的刷新时间可能会丢失一些好友消息,这也是把5分钟作为上限的原因。

关于RT问题,TwiTalker已经有了专门为方便RT收藏而设的消息附加ID模式,从而不需要手工RT,具体使用可以看帮助文档

至于消息接收很烦,你可以设置较长的刷新时间或者启动self模式,即只接收@你的消息和DM,这样不妨碍工作又不会错过重要消息。

现在TwiTalke主要工作放在后台找Bugs和保持程序稳定上。目前主要问题就是保持在用户数量增长的情况下程序仍能正常运行良好,这几周看来情况还是比较理想的,有时后会出现GAE短暂性抽风问题,或者一些命令无法执行,这种情况比较少见,但如果遇到的话,稍等片刻在试下应该就可以了。现在手头上有几个Project还在做,所以时间比较紧张,不过适当时候会推出英文版本,扩大下用户范围。

10 Comments

小卒October 8, 2009

呵呵,写的很明白了~~~

MystrylOctober 23, 2009

谢谢Follow,TwiTalker真的很方便很方便,已经是我在路上的时候首选的发推方式~
您的工作真的很棒,我会让更多人知道的~
谢谢!

ZFreetOctober 24, 2009

很好,多谢,又找回当年用GTalk 发推的感觉了。能给Bot 换个头像么,在列表里不太容易发现它。

KavinOctober 25, 2009

多谢支持,不过很抱歉我也没有修改机器人头像的权限,所以没法换头像~

crangerNovember 11, 2009

开源否?想学习一下

tsingNovember 21, 2009

“要注意的是,每次通过API抓取Twitter信息最多只能返回二十条消息”

最多能返回200条呢

KAVINNovember 27, 2009

@cranger 暂时不开源~寒假可能会整理再推出个人版
@tsing 哦~原来如此,这个我没仔细看清楚咯,一直以为和饭否一样是20

1984sbJanuary 7, 2010

twitalker 做的非常不错,推荐给很多朋友,也在网上发帖子介绍推荐了。用后的感觉都非常好。电脑不在身边,用手机上GTalk用twitter非常的方便。

kenlhbJanuary 9, 2010

为什么他们的回复都有头像的?

枯藤昏鸦February 4, 2010

之前有想到这个,才发现已经实现了。

Leave a comment

Name (required)
Email (required)
Website