3

Python の xmpppy を使用して Facebook チャットでメッセージを送信する非常に単純なスクリプトを作成しようとしています。

xmpp をインポート
FACEBOOK_ID = "username@chat.facebook.com"
PASS = 「パスワード」
サーバー = "chat.facebook.com"
jid=xmpp.protocol.JID(FACEBOOK_ID)
C=xmpp.Client(jid.getDomain(),debug=[])
C.connect((SERVER,5222)) でない場合:
    raise IOError('サーバーに接続できません')
C.auth(jid.getNode(),PASS) でない場合:
    raise IOError('サーバーで認証できません')
C.send(xmpp.protocol.Message("friend@chat.facebook.com","Hello world",))

このコードは gchat 経由でメッセージを送信するように機能しますが、Facebook で試してみると、次のエラーが表示されます。

_xmpp-client._tcp.chat.facebook.com の検索中にエラーが発生しました

FACEBOOK_ID から @chat.facebook.com を削除すると、代わりに次のようになります。

ファイル「gtalktest.py」の 11 行目
    C.connect((SERVER,5222)) でない場合:
  ファイル「/home/john/xmpppy-0.3.1/xmpp/client.py」、195 行目、接続
    CommonClient.connect(self,server,proxy,secure,use_srv) または secureNone ではなく、安全でない場合: self.connected を返します。
  ファイル「/home/john/xmpppy-0.3.1/xmpp/client.py」、179 行目、接続
    self.Process(1) でない場合: return
  ファイル「/home/john/xmpppy-0.3.1/xmpp/dispatcher.py」、302行目、ディスパッチ
    handler['func'](セッション、スタンザ)
  streamErrorHandler のファイル「/home/john/xmpppy-0.3.1/xmpp/dispatcher.py」、214 行目
    raise exc((name,text))
xmpp.protocol.HostUnknown: (u'host-unknown', '')

また、xmpp をインポートするたびに、実行時に次の 2 つのメッセージが表示されることに気付きました。

/home/john/xmpppy-0.3.1/xmpp/auth.py:24: DeprecationWarning: sha モジュールは非推奨です。代わりに hashlib モジュールを使用してください
  import sha,base64,random,dispatcher
/home/john/xmpppy-0.3.1/xmpp/auth.py:26: DeprecationWarning: md5 モジュールは非推奨です。代わりに hashlib を使用してください
  md5をインポート

私はこの種の問題を解決することにかなり慣れていないため、これらの問題の解決を進めるのに役立つリソースへのアドバイスまたはリンクをいただければ幸いです。読んでくれてありがとう!

4

2 に答える 2

2

私も同じプロジェクトを開始し、同じ問題に陥りました。私も解決策を見つけました。facebook のユーザー名 (したがって、1 つのユーザー名を選択する必要があります) を記述する必要があり、それも小文字で記述します。これは最も重要な部分です。おそらく、あなたも私のことが好きで、小文字で書かないでしょう。

于 2011-03-11T02:59:02.207 に答える
1
import xmpp

FACEBOOK_ID = "username@chat.facebook.com"
PASS = "password"
SERVER = "chat.facebook.com"

jid=xmpp.protocol.JID(FACEBOOK_ID)

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

if not client.connect((SERVER,5222)):
    raise IOError('Can not connect to server.')
if not client.auth(jid.getNode(),PASS):
    raise IOError('Can not auth with server.')


message = xmpp.protocol.Message(frm=client.Bind.bound[0], to="-<#_ID_OF_FRIEND>@chat.facebook.com", typ="chat", body="Hello world",)

client.SendAndWaitForResponse(message)

これは私にとってはうまくいきました。とにかく、クエリに対するサーバーの応答を知りたい場合は、 Client.send の代わりに Client.SendAndWaitForResponse を使用してください;)

于 2013-05-06T17:50:34.097 に答える