2010-12-27 4 views
2

でのgtalkのニックネームを取得します。は、私は次のように任意の連絡先のニックネームを取得することができるよPythonのXMPPモジュールではPythonのXMPP

self.connection.auth(userJid.getNode(), self.password) 
self.roster = self.connection.getRoster() 
name = self.roster.getName(buddyJid) 

はbuddyJidがフォーム[email protected]である..where。
接続(userJid)を認証するユーザーのニックネームを取得する必要があります。私は上記の方法で名前を見つけることができません。 現在のユーザーの名前を取得するにはどの方法を使用できますか?

答えて

0

この情報は社内にはありません。あなたは、個々のクライアントを照会し、このIQを送信することにより、自分のvCardのを取得する必要があります。

<iq from='[email protected]/roundabout' 
    id='v1' 
    type='get'> 
    <vCard xmlns='vcard-temp'/> 
</iq> 
0

が、これは私はあなたの提案に基づくまとめるサンプル関数で、nicholas_oありがとう。 (XMLロジックは理想的ではありませんが、これが必要な単純なタスクには十分でした)

def vcard(disp, jid): 
    msg = xmpp.protocol.Iq() 
    msg.setType('get') 
    msg.setTo(jid) 
    qc = msg.addChild('vCard') 
    qc.setAttr('xmlns', 'vcard-temp') 
    rep = disp.SendAndWaitForResponse(msg) 
    # to see what other fields are available in the XML output: 
    # print rep 
    userid=fname=lname=title=department=region=None 
    for i in rep.getChildren(): 
     for j in i.getChildren(): 
      if j.getName() == "TITLE": 
       title = j.getData().encode('utf-8') 
      for k in j.getChildren(): 
       if k.getName() == "GIVEN": 
        fname = k.getData().encode('utf-8') 
       if k.getName() == "FAMILY": 
        lname = k.getData().encode('utf-8') 
       if k.getName() == "ORGUNIT": 
        department = k.getData().encode('utf-8') 
       if k.getName() == "REGION": 
        region = k.getData().encode('utf-8') 
    return fname, lname, title, department, region 
関連する問題