문제

I want to write a program (preferably in python) which could monitor my gtalk status messages, and whenever I post a new gtalk status message, this program will get the content of this message and post it somewhere else.

Is there a way for me to register for notification of my gtalk status change? Or do I have to poll my status constantly? Where can I find the API to do it?

도움이 되었습니까?

해결책

I'd suggest you to use sleekxmpp. You can register a callback like this:

self.add_event_handler("changed_status", self.my_callback_function)

Where self is your instance of a class that inherits from sleekxmpp.ClientXMPP.

Edit: I've just made this code for you (free to use as you wish)

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)

You need to create a file config.ini with your credentials:

[general]
jid=jid@host.org
resource=presence_watcher
password=yourpwd

다른 팁

As Google Talk is essentially an XMPP service, use the protocol to register your program to be informed of new messages (and other updates such as presence).

Some pointers:

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top