2011-03-27 106 views
1

与服务器通信,当我面临的一个问题网友:获取使用Jabber(XMPP)

[request] <stream:stream to="chat.facebook.com" xmlns:stream="http://etherx.jabber.org/streams" xmlns="jabber:client" version="1.0"> 
[response] <?xml version="1.0"?><stream:stream id="0D752DF3" from="chat.facebook.com" xmlns="jabber:client" xmlns:stream="http://etherx.jabber.org/streams" version="1.0" xml:lang="en"><stream:features><mechanisms xmlns="urn:ietf:params:xml:ns:xmpp-sasl"><mechanism>X-FACEBOOK-PLATFORM</mechanism><mechanism>DIGEST-MD5</mechanism></mechanisms></stream:features> 
[request] <auth xmlns="urn:ietf:params:xml:ns:xmpp-sasl" mechanism="X-FACEBOOK-PLATFORM" /> 
[response] <challenge xmlns="urn:ietf:params:xml:ns:xmpp-sasl">[removed]</challenge> 
[request] <response xmlns="urn:ietf:params:xml:ns:xmpp-sasl">[removed]</response> 
[response] <success xmlns="urn:ietf:params:xml:ns:xmpp-sasl"/> 
[response] <?xml version="1.0"?><stream:stream id="4FC996C0" from="chat.facebook.com" xmlns="jabber:client" xmlns:stream="http://etherx.jabber.org/streams" version="1.0" xml:lang="en"><stream:features><bind xmlns="urn:ietf:params:xml:ns:xmpp-bind"/><session xmlns="urn:ietf:params:xml:ns:xmpp-session"/></stream:features> 

[request] <iq type="set" id="1"><bind xmlns="urn:ietf:params:xml:ns:xmpp-bind" /></iq> 
[response] <iq id="1" type="result"><bind xmlns="urn:ietf:params:xml:ns:xmpp-bind"><jid>-[removed]@chat.facebook.com/[removed]</jid></bind></iq> 
[request] <iq type="set" id="2" to="chat.facebook.com"><session xmlns="urn:ietf:params:xml:ns:xmpp-session"/></iq> 
[response] <iq type="result" from="chat.facebook.com" id="2"><session xmlns="urn:ietf:params:xml:ns:xmpp-session"/></iq> 
[request] <iq type="get" id="3" from="-[removed]@chat.facebook.com/[removed]"><query xmlns="jabber:iq:roster"/></iq> 

的问题是最后一个请求:

[request] <iq type="get" id="3" from="-[removed]@chat.facebook.com/[removed]"><query xmlns="jabber:iq:roster"/></iq> 

其中,根据文献[ ?],应该只返回在线用户。但是,它会返回所有用户朋友。 如何获取/过滤仅限在线用户?

+0

你能告诉我使用哪一节你已经提取所有Facebook的在线用户吗? – Hunt 2012-01-28 12:44:46

回答

2

该文档是在RFC 3921或更好的,RFC 3921bis,它应该很快就会得到一个RFC号码。有关检索名单的详细信息,请参见部分2.1.3,该名单是所有联系人的列表,无论他们的状态如何。为了接收你订阅的人的存在,你发送自己的存在来启动流程。

您发送:

<presence/> 

,并从每个在线的联系人中的每个设备接收回来存在节:

<presence from='[email protected]/deviceID/> 
<presence from='[email protected]/deviceID/> 

等,当你收到你不知道“所有”的存在,因为您的联系人可以在发生这种情况时改变他们的存在。相反,请考虑加入现场信息流,尽快将您的信息更新到最新状态,然后通知您有任何进一步的变化。

0

花名册或多或少是你的联系人列表(我不知道确切的定义),但在Facebook上它似乎与你的朋友列表非常相似。在Facebook上的聊天中,服务器在发送了Joe指示的初始状态后,很快就会向您发送您的朋友的状态信息。其实我并没有质疑花名册,因为我对不在线的朋友不感兴趣。