XMPP聊天:使用xmppy的Ros访问联系人的状态消息

2024-05-18 11:16:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图用xmppy访问我的googletalk联系人的自定义状态消息。我已经做到了:

import xmpp
import sys

userID   = 'myname@gmail.com' 
password = 'mypassword'
ressource = 'Script'

jid  = xmpp.protocol.JID(userID)
jabber  = xmpp.Client(jid.getDomain(), debug=[])

connection = jabber.connect(('talk.google.com',5222))
auth = jabber.auth(jid.getNode(), password, ressource)

jabber.sendInitPresence(requestRoster=1)
myroster = jabber.getRoster()

花名册对象myroster现在包含我的联系人,但不包括自定义状态消息。在

^{pr2}$

不返回

查看“原始花名册”,我可以看到资源字典是空的

u'oneofmyfriends@googlemail.com': {'ask': None, 'resources': {}, 'name': u'Some Name', 'groups': [], 'subscription': u'both'}

奇怪的是,我今天已经让它工作了,但我的代码可能有点不同,但我不知道我到底做了什么不同。。。在

任何帮助将不胜感激!在

干杯

马丁


Tags: importcomauth消息状态联系人xmppjid
2条回答

这是时间问题。添加处理程序:

jabber.RegisterHandler('presence', myPresenceHandler)

def myPresenceHandler(self, con, event):
  fromjid = event.getFrom().getStripped()
  status = myroster.getStatus(fromjid)

连接之前。然后确保在循环中调用jabber.Process()。问题是,对于代码,您有时会在查看花名册对象之前收到状态节,有时会在查看之后收到状态节。在

这是我发现的一件事,当我第一次开始使用xmpp时,我并不清楚。友谊是双向的。在

使用状态节
(a) 您可以“订阅”您的朋友,您的朋友可以返回“已订阅”。
(b) 你的朋友可以“订阅”你,你可以返回“订阅”。在

如果发生(a)或(b)事件,您的朋友将出现在您的花名册中。
如果(a)或(b)发生了,你将在你的朋友名册中。在

但是…
除非您“订阅”您的朋友—(a)必须发生
他们不会看到你的状态,除非他们“订阅”你—(b)必须发生。在

大多数XMPP客户机(pidgin、trillian等)在您发送“subscribed”时(在他们向您发送“subscribe”之后)会自动让您将“subscribe”发送回您的朋友。xmppy并不是开箱即用的。你必须对它进行编码。在

这可以解释为什么你看不到状态。或者如果这不包括你的情况,它可能会给其他人提供信息。在

相关问题 更多 >