xmpppy与Facebook聊天集成

3 投票
2 回答
2841 浏览
提问于 2025-04-16 10:13

我正在尝试创建一个非常简单的脚本,使用Python的xmpppy库通过Facebook聊天发送消息。

import xmpp
FACEBOOK_ID = "username@chat.facebook.com"
PASS = "password"
SERVER = "chat.facebook.com"
jid=xmpp.protocol.JID(FACEBOOK_ID)
C=xmpp.Client(jid.getDomain(),debug=[])
if not C.connect((SERVER,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("friend@chat.facebook.com","Hello world",))

这段代码可以通过gchat发送消息,但当我尝试用Facebook时却收到这个错误:

在查找 _xmpp-client._tcp.chat.facebook.com 时发生错误。

当我从FACEBOOK_ID中去掉@chat.facebook.com时,我得到的是这个:

File "gtalktest.py", line 11, in 
    if not C.connect((SERVER,5222)):
  File "/home/john/xmpppy-0.3.1/xmpp/client.py", line 195, in connect
    if not CommonClient.connect(self,server,proxy,secure,use_srv) or secureNone and not secure: return self.connected
  File "/home/john/xmpppy-0.3.1/xmpp/client.py", line 179, in connect
    if not self.Process(1): return
  File "/home/john/xmpppy-0.3.1/xmpp/dispatcher.py", line 302, in dispatch
    handler['func'](session,stanza)
  File "/home/john/xmpppy-0.3.1/xmpp/dispatcher.py", line 214, in streamErrorHandler
    raise exc((name,text))
xmpp.protocol.HostUnknown: (u'host-unknown', '')

我还注意到每次我导入xmpp时,运行时都会出现以下两个消息:

/home/john/xmpppy-0.3.1/xmpp/auth.py:24: DeprecationWarning: the sha module is deprecated; use the hashlib module instead
  import sha,base64,random,dispatcher
/home/john/xmpppy-0.3.1/xmpp/auth.py:26: DeprecationWarning: the md5 module is deprecated; use hashlib instead
  import md5

我对解决这类问题还比较陌生,如果有人能给我一些建议,或者提供一些资源链接,帮助我解决这些问题,我将非常感激。谢谢你的阅读!

2 个回答

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.SendAndWaitForResponse 代替 Client.send ;)

2

我也开始了同样的项目,结果遇到了同样的问题。我也找到了解决办法。你需要写出你的Facebook用户名(所以你必须选择一个用户名),而且要用小写字母。这是最重要的部分。很可能你和我一样,开始的时候并没有用小写字母。

撰写回答