2007年4月16日 星期一

通过即时消息掌握豆瓣小组更新动态

如果你和我一样,是个豆瓣迷的话,一定会时不时上豆瓣刷一下页面,看看组里有什么新人加入、有什么好玩的新话题、自己下的饵有没有人咬钓上钩...而结果往往事与愿违,十之八九既没有新人加入、也没有好玩的新话题、更没有人咬你的饵上你的钩。怎么办?

这种重复劳动还是让程序自动帮你去做吧。当且仅当有新人加入、有好玩的新话题、有人咬钓上钩时,才告诉你——最好是通过即时消息——“打雷啦,下雨啦,快回组里收衣服啊!”这样岂不是很make sense?哈哈。

我在豆瓣上建了一个杭州书虫小组,组里有700来号人,每天组员人数、讨论帖、小组收藏总计的变化次数在20-30次左右,人工反复去查看实在浪费时间。于是就想到利用脚本,实现通过即时消息告知小组页面更新的功能。具体思路是这样的,每隔3分钟用"lynx --source http://www.douban.com/group/hzbookworm/"命令抓取杭州书虫小组页面源码,再用md5sum命令生成MD5校验值,与前次保存的MD5校验值比对,若一致,则不做任何动作,若不一致,则通过python脚本发送Google Talk即时消息给我,通知页面更新。

首先下载Jabber协议的Python库:xmpppy,并在Linux系统里安装:

localhost ~ # wget http://nchc.dl.sourceforge.net/sourceforge/xmpppy/xmpppy-0.4.0.tar.gz

localhost ~ # tar xvfz xmpppy-0.4.0.tar.gz

localhost ~ # cd xmpppy-0.4.0

localhost xmpppy-0.4.0 # python setup.py install


然后在你的普通用户目录里存放一个用于发送Google Talk即时消息的Python脚本(需要调用前面下载的xmpppy库):

#!/usr/bin/python

# FILENAME: sendgoogletalk.py


import xmpp

login = 'loginID' # @gmail.com
pwd = 'password'

cnx = xmpp.Client('gmail.com')
cnx.connect( server=('talk.google.com',5223) )
cnx.auth(login,pwd, 'botty')

cnx.send( xmpp.Message( "loginID@gmail.com" ,"http://www.douban.com/group/hzbookworm/ updated" ) )


请将代码中的 loginID 改为你的Google帐号ID,password 改为你的Google帐号密码,发送消息改成“打雷啦,下雨啦,快回组里收衣服啊!”

最后用"crontab -e"命令编辑你的用户定时任务,加入一段:

*/3 * * * * ( if [ `lynx --source http://www.douban.com/group/hzbookworm/ | md5sum -c /tmp/md5sum-douban | grep OK | wc -l` != '1' ]; then lynx --source http://www.douban.com/group/hzbookworm/ | md5sum > /tmp/md5sum-douban ; /usr/bin/python /home/hutuworm/douban/sendgoogletalk.py > /dev/null 2>&1 ; fi )


大功告成!从此,每当杭州书虫小组有任何风吹草动,我都会即时收到Google Talk跳出来的消息了。

8 评论:

jyf1987 说...

我的方法是
何不连发帖也用机器人代劳了?
这样的话需要机器人一直在线了 呵呵

hutuworm 说...

@jyf 你做了个豆瓣灌水机? Orz

jyf1987 说...

没有
但用python写过一个机器人 可以发命令指示它干一些事 比如加人 发信息给指定的人什么的 另外 发帖到饭否可以 呵呵至于豆瓣 只要没有验证码 应该可以

hutuworm 说...

@jyf 只要不频繁就不会出现验证码,估计很多在豆瓣上贴小广告的都有这种工具了。

jyf1987 说...

这样的话,那工作量并不大,只是不知道如何定义"频繁" 按id的话 那我轮换id就可以避开了 按ip的话 那如何避免误杀局域网内的通过网关上网的用户

hutuworm 说...

@jyf 频繁的定义好像是每分钟每IP超过40次。

jyf1987 说...

那么 如果有个公司 职员是通过网关上网的 正好是it公司 都在豆瓣上注册了 结果导致出现 一分钟每ip发帖超过40 这样的情况 有何补救?

hutuworm 说...

@jyf world wide wait.

闲话闲说