3

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

导入 xmpp
FACEBOOK_ID = "用户名@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('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 时,我得到了这个:

文件“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):返回
  文件“/home/john/xmpppy-0.3.1/xmpp/dispatcher.py”,第 302 行,在调度中
    处理程序['func'](会话,节)
  文件“/home/john/xmpppy-0.3.1/xmpp/dispatcher.py”,第 214 行,在 streamErrorHandler 中
    提高 exc((名称,文本))
xmpp.protocol.HostUnknown: (u'host-unknown', '')

我还注意到,每当我导入 xmpp 时,我都会在运行时收到以下两条消息:

/home/john/xmpppy-0.3.1/xmpp/auth.py:24: DeprecationWarning: sha 模块已弃用;改用 hashlib 模块
  导入 sha,base64,随机,调度程序
/home/john/xmpppy-0.3.1/xmpp/auth.py:26:DeprecationWarning:不推荐使用 md5 模块;改用 hashlib
  导入md5

我对解决这类问题还很陌生,如果可以帮助我解决这些问题,建议或资源链接将不胜感激。谢谢阅读!

4

2 回答 2

2

我也开始了同一个项目,并陷入了同样的问题。我也找到了解决方案。您必须编写 facebook 的用户名(因此您必须选择一个用户名),并且也必须使用小型大写字母。这是最重要的部分。很可能你也像我一样不会用小型大写字母写它。

于 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.SendAndWaitForResponse 而不是 Client.send ;)

于 2013-05-06T17:50:34.097 回答