这是一个非常具体的问题,但我找不到任何关于如何做到这一点的文档。 Facebook文档是pretty vague,其中包含一些可怕的和无用的PHP示例(实际上,它的代码类似于Facebook PHP示例代码,让人们认为PHP很糟糕)但我找不到任何关于Python的东西。
我甚至无法弄清楚如何将PHP示例代码中的相同原则应用到Python世界中。 xmpppy和SleekXMPP文档有点裸(或broken),Google仅显示使用密码的人的示例。
我有来自数据库的访问令牌,我没有兴趣生成浏览器来查找内容,或者做任何其他事情来查找令牌。我有它们,认为它是一个硬编码的字符串。我想将该字符串传递给XMPP并发送消息,这就是整个范围。
有什么建议吗?
答案 0 :(得分: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.")
答案 1 :(得分:1)
以下代码有效,但仅在this thread 中提到的某些修改后