XMPP 聊天:使用 xmppPy 的名册访问联系人的状态消息
Posted
技术标签:
【中文标题】XMPP 聊天:使用 xmppPy 的名册访问联系人的状态消息【英文标题】:XMPP chat: accessing contacts' status messages with xmppPy's Roster 【发布时间】:2010-03-04 18:08:09 【问题描述】:我正在尝试使用 xmpppy 访问我的 google talk 联系人的自定义状态消息。我已经做到了这一点:
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 现在包含我的联系人,但不包括自定义状态消息。
myroster.getStatus('oneofmyfriends@gmail.com')
返回无
查看“原始名册”,我可以看到资源字典是空的
u'oneofmyfriends@googlemail.com': 'ask': None, 'resources': , 'name': u'Some Name', 'groups': [], 'subscription': u'both'
奇怪的是我今天已经让它工作了,但我的代码可能略有不同,但我无法弄清楚我到底做了什么不同......
任何帮助将不胜感激!
干杯,
马丁
【问题讨论】:
【参考方案1】:这是我发现的一件事,当我第一次开始使用 xmpp 时,我并不清楚。交友是双向的。
使用存在节 (a) 您可以“订阅”给您的朋友,您的朋友可以返回“已订阅”。 (b) 你的朋友可以“订阅”你,你可以回复“订阅”。
如果 (a) 或 (b) 发生了,您的朋友将在您的名单中。 如果 (a) 或 (b) 发生了,您将在您的朋友名单中。
但是... 除非您“订阅”您的朋友,否则您不会看到他们的状态 - (a) 必须发生 除非他们“订阅”您,否则他们不会看到您的状态 - (b) 必须发生。
大多数 XMPP 客户端(pidgin、trillian 等)会在您向您的朋友发送“订阅”时自动让您向他们发送“订阅”(在他们向您发送“订阅”之后)。 XMPPPY 并不是开箱即用的。您必须对其进行编码才能执行此操作。
这可以解释为什么您没有看到状态。或者,如果这不涵盖您的情况,它可能会对其他人提供有用的信息。
【讨论】:
嗨大卫,虽然我还没有应用你的信息,但我很感谢你证明这个答案。一旦我知道这是否是问题的原因,我会发表另一条评论。干杯!马丁【参考方案2】:这是一个时间问题。添加处理程序:
jabber.RegisterHandler('presence', myPresenceHandler)
def myPresenceHandler(self, con, event):
fromjid = event.getFrom().getStripped()
status = myroster.getStatus(fromjid)
在连接之前。然后确保循环调用jabber.Process()
。问题是,使用您的代码,您有时会在查看名册对象之前收到出席信息节,有时会在查看之后。
【讨论】:
以上是关于XMPP 聊天:使用 xmppPy 的名册访问联系人的状态消息的主要内容,如果未能解决你的问题,请参考以下文章