在 Python 中使用访问令牌通过 XMPP 发送 Facebook 消息

Posted

技术标签:

【中文标题】在 Python 中使用访问令牌通过 XMPP 发送 Facebook 消息【英文标题】:Send a Facebook Message with XMPP using Access Tokens in Python 【发布时间】:2013-06-03 17:12:53 【问题描述】:

这是一个非常具体的问题,但我找不到任何关于如何做到这一点的文档。 Facebook 文档是 pretty vague,其中包含一些 可怕 和无用的 php 示例(实际上,像 Facebook PHP 示例代码这样的代码让人们认为 PHP 很烂),但我找不到任何关于 Python 的东西。

我什至不知道如何将 PHP 示例代码中的相同原理应用到 Python 世界中。 xmpppy 和 SleekXMPP 文档有点简陋(或 broken),Google 仅显示使用密码的人的示例。

我有来自数据库的访问令牌,我没有兴趣生成浏览器来查找内容,或者做任何其他事情来查找令牌。我有它们,认为它是一个硬编码的字符串。我想将该字符串传递给 XMPP 并发送一条消息,这就是事情的全部范围。

有什么建议吗?

【问题讨论】:

【参考方案1】:

下面的代码可以工作,但只有经过this thread中提到的一些修改

【讨论】:

【参考方案2】:

我用我写的博客的链接回答了这个问题,因为它完美地描述了解决方案,但显然这惹恼了一些版主。

虽然这显然很荒谬,但这是重新发布的答案。

import sleekxmpp
import logging

logging.basicConfig(level=logging.DEBUG)

class SendMsgBot(sleekxmpp.ClientXMPP):
    def init(self, jid, recipient, message):
        sleekxmpp.ClientXMPP.__init__(self, jid, 'ignore')
        # The message we wish to send, and the JID that
        # will receive it.
        self.recipient = recipient
        self.msg = message
        # The session_start event will be triggered when
        # the bot establishes its connection with the server
        # and the XML streams are ready for use. We want to
        # listen for this event so that we we can initialize
        # our roster.
        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')
        # Using wait=True ensures that the send queue will be
        #emptied before ending the session.
        self.disconnect(wait=True)

我将它放入一个名为 fbxmpp.py 的文件中,然后在另一个文件(您的工作人员、命令行应用程序、Flask 控制器等)中,您将需要类似以下内容:

from fbxmpp import SendMsgBot

# The "From" Facebook ID
jid = '511501255@chat.facebook.com'

# The "Recipient" Facebook ID, with a hyphen for some reason
to = '-1000023894758@chat.facebook.com'

# Whatever you're sending
msg = 'Hey Other Phil, how is it going?'

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

xmpp.credentials['api_key'] = '123456'
xmpp.credentials['access_token'] = 'your-access-token'

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

【讨论】:

以上是关于在 Python 中使用访问令牌通过 XMPP 发送 Facebook 消息的主要内容,如果未能解决你的问题,请参考以下文章

使用谷歌访问令牌进行 Xmpp gtalk 身份验证

使用加密访问令牌格式登录 Facebook XMPP

Python 到 Facebook 消息,没有 xmpp 授权

XMPPHP 与 facebook 访问令牌

如何使用 Laravel Passport 访问令牌

通过访问令牌进行的 Python Social auth 身份验证失败