Пример использования sleekxmpp pubsub - PullRequest
4 голосов
/ 17 марта 2012

Ищу рабочий пример кода для реализации плагина SleekXMPP XEP 60. То, что я пытаюсь сделать, это аутентифицироваться по TLS и подписываться на узел под названием blogupdates Затем просто дождитесь событий и получите данные, содержащиеся в Я искал несколько дней, но я не могу найти хороший рабочий пример Google или SO

обратите внимание, что я подписываюсь не на пользователя, а на узел, поэтому издателем может быть любой.

любая помощь?

1 Ответ

9 голосов
/ 17 марта 2012

Если вы посмотрите на эту ветку в списке рассылки SleekXMPP ( Beginner - SleekXMPP - XEP-0060 ) У меня есть пример клиента Pubsub, с которым вы можете поэкспериментировать и изучить. Я приведу в порядок и полирую эти два сценария, чтобы добавить их в прилагаемые примеры в ближайшее время.

(РЕДАКТИРОВАТЬ: эти файлы теперь находятся в каталоге примеров в ветви разработки. См. examples / pubsub_client.py и examples / pubsub_events.py )

Для вашего случая использования вы должны сделать:

xmpp['xep_0060'].subscribe('pubsub.example.com', 'blogupdates')

Для более продвинутого использования вы также можете передать:

bare=False
# Subscribe using a specific resource, and not the bare JID

subscribee='somejid@example.com'
# Subscribe a different JID to the node, if authorized

options=data_form
# Provide subscription options using a XEP-0004 data form

Однако, если вы используете ветвь разработки, я добавил несколько новых функций, которые могут вам понравиться, чтобы упростить работу с событиями публикации:

# Generic pubsub event handlers for all nodes
xmpp.add_event_handler('pubsub_publish', handler)
xmpp.add_event_handler('pubsub_retract', handler)
xmpp.add_event_handler('pubsub_purge', handler)
xmpp.add_event_handler('pubsub_delete', handler)

# Use custom-named events for certain nodes, in this case 
# the User Tune node from PEP.
xmpp['xep_0060'].map_node_event('http://jabber.org/protocol/tune', 'user_tune')
xmpp.add_event_handler('user_tune_publish', handler)
# ...
# The same suffixes as the pubsub_* events.
# These events are raised in addition to the pubsub_* events.

Для обработчиков событий вы можете следовать шаблону:

def pubsub_publish(self, msg):
    # An event message could contain multiple items, but we break them up into
    # separate events for you to make it a bit easier.
    item = msg['pubsub_event']['items']['item']
    # Process item depending on application, like item['tune'], 
    # or the generic item['payload']

Вы можете посмотреть на XEP-0107 и соответствующие плагины PEP, чтобы увидеть больше примеров, поскольку эти функции были добавлены для их реализации.

Итак, вот как будет выглядеть ваш вариант использования:

# Note that xmpp can be either a ClientXMPP or ComponentXMPP object.
xmpp['xep_0060'].map_node_event('blogupdates', 'blogupdates')
xmpp['xep_0060'].add_event_handler('blogupdates_publish', blogupdate_publish)
xmpp['xep_0060'].subscribe('pubsub.example.com', 'blogupdates')
# If using a component, you'll need to specify a JID when subscribing using:   
# ifrom="specific_jid@yourcomponent.example.com"

def blogupdate_publish(msg):
    """Handle blog updates as they come in."""
    update_xml = msg['pubsub_event']['items']['item']['payload']
    # Do stuff with the ElementTree XML object, update_xml

И, наконец, если вы тратите слишком много времени на поиск в Google, зайдите в гладкий чат: sleek@conference.jabber.org

- Ланс

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...