2010-03-04 4 views
2

J'essaie d'accéder aux messages d'état personnalisés de mes contacts Google Talk avec xmpppy. Je suis rendu à ce point:Conversation XMPP: accès aux messages d'état des contacts à l'aide de la liste rouge de xmppPy

import xmpp 
import sys 

userID = '[email protected]' 
password = 'mypassword' 
ressource = 'Script' 

jid = xmpp.protocol.JID(userID) 
jabber = xmpp.Client(jid.getDomain(), debug=[]) 

connection = jabber.connect(('talk.google.com',5222)) 
auth = jabber.auth(jid.getNode(), password, ressource) 

jabber.sendInitPresence(requestRoster=1) 
myroster = jabber.getRoster() 

l'objet liste myroster contient maintenant mes contacts, mais le message d'état personnalisé est pas inclus.

myroster.getStatus('[email protected]') 

retours Aucun

regardant la « liste brute », je peux voir que le dictionnaire des ressources est vide

u'[email protected]': {'ask': None, 'resources': {}, 'name': u'Some Name', 'groups': [], 'subscription': u'both'} 

La chose étrange est que j'ai eu que cela fonctionne aujourd'hui, mais je le code aurait pu être légèrement différent, mais je ne peux pas comprendre exactement ce que j'ai fait différemment ...

Toute aide serait grandement appréciée!

Cheers,

Martin

Répondre

2

Il est une question de timing. Ajoutez un gestionnaire avec:

jabber.RegisterHandler('presence', myPresenceHandler) 

def myPresenceHandler(self, con, event): 
    fromjid = event.getFrom().getStripped() 
    status = myroster.getStatus(fromjid) 

AVANT de se connecter. Ensuite, assurez-vous d'appeler le jabber.Process() en boucle. Le problème est qu'avec votre code, vous recevrez parfois des strophes de présence avant de regarder l'objet de la liste, et parfois après.

3

Voici une chose que j'ai trouvée, qui n'était pas claire pour moi quand j'ai commencé à travailler avec xmpp. L'amitié est bidirectionnelle. Utilisation des strophes de présence
(a) Vous pouvez vous "abonner" à votre ami, et votre ami peut retourner "abonné".
(b) Votre ami peut "vous abonner" et vous pouvez retourner "abonné".

Votre ami figurera dans votre liste si (a) ou (b) est arrivé.
Vous serez dans la liste de vos amis si (a) ou (b) est arrivé.

Mais ...
Vous ne verrez leur statut à moins que vous « abonner » à votre ami - (a) doit se
Ils ne verront pas votre statut à moins qu'ils « subscribe » à vous - (b) doit se produire.

La plupart des clients XMPP (pidgin, trillian, etc.) vous demanderont automatiquement de vous "réabonner" à votre ami lorsque vous l'enverrez "abonné" (après vous avoir envoyé "s'abonner"). XMPPPY ne fait pas cela hors de la boîte. Vous devez le coder pour le faire.

Ceci pourrait expliquer pourquoi vous ne voyiez pas le statut. Ou si cela ne couvre pas votre situation, cela pourrait être instructif pour quelqu'un d'autre.

+0

Salut David, bien que je n'aie pas encore appliqué vos informations, j'apprécie que vous prouviez cette réponse. Je posterai un autre commentaire une fois que je sais si c'est la cause du problème. à votre santé! Martin – Hoff

Questions connexes