2009-08-19 5 views
4

J'utilise xmpp avec python et je veux créer un client simple pour communiquer avec un gmail id.Python2.6 xmpp Erreur Jabber

#!/usr/bin/python 
import xmpp 

login = 'Your.Login' # @gmail.com 
pwd = 'YourPassword' 

cnx = xmpp.Client('gmail.com') 
cnx.connect(server=('talk.google.com',5223)) 
cnx.auth(login,pwd, 'botty') 

cnx.send(xmpp.Message("[email protected]" ,"Hello World form Python")) 

Quand je lance la dernière ligne je reçois une exception

IOError: Disconnected from server.

Aussi quand je lance les autres déclarations que je reçois des messages de débogage dans la console.

Quel pourrait être le problème et comment puis-je le résoudre?

+0

Qu'est-ce que les déclarations de débogage disent juste avant est déconnecter? Voyez-vous une erreur non autorisée? <échec xmlns = "urn: ietf: params: xml: ns: XMPP-SASL">

Répondre

0

Je pense que vous devez appeler sendInitPresence avant d'envoyer le premier message:

... 
cnx.auth(login,pwd, 'botty') 
cnx.sendInitPresence() 
cnx.send(xmpp.Message("[email protected]" ,"Hello World form Python")) 
+0

essayé mais je encore obtenu le IOError: Disconnected d'erreur de serveur – crashekar

+0

présence Envoi premier est non requis. Je viens de tester contre gtalk pour m'assurer qu'ils n'ont pas de règle spéciale. –

1

Essayez cet extrait de code. Je n'ai pas géré les conditions d'erreur pour des raisons de simplicité.

import xmpp 

login = 'Your.Login' # @gmail.com 
pwd = 'YourPassword' 

jid = xmpp.protocol.JID(login) 
cl = xmpp.Client(jid.getDomain(), debug=[]) 
if cl.connect(('talk.google.com',5223)): 
    print "Connected" 
else: 
    print "Connectioned failed" 

if cl.auth(jid.getNode(), pwd): 
    cl.sendInitPresence() 
    cl.send(xmpp.Message("[email protected]" ,"Hello World form Python")) 
else: 
    print "Authentication failed" 


Pour désactiver les messages de débogage, passez debug = [] pour le 2ème paramètre sur le constructeur de la classe Client:

cl = xmpp.Client(jid.getDomain(), debug=[]) 
+0

J'ai essayé que Philip mais l'authentification a échoué. Y at-il un paramètre qui doit être changé avant d'essayer cela? – crashekar

+1

Étrange, je viens de l'essayer à nouveau avec l'extrait de code ci-dessus, utilisé avec un nom d'utilisateur Gmail valide ([email protected]) et mot de passe et il a envoyé un message comme prévu. Ce (sous-ensemble) de code fonctionne comme un bot sur les machines Linux et Windows tous les jours. Python 2.6 et xmpppy-0.5.0rc1 sont utilisés. Peut-être assurez-vous que le login contient le suffixe @ gmail.com? –

+0

Et vérifiez également votre mot de passe. :) –

6

Here est la façon dont il a fait sur my PyTalk client. Ne pas oublier le @ gmail.com dans le userID.

Je pense que vous devriez essayer de connecter talk.google.com sur le port 5222.

Essayez également de spécifier une ressource pour l'authentification.

import xmpp 
import sys 

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

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

connection = jabber.connect(('talk.google.com',5222)) 
if not connection: 
    sys.stderr.write('Could not connect\n') 
else: 
    sys.stderr.write('Connected with %s\n' % connection) 

auth = jabber.auth(jid.getNode(), password, ressource) 
if not auth: 
    sys.stderr.write("Could not authenticate\n") 
else: 
    sys.stderr.write('Authenticate using %s\n' % auth) 

jabber.sendInitPresence(requestRoster=1) 
jabber.send(xmpp.Message("[email protected]" ,"Hello World form Python")) 

Par ailleurs, il semble très proche de Philip Réponse

1

je pense que vous devez écrire cela. i le tester en python 2.7 avec xmpppy 0.5.0rc1 et travaille très bien: P :):

import xmpp 

login = 'your [email protected]' # @gmail.com 
pwd = 'your pass' 
text='Hello worlD!' 
tojid='your friend @gmail.com' 



jid = xmpp.protocol.JID(login) 
cl = xmpp.Client(jid.getDomain(), debug=[]) 
if cl.connect(('talk.google.com',5223)): 
    print "Connected" 

else: 
    print "Connectioned failed" 

if cl.auth(jid.getNode(), pwd): 
    cl.sendInitPresence() 
    cl.send(xmpp.protocol.Message(tojid,text)) 
else: 
    print "Authentication failed" 
Questions connexes