I don't have anything to hand with xmpp installed, but here's some old code I had lying around that might help you. You'll want to update the USERNAME/PASSWORD to your own values for test purposes.
Things to note: users logged in to Google Talk get a random presence string on their userid: that doesn't matter if you are trying to get the status of some other user, but if you want to write some code so want to communicate with yourself you need to distinguish the user logged in from GMail or a GTalk client from the test program. Hence the code searches through the userids.
Also, if you read the status immediately after logging in you probably won't get anything. There's a delay in the code because it takes a little while for the status to become available.
"""Send a single GTalk message to myself""" import xmppimport time _SERVER = 'talk.google.com', 5223 USERNAME = 'someuser@gmail.com' PASSWORD = 'whatever' def sendMessage(tojid, text, username=USERNAME, password=PASSWORD): jid = xmpp.protocol.JID(username) client = xmpp.Client(jid.getDomain(), debug=[]) #self.client.RegisterHandler('message', self.message_cb) if not client: print 'Connection failed!' return con = client.connect(server=_SERVER) print 'connected with', con auth = client.auth(jid.getNode(), password, 'botty') if not auth: print 'Authentication failed!' return client.RegisterHandler('message', message_cb) roster = client.getRoster() client.sendInitPresence() if '/' in tojid: tail = tojid.split('/')[-1] t = time.time() + 1 while time.time() < t: client.Process(1) time.sleep(0.1) if [ res for res in roster.getResources(tojid) if res.startswith(tail) ]: break for res in roster.getResources(tojid): if res.startswith(tail): tojid = tojid.split('/', 1)[0] + '/' + res print "sending to", tojid id = client.send(xmpp.protocol.Message(tojid, text)) t = time.time() + 1 while time.time() < t: client.Process(1) time.sleep(0.1) print "status", roster.getStatus(tojid) print "show", roster.getShow(tojid) print "resources", roster.getResources(tojid) client.disconnect() def message_cb(session, message): print ">", message sendMessage(USERNAME + '/Talk', "This is an automatically generated gtalk message: did you get it?")
0 comments:
Post a Comment