通过Dbus控制pidgin
介绍两个通过Dbus控制pidgin的例子,为了方便,采用python实现。
第一个例子来自官方文档,代码如下:
#!/usr/bin/env python def my_func(account, sender, message, conversation, flags): print sender, "said:", message import dbus, gobject from dbus.mainloop.glib import DBusGMainLoop dbus.mainloop.glib.DBusGMainLoop(set_as_default=True) bus = dbus.SessionBus() bus.add_signal_receiver(my_func, dbus_interface="im.pidgin.purple.PurpleInterface", signal_name="ReceivedImMsg") loop = gobject.MainLoop() loop.run() |
这个比较简单,就是监视收到消息的信号,一收到消息就调用 my_func 把发送者和消息体打印出来。
另一个是我自己写的,目的是放到crontab里,每天定时通过鸡脱壳给某人发送一句话,哈哈,代码如下:
#!/usr/bin/env python # -*- coding: utf-8 -*- import dbus, gobject bus = dbus.SessionBus() obj = bus.get_object("im.pidgin.purple.PurpleService", "/im/pidgin/purple/PurpleObject") purple = dbus.Interface(obj, "im.pidgin.purple.PurpleInterface") for account in purple.PurpleAccountsGetAllActive(): if '我自己的GTalk' == purple.PurpleAccountGetUsername(account): conv = purple.PurpleConversationNew(1, account, '对方的GTalk') purple.PurpleConvImSend(purple.PurpleConvIm(conv), u"要发送的内容") |
大致就是:首先在pidgin的活动账户里面,找到自己的鸡脱壳的账户ID,然后调用 PurpleConversationNew 建立一个新的对话tab页,再在这个tab页里发送指定消息给某人。也是超简单。
其实pidgin提供的dbus接口非常丰富,丰富到什么程度呢?就是用dfeet打开那方法树的时候,都会觉得很卡,呵呵。看了下,几乎所有在界面能完成的操作都可以通过dbus接口来实现。所以,要折腾的话,还可以折腾出很多复杂的应用来的,比如做个bot什么的,唉,早知道当时就不去搞什么gloox了,直接挂个purple,用dbus就什么都搞定了嘛,还支持xmpp、msn、yahoo等N多协议,多好啊,呵呵~
========20100428 update========
呃,昨天说要把程序放到crontab里定时执行的来着,结果,今天时间到了,一看,却并没有执行成功,手工一执行,又立马成功了。于是就我就纳闷了,google一搜索,马上发现原因了,原来cron里启动的进程和shell里启动的进程,是不在一个dbus session里面的,也就是说 bus = dbus.SessionBus() 就会给报错。再深究其原因,是因为cron启动的进程里面没有 DBUS_SESSION_BUS_ADDRESS 这个环境变量,于是,参照这里的解决办法,X启动的时候,导出这变量到一个文件里,然后cron里启动进程前,source一下这个文件,终于大功告成了,哈哈。
ray 在 2010年04月28日 01:18 说:【 】
沙发
这个时间点很容易枪沙发,哈啊
TualatriX 在 2010年04月28日 09:44 说:【 】
哈哈,放出源码了啊,好~学习之。
bones7456 在 2010年04月28日 10:10 说:【 】
哈,文中所说的“某人”出现了,其实“要发送的内容”是:”TX主席,别忘记搞PPA源同步脚本,人民期待你啊~~~”
shellex 在 2010年04月29日 11:06 说:【 】
…..
bones7456 在 2010年04月29日 11:36 说:【 】
丫,纯净水啊?
你想说点啥?
HicroKee 在 2010年04月29日 15:40 说:【 】
pidgin的插件接口跟dbus的接口差不多的,也就只是一个能自动调用一个得开外挂的区别。
不过说来pidgin的API还真不是一般的多,上面那功能记得官网有个完整的python源程序
bones7456 在 2010年04月29日 17:35 说:【 】
第一个程序本来就是来自官网的啊,我写着呢~
xiooli 在 2010年05月05日 22:02 说:【 】
这玩意运行的时候还得蹦达出一个皮筋的窗口么?一不注意吓死个人。
bones7456 在 2010年05月06日 08:23 说:【 】
是要有个窗口的,不过我一般开机就有窗口,只是多个tab而已,没感觉的啦~
vzomik 在 2010年05月24日 19:09 说:【 】
刚刚在找 pidgin 能否用某个插件实现一个功能:
把某一个人的信息全部重定向到终端。
然后找到了 dbus 这个东东(暂不知道有什么用),
google 搜索到了这里,先顶了再说~
bones7456 在 2010年05月25日 08:18 说:【 】
完全可以实现啊~
vzomik 在 2010年05月24日 19:10 说:【 】
这样就可以手机上Q,或者上GTalk,远程控制电脑啦,哈哈!