2010-09-30 29 views

Répondre

0

Je n'ai rien à faire avec xmpp installé, mais voici un ancien code que j'ai traîné qui pourrait vous aider. Vous devrez mettre à jour le NOM D'UTILISATEUR/MOT DE PASSE à vos propres valeurs à des fins de test. À noter: les utilisateurs connectés à Google Talk obtiennent une chaîne de présence au hasard sur leur userid: cela n'a pas d'importance si vous essayez d'obtenir le statut d'un autre utilisateur, mais si vous voulez écrire du code voulez communiquer avec vous-même, vous devez distinguer l'utilisateur connecté depuis GMail ou un client GTalk du programme de test. D'où le code recherche à travers les userids. En outre, si vous lisez l'état immédiatement après vous être connecté, vous n'obtiendrez probablement rien. Il y a un retard dans le code car il faut un peu de temps pour que le statut soit disponible.

"""Send a single GTalk message to myself""" 

import xmpp 
import time 

_SERVER = 'talk.google.com', 5223 
USERNAME = '[email protected]' 
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?")