2009-08-19 4 views
4

私はPythonでxmppを使用していますが、Gmailと通信するための簡単なクライアントを作成したいと考えています id。Python2.6 xmpp 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")) 

私は私が他のステートメントを実行したときに例外

IOError: Disconnected from server.

はまた、私はコンソールにデバッグメッセージをゲットする最後の行を実行します。

何が問題になる可能性があり、どのように解決できますか?

+0

切断される直前のデバッグステートメントは何ですか?許可されていないエラーが表示されますか? <障害のxmlns = "壷:IETF:のparams:XML:NS:XMPP-SASL"> <-許可されていません/> –

答えて

0

は、私はあなたが最初のメッセージを送信する前にsendInitPresenceをコールする必要があると思う:

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

はそれを試みたが、私はまだ例外IOErrorました:サーバーエラー – crashekar

+0

から切り離すには、最初の存在を送信しています必須ではありません。私はちょうど特別なルールを持っていないことを確認するためにgtalkに対してテストしました。 –

1

は、このコードスニペットを試してみてください。私は単純化のためにエラー条件を処理しませんでした。

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" 


、デバッグメッセージをオフClientクラスのコンストラクタの第二パラメータにデバッグ= []を渡すには:

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

フィリップを試してみましたが、認証に失敗しました。これを試す前に変更が必要な設定はありますか? – crashekar

+1

奇妙なことに、上記のコードスニペットをもう一度試してみました。有効なgmailユーザー名([email protected])とパスワードで使用され、期待どおりのメッセージが送信されました。この(サブセットの)コードは、毎日LinuxとWindowsのマシン上でボットとして実行されます。 Python 2.6とxmpppy-0.5.0rc1が使われました。おそらく、ログインに@ gmail.comという接尾辞が含まれていることを確認しますか? –

+0

また、パスワードを再確認してください。 :) –

6

Hereは、それがmy PyTalk clientにやった方法です。

userIDの@ gmail.comを忘れないでください。

5222ポートでtalk.google.comに接続するようにしてください。

また、authのressourceを指定してみます。ところで

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")) 

、それは私はあなたがこれを書かなければならないと思います

1

回答フィリップから非常に近く見えます。私はPython 2.7でxmpppy 0.5.0rc1でテストして、とても素敵な仕事をしています: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" 
関連する問題