xmpppy ライブラリを使用して Python 経由で Facebook チャットに接続できない

xmpppy ライブラリを使用して Python 経由で Facebook チャットに接続できない

Facebook チャットに接続するためのスクリプトを Python で書こうとしています。 どうしてもできません。 コードは次のとおりです:

import xmpp
FACEBOOK_ID = "[email protected]"
PASS = "password"

jid=xmpp.protocol.JID(FACEBOOK_ID)

C=xmpp.Client(jid.getDomain(),debug=['always'])

if not C.connect(("chat.facebook.com",5222)):
    raise IOError('Can not connect to server.')

if not C.auth(jid.getNode(),PASS):
    raise IOError('Can not auth with server.')

C.send(xmpp.protocol.Message("[email protected]","Hello world from script",))

次のようなエラーが発生します:

An error occurred while looking up _xmpp-client._tcp.chat.facebook.com

これはデバッガーの出力ですここ

これは、認証は受けていることを示しています (行 136) が、それでもメッセージは送信されません。私はここ何日もこの問題で行き詰まっています。

答え1

@grawity が指摘したように、スクリプトに次のコードを追加することで取得できる JID を取得する必要があります。

コード内でサーバー認証後、サーバーに連絡先リストを要求できます。コードに以下を追加します。

C.sendInitPresence(requestRoster=1)
rosterobject = C.getRoster()

JID のみをチェック/印刷したい場合は、次のループで実行できます。

for i in rosterobject.getItems():
    print i

名簿オブジェクトには連絡先(JID)があるはずです。次のステートメントでそのJIDを使用します。

C.send(xmpp.Message("[email protected]","Hello world from script",))

これで問題が解決することを願っています。

答え2

username@chat.facebook.comJID は認証中のみ有効です。メッセージを送信するには、XMPP 名簿から確認できる JID を使用する必要があります(ただし、自分自身にメッセージを送信することはできません)。-profileid@chat.facebook.com

関連情報