gpt4 book ai didi

python - sleekxmpp 发布订阅示例

转载 作者:太空狗 更新时间:2023-10-30 02:05:42 27 4
gpt4 key购买 nike

我正在寻找用于实现 SleekXMPP XEP 60 插件的工作示例代码。我想做的是通过 TLS 进行身份验证并订阅名为“blogupdates”的节点然后只需等待事件并获取包含在我已经搜索了几天,但我找不到一个好的工作示例 google 或 SO

请注意,我订阅的不是用户而是节点,因此发布者可以是任何人。

有什么帮助吗?

最佳答案

如果您查看 SleekXMPP 邮件列表 (Beginner - SleekXMPP - XEP-0060) 上的这个帖子,我有一个示例 Pubsub 客户端,您可以试验和检查。我将整理并完善这两个脚本,以便尽快添加到捆绑的示例中。

(编辑:这些文件现在位于 develop 分支的示例目录中。参见 examples/pubsub_client.pyexamples/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

但是,如果您使用的是 develop 分支,我添加了一些您可能喜欢的新功能,以便更轻松地处理发布事件:

# 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 聊天室:sleek@conference.jabber.org

-- 兰斯

关于python - sleekxmpp 发布订阅示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9745908/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com