Joey Wang 2009年11月18日 星期三 20:30 | 2757次浏览 | 24条评论
一个dbus的小尝试
最近总是在外面逛,手机上网又麻烦,前段时间听同学说,139邮箱可以短信通知邮件,让我也申一个。可惜我太懒惰,不想申这么多的邮箱,麻烦。但是想到有短信通知,还是比较cool的。想了又想,觉得可以在自己的电脑上做点手脚....
freedesktop上的dbus很有用,可以把不同的程序串在一起。于是乎,我想了一下,用bash写一个自动查邮件的脚本,然后用python的dbus库,调动pidgin的fetion插件,给我的手机发信息。大体思想就是这样。
bash脚本很快就能炮制出来:
因为我用的gmail,所以大体如下,
curl -u “USERNAME”:“PASSWORD” "https://mail.google.com/mail/feed/atom" | tr -d '\n' | awk -F '<entry>' '{ for (i=2; i<=NF; i++) {print $i}}' | sed -n "s/<title>\(.*\)<\/title.*name>\(.*\)<\/name>.*/From:\2 - Title:\1/p" | head -n 2 > ~/newmail
这样,通过检查newmail这个文件是否不为空。如果有邮件,把newmail的内容当作短信发就是了。
下一步就是搞定pidgin..
查了一下http://developer.pidgin.im/wiki/DbusHowto 这个十分详细的文档,心里大概有个数。
python脚本大概如下:
import dbus
bus=dbus.SessionBus()
obj=bus.get_object("im.pidgin.purple.PurpleService", "/im/pidgin/purple/PurpleObject")
purple=dbus.Interface(obj, "im.pidgin.purple.PurpleInterface")
这些就是初始化一下这个dbus object
然后就可以开始工作了。
我先试验了一下,我的fetion这个IM的account号是:1384,我需要对自己发信息,我自己的fetion号是"867614520@fetion.com.cn;p=393" ,恩~ 就用这两个就行。
先开启一个新对话(这个的前提是我们的pidgin已经启动了,并且fetion登上)
purple.PurpleConversationNew(1, 1384, "sip:867614520@fetion.com.cn;p=393")
这个对话就建立起来了,然后就是发信息了。
根据pidgin的文档,发信息需要知道im。
所以我们多做一个查询:
im=purple.PurpleConvIm(conversation[0])
然后万事俱备,只欠东风。
purple.PurpleConvImSend(im,msg)
这里,"msg"就是那个newmail的内容。
这就是全部过程。
不过需要进一步完善,比如需要提前判定,那个newmail是否为空,不为空才发短信;还有就是那个检查邮件的脚本需要自动检查邮件,这个可以用cron也可以用编程方式达到。还有就是,万一pidgin没有登录,需要用几句话把pidgin给打开。
恩~ 差不多就这些,这个思想还可以括展开,比如主机的状况阿,比如,如果出现一些你需要在远方知道的东西(比如,amule挂点了),用短信读一下还是比较惬意......
就说到这里了哈,主要我刚开始学python,前面bash完成的事情其实可以用python一并解决的。
总之,就是一个灵机一动的小东西,给大家带来方便。
Zeuux © 2024
京ICP备05028076号
回复 周海汉 2009年12月02日 星期三 14:13