Facebook : 如何使用 xmpp 将私人消息作为粉丝页面发送

Posted

技术标签:

【中文标题】Facebook : 如何使用 xmpp 将私人消息作为粉丝页面发送【英文标题】:Facebook : How to send a private message as a fanpage using xmpp 【发布时间】:2014-02-13 14:52:10 【问题描述】:

在寻找解决我的问题的方法失败了几天后,我决定寻求帮助。

我正在尝试使用带有 python 的 XMPP 协议将私人消息作为我的粉丝页面发送给 facebook 用户。

我正在使用下面的代码来创建客户端:

import sleekxmpp

class SendMsgBot(sleekxmpp.ClientXMPP):
    def __init__(self, jid, recipient, message):
        sleekxmpp.ClientXMPP.__init__(self, jid, 'ignore')
        self.recipient = recipient
        self.msg = message
        self.add_event_handler("session_start", self.start, threaded=True)

    def start(self, event):
        self.send_presence()
        self.get_roster()
        self.send_message(mto=self.recipient,
        mbody=self.msg,
        mtype='chat')
        self.disconnect(wait=True)

这是我使用上面创建的客户端发送消息的代码:

from fbxmpp import SendMsgBot

jid = '1000021...@chat.facebook.com'
to = '1351...@chat.facebook.com'
msg = 'Hey  anything , how is it going?'

xmpp = SendMsgBot(jid, to, unicode(msg))

xmpp.credentials['api_key'] = '599641.....' 
xmpp.credentials['access_token'] = 'CAACEdEose0cBACVTezXXZATDZAZBucX8fTUB0a....'

if xmpp.connect(('chat.facebook.com', 5222)):
    xmpp.process(block=True)
    print("Done")
else:
    print("Unable to connect.")

在上面的代码中使用我的 facebook 登录名和密码,我没有收到任何错误。但我需要使用我的粉丝页面发送消息。

我已成功使用我的 api_key 和 access_token 进行身份验证,但控制台冻结了一段时间并显示以下消息:

DEBUG:sleekxmpp.xmlstream.xmlstream:RECV: <success xmlns="urn:ietf:params:xml:ns:xmpp-sasl" />
DEBUG:sleekxmpp.xmlstream.xmlstream:Event triggered: auth_success
DEBUG:sleekxmpp.xmlstream.xmlstream:SEND (IMMED): <stream:stream to='chat.facebook.com' xmlns:stream='http://etherx.jabber.org/streams' xmlns='jabber:client' xml:lang='en' version='1.0'>
DEBUG:sleekxmpp.xmlstream.xmlstream:RECV: <stream:stream version="1.0" from="chat.facebook.com" id="1" xml:lang="en">
DEBUG:sleekxmpp.xmlstream.xmlstream:RECV: <stream:features xmlns="http://etherx.jabber.org/streams"><bind xmlns="urn:ietf:params:xml:ns:xmpp-bind" /><session xmlns="urn:ietf:params:xml:ns:xmpp-session" /></stream:features>
DEBUG:sleekxmpp.features.feature_bind.bind:Requesting resource: 
DEBUG:sleekxmpp.xmlstream.xmlstream:SEND (IMMED): <iq type="set" id="6e6fe59f-1683-41a9-9a32-dc8a952cdecd-2"><bind xmlns="urn:ietf:params:xml:ns:xmpp-bind" /></iq>
DEBUG:sleekxmpp.xmlstream.xmlstream:RECV: <iq type="result" from="-100002126842229@chat.facebook.com" id="6e6fe59f-1683-41a9-9a32-dc8a952cdecd-2"><bind xmlns="urn:ietf:params:xml:ns:xmpp-bind"><jid>-100002126842229@chat.facebook.com/xymAXUKM</jid></bind></iq>

超时后我收到了另一条消息:

WARNING:sleekxmpp.xmlstream.handler.waiter:Timed out waiting for IqWait_6e6fe59f-1683-41a9-9a32-dc8a952cdecd-2
ERROR:sleekxmpp.xmlstream.xmlstream:Error processing stream handler: Stream Features
Traceback (most recent call last):
  File "/Users/felipecabral/.virtualenvs/facebook/lib/python2.7/site-packages/sleekxmpp/xmlstream/xmlstream.py", line 1669, in _event_runner
    handler.run(args[0])
  File "/Users/felipecabral/.virtualenvs/facebook/lib/python2.7/site-packages/sleekxmpp/xmlstream/handler/callback.py", line 76, in run
    self._pointer(payload)
  File "/Users/felipecabral/.virtualenvs/facebook/lib/python2.7/site-packages/sleekxmpp/clientxmpp.py", line 280, in _handle_stream_features
    if handler(features) and restart:
  File "/Users/felipecabral/.virtualenvs/facebook/lib/python2.7/site-packages/sleekxmpp/features/feature_bind/bind.py", line 50, in _handle_bind_resource
    response = iq.send(now=True)
  File "/Users/felipecabral/.virtualenvs/facebook/lib/python2.7/site-packages/sleekxmpp/stanza/iq.py", line 230, in send
    raise IqTimeout(self)
IqTimeout
ERROR:sleekxmpp.xmlstream.stanzabase:Error handling jabber:clientfeatures stanza
Traceback (most recent call last):
  File "/Users/felipecabral/.virtualenvs/facebook/lib/python2.7/site-packages/sleekxmpp/xmlstream/xmlstream.py", line 1669, in _event_runner
    handler.run(args[0])
  File "/Users/felipecabral/.virtualenvs/facebook/lib/python2.7/site-packages/sleekxmpp/xmlstream/handler/callback.py", line 76, in run
    self._pointer(payload)
  File "/Users/felipecabral/.virtualenvs/facebook/lib/python2.7/site-packages/sleekxmpp/clientxmpp.py", line 280, in _handle_stream_features
    if handler(features) and restart:
  File "/Users/felipecabral/.virtualenvs/facebook/lib/python2.7/site-packages/sleekxmpp/features/feature_bind/bind.py", line 50, in _handle_bind_resource
    response = iq.send(now=True)
  File "/Users/felipecabral/.virtualenvs/facebook/lib/python2.7/site-packages/sleekxmpp/stanza/iq.py", line 230, in send
    raise IqTimeout(self)
IqTimeout

知道我做错了什么吗?

谢谢!

【问题讨论】:

您使用的是最新版本的 slimxmpp 吗?我怀疑这个问题可能与this change 有关 - 该错误表明该库正在等待它实际收到的 IQ 结果,所以它可能没想到它得到的“来自”属性(裸用户的 JID)。 “最近”似乎包括版本 1.2.0。 我的workon中安装的版本是slickxmpp == 1.2.3 你认为安装以前的1.2版本可以解决吗?认为值得参加考试吗? 似乎 1.2.0 是没有相关更改的最新版本。如果它适用于 1.2.0,则应将其报告为 slimxmpp 中的错误。 谢谢它的工作。删除了 1.2.3 版本并安装了 1.1.11 版本。现在正在使用 api 和 access_token 进行身份验证。我真正喜欢做但仍然没有工作的,是发送一条私人消息,将我的粉丝页作为消息的所有者,但无法这样做。谢谢,我会继续搜索下一步。 【参考方案1】:

作为 mentioned over at Github,这应该在 slimxmpp 1.2.4 中修复。

【讨论】:

以上是关于Facebook : 如何使用 xmpp 将私人消息作为粉丝页面发送的主要内容,如果未能解决你的问题,请参考以下文章

Android Asmack xmpp 登录仅适用于我自己的 Facebook 帐户

如何使用 Facebook 登录 API 对 XMPP 用户进行身份验证?

如何使用 XMPP 和 BOSH 实现 Facebook 聊天

您如何将 XMPP 绑定会话镜像到多个选项卡或窗口,例如 facebook、okCupid 等

XMPP 与 Facebook Chat 集成,使用 Python

是否可以使用公共 XMPP 服务器来创建私人聊天室?