Если вы посмотрите на эту ветку в списке рассылки 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
- Ланс