【问题标题】:Connecting to Facebook Chat using SleekXMPP使用 SleekXMPP 连接到 Facebook 聊天
【发布时间】:2012-05-30 17:59:09
【问题描述】:

我正在使用此示例代码通过 XMPP 连接到 Facebook Chat:

#!/usr/bin/python
import sleekxmpp
import logging
logging.basicConfig(level=logging.DEBUG)

def session_start(event):
    chatbot.send_presence()
    print('Session started')
    chatbot.get_roster()

def message(msg):
    if msg['type'] in ('chat','normal'):
        print('msg received')
        print(msg['body'])

        msg.reply('Thanks').send()

jid = 'myusername@chat.facebook.com'
password = 'mypassword'
server = ('chat.facebook.com', 5222)

chatbot = sleekxmpp.ClientXMPP(jid,password)
chatbot.add_event_handler('session_start', session_start)
chatbot.add_event_handler('message', message)
chatbot.auto_reconnect = True
chatbot.connect(server)
chatbot.process(block=True)

一切似乎都很好,但是当我运行该代码时,我无法连接到 Facebook 服务器:

DEBUG:sleekxmpp.basexmpp:setting jid to myusername@chat.facebook.com
DEBUG:sleekxmpp.basexmpp:Loaded Plugin (RFC-6120)  STARTTLS Stream Feature
DEBUG:sleekxmpp.basexmpp:Loaded Plugin (RFC-6120)  Resource Binding Stream Feature
DEBUG:sleekxmpp.basexmpp:Loaded Plugin (RFC-3920)  Start Session Stream Feature
DEBUG:sleekxmpp.basexmpp:Loaded Plugin (RFC-6120)  SASL Stream Feature
DEBUG:sleekxmpp.xmlstream.xmlstream:Trying to connect to chat.facebook.com:5222
DEBUG:sleekxmpp.xmlstream.xmlstream:Connecting to chat.facebook.com:5222
ERROR:sleekxmpp.xmlstream.xmlstream:Could not connect to chat.facebook.com:5222. Socket Error #111: Connection refused
DEBUG:sleekxmpp.xmlstream.xmlstream:Trying to connect to chat.facebook.com:5222
DEBUG:sleekxmpp.xmlstream.xmlstream:Waiting 1.97953654103 seconds before connecting.
...

我错过了什么吗?

【问题讨论】:

    标签: python xmpp facebook-chat


    【解决方案1】:

    您在脚本中正确执行了所有操作。这似乎是 Facebook 端的一个临时问题(如 Socket Error #111: Connection refused 所暗示的那样)。针对 Sleek 的主分支和开发分支进行测试,您的脚本可以连接并登录。

    查看Facebook XMPP开发者关系群,最近没有任何中断报告,所以我不确定目前服务情况如何。

    另外说明,由于你是在和Facebook打交道,如果你想使用X-FACEBOOK-PLATFORM的认证方式,那么你可以设置:

    chatbot.credentials['api_key'] = '...API_KEY...'
    chatbot.credentials['access_token'] = '...TOKEN...'
    

    如果您需要 Sleek 相关的帮助,别忘了还有 slim@conference.jabber.org 会议室。

    -- 兰斯

    【讨论】:

    • 好吧,我仍然无法连接到chat.facebook.com:5222,每次尝试都会失败。知道可能出了什么问题吗?使用 Python 2.7.2+ 和从 pip 安装的 SleekXMPP 1.0。
    • 关于X-FACEBOOK-PLATFORM 身份验证方法,我只需要将那几行放在我的代码上,否则我遗漏了什么?我已经有了我的 API 密钥和访问令牌,但我不知道如何告诉 slimxmpp 使用该身份验证方法......无论如何,谢谢! :)
    • 好的,要尝试查看问题出在哪里,您可以尝试使用 telnet 手动测试:telnet chat.facebook.com 5222,然后输入一些字符并按 Enter。如果您能够连接到聊天服务器,您应该会收到错误响应。我希望 telnet 命令失败,说它无法连接。您是否有任何可能禁止连接到 Facebook 聊天的防火墙?
    • 是的,您只需将这两行添加到您的脚本中。 Sleek 将自动尝试使用 X-FACEBOOK-PLATFORM,如果该信息不正确或不存在,将回退到 DIGEST-MD5。但是,您需要升级到使用 Sleek 的开发分支版本;再次检查,看起来我在 1.0 版本中没有准备好该功能。
    • 哦,意识到我的/etc/hosts 文件阻止了chat.facebook.com 域,太奇怪了!感谢您的小费!不管怎样,切换到了 slimxmpp 1.0.1-dev,X-FACEBOOK-PLATFORM 身份验证就像一个魅力!感谢大家的帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多