I am LAZY bones ? all linux

通过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一下这个文件,终于大功告成了,哈哈。

最后修改时间: 2010年04月28日 10:58

本文章发表于: 2010年04月27日 20:51 | 所属分类:流水帐. | 您可以在此订阅本文章的所有评论. | 您也可以发表评论, 或从您的网站trackback.

12 个评论 关于: “通过Dbus控制pidgin”

  1. ray 在 2010年04月28日 01:18 说:回复

    沙发
    这个时间点很容易枪沙发,哈啊

  2. 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 说:回复

          丫,纯净水啊?
          你想说点啥?

  3. HicroKee 在 2010年04月29日 15:40 说:回复

    pidgin的插件接口跟dbus的接口差不多的,也就只是一个能自动调用一个得开外挂的区别。
    不过说来pidgin的API还真不是一般的多,上面那功能记得官网有个完整的python源程序

    • bones7456 在 2010年04月29日 17:35 说:回复

      第一个程序本来就是来自官网的啊,我写着呢~

  4. xiooli 在 2010年05月05日 22:02 说:回复

    这玩意运行的时候还得蹦达出一个皮筋的窗口么?一不注意吓死个人。

    • bones7456 在 2010年05月06日 08:23 说:回复

      是要有个窗口的,不过我一般开机就有窗口,只是多个tab而已,没感觉的啦~

  5. vzomik 在 2010年05月24日 19:09 说:回复

    刚刚在找 pidgin 能否用某个插件实现一个功能:
    把某一个人的信息全部重定向到终端。
    然后找到了 dbus 这个东东(暂不知道有什么用),
    google 搜索到了这里,先顶了再说~

    • bones7456 在 2010年05月25日 08:18 说:回复

      完全可以实现啊~

  6. vzomik 在 2010年05月24日 19:10 说:回复

    这样就可以手机上Q,或者上GTalk,远程控制电脑啦,哈哈!

发表评论