2010-03-04 3 views
2

xmpppy를 사용하여 Google 토크 담당자의 사용자 정의 상태 메시지에 액세스하려고합니다. 지금까지 작성했습니다 :XMPP 채팅 : xmppPy의 사용자 명단에 연락처의 상태 메시지 액세스

import xmpp 
import sys 

userID = '[email protected]' 
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('[email protected]') 

반환 없음

, 내가 리소스 사전이라고 볼 수있는 '원 명단'을보고

u'[email protected]': {'ask': None, 'resources': {}, 'name': u'Some Name', 'groups': [], 'subscription': u'both'} 

빈 이상한 것은 내가이 오늘 일을 얻었을 것을

, 하지만 코드가 약간 다를 수는 있었지만 정확하게 다른 점이 무엇인지 알아낼 수는 없습니다 ...

도움이 될 것입니다!

건배,

마틴

답변

2

그것은 타이밍 문제입니다. 다음을 포함하는 처리기를 추가하십시오. 연결 전에 :

jabber.RegisterHandler('presence', myPresenceHandler) 

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

연결하기. 그런 다음 jabber.Process() 번으로 전화를 걸어야합니다. 문제는 코드에서 로스터 오브젝트를보기 전에 가끔씩 존재 스탠자를 수신하는 것입니다.

3

내가 처음 발견 한 것은 xmpp로 작업을 시작할 때 분명하지 않은 사실입니다. Friending은 양방향입니다.

존재 스 D 자 사용
(a) 친구에게 "등록"할 수 있으며 친구는 "등록"을 리턴 할 수 있습니다.
(b) 친구가 귀하를 "구독"할 수 있으며 "구독"을 반환 할 수 있습니다.

(a) 또는 (b)가 발생한 경우 친구가 귀하의 명부에 있습니다.
(a) 또는 (b)가 발생한 경우 친구 명부에 올 수 있습니다. 당신이 당신의 친구에게 "구독"하지 않는

그러나 ...
당신은 자신의 상태를 볼 수 없습니다 - (b)는 반드시 - (A) 그들은 당신에게 "구독"하지 않는
그들은 당신의 상태를 볼 수 없습니다 일어나야한다 우연히 있다.

대부분의 XMPP 클라이언트 (pidgin, trillian 등)는 "구독"을 보낸 후 ("구독"을 보낸 후) 친구에게 "구독"을 자동으로 보냅니다. XMPPPY는이 작업을 수행하지 않습니다. 이 작업을 수행하려면 코드를 작성해야합니다.

이렇게하면 상태를 볼 수없는 이유를 설명 할 수 있습니다. 또는 이것이 귀하의 상황을 다루지 않는다면 다른 사람에게 유익 할 것입니다.

+0

안녕하세요, David 님, 귀하의 정보를 아직 신청하지는 않았지만이 답변을 증명해 주셔서 감사합니다. 이것이 문제의 원인인지 알았다면 또 다른 의견을 게시 할 것입니다. 건배! 남자 이름 – Hoff

관련 문제