我想写一个程序(最好用python)来监控我的gtalk状态消息,每当我发布一条新的gtalk状态消息时,这个程序都会获取这条消息的内容并将其发布到其他地方。
有没有办法让我注册我的 gtalk 状态更改通知?还是我必须不断地轮询我的状态?我在哪里可以找到执行此操作的 API?
我想写一个程序(最好用python)来监控我的gtalk状态消息,每当我发布一条新的gtalk状态消息时,这个程序都会获取这条消息的内容并将其发布到其他地方。
有没有办法让我注册我的 gtalk 状态更改通知?还是我必须不断地轮询我的状态?我在哪里可以找到执行此操作的 API?
我建议你使用 slimxmpp。您可以像这样注册回调:
self.add_event_handler("changed_status", self.my_callback_function)
其中 self 是您继承自的类的实例sleekxmpp.ClientXMPP
。
编辑:我刚刚为您制作了此代码(随意使用)
import sleekxmpp
from ConfigParser import ConfigParser
class StatusWatcher(sleekxmpp.ClientXMPP):
def __init__(self, jid_to_watch):
self._jid_to_watch = jid_to_watch
config = ConfigParser()
config.read("config.ini")
jid = config.get("general", "jid")
resource = config.get("general", "resource")
password = config.get("general", "password")
sleekxmpp.ClientXMPP.__init__(self, jid + "/" + resource, password)
self.add_event_handler("session_start", self.handle_XMPP_connected)
self.add_event_handler("changed_status", self.handle_changed_status)
def handle_XMPP_connected(self, event):
print "connected"
self.sendPresence(pstatus="I'm just a Bot.")
self.get_roster()
def handle_changed_status(self, pres):
if pres['from'].bare == self._jid_to_watch:
print pres['status']
xmpp = StatusWatcher("login@gmail.com") # The account to monitor
xmpp.register_plugin('xep_0030')
xmpp.register_plugin('xep_0199')
if xmpp.connect():
xmpp.process(threaded=False)
您需要config.ini
使用您的凭据创建一个文件:
[general]
jid=jid@host.org
resource=presence_watcher
password=yourpwd
由于 Google Talk 本质上是一项 XMPP 服务,因此请使用该协议来注册您的程序以了解新消息(以及其他更新,例如存在)。
一些指示: