Отправить сообщение Facebook с XMPP с помощью токенов доступа в Python

Это очень конкретный вопрос, но я не могу найти документацию о том, как я могу это сделать. Документация Facebook довольно расплывчата с некоторыми ужасными и бесполезными примерами PHP (на самом деле, это такой код, как пример PHP-кода Facebook, который заставляет людей думать, что PHP отстой), но я ничего не могу найти для Python.

Я даже не могу понять, как применить те же принципы из примера кода PHP в мире Python. Документы xmpppy и SleekXMPP немного скучны (или повреждены), и Google показывает только примеры людей, использующих пароли.

У меня есть токены доступа, поступающие из базы данных, я не заинтересован в том, чтобы вызывать браузер для поиска чего-либо или делать что-то еще для поиска токена. У меня есть они, считают это жестко закодированной строкой. Я хочу передать эту строку в XMPP и отправить сообщение, в этом вся суть.

Какие-либо предложения?

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.")

Код ниже работал, но только после некоторых изменений, упомянутых в этой теме

Другие вопросы по тегам