Pyxmpp2
跳转到导航
跳转到搜索
发送 HTML 消息
from xml.etree import ElementTree
from pyxmpp2.message import Message
from pyxmpp2.stanzapayload import XMLPayload
m = Message(
stanza_type = 'chat',
from_jid = clientjid,
to_jid = 'someone@example.org',
body = '测试失败',
)
formatted = ElementTree.XML('''<html xmlns="http://jabber.org/protocol/xhtml-im"><body xmlns="http://www.w3.org/1999/xhtml"><span style="color: pink;">测试成功</span></body></html>''')
m.add_payload(XMLPayload(formatted))
解析 payload
(示例)
from pyxmpp2.etree import ElementTree
from pyxmpp2.interfaces import StanzaPayload, payload_element_name
VCARD_TAG = u'{vcard-temp}vCard'
@payload_element_name(VCARD_TAG)
class VCardPayload(StanzaPayload):
def __init__(self, attrs=None):
if attrs is not None:
self._dict = dict(attrs)
else:
self._dict = dict()
@classmethod
def from_xml(cls, element):
attrs = dict()
if element.tag !=VCARD_TAG:
raise ValueError("{0!r} is not a vcard item".format(element))
try:
photo = element.find(".//{vcard-temp}BINVAL").text
except:
photo = ""
try:
name = element.find(".//{vcard-temp}FN").text
except: name = ""
attrs["photo"] = photo
attrs["name"] = name
return cls(attrs)
def as_xml(self):
element = ElementTree.Element(VCARD_TAG)
return element
def get(self, key, default=""):
return self._dict.get(key, default)
# 使用方法示例
def get_vcard(self, jid, callback=None):
if not callback:
callback = self.vcard_callback
q = Iq(
to_jid = jid.bare(),
stanza_type = 'get',
)
# vc = ET.Element("{vcard-temp}vCard")
q.add_payload(VCardPayload())
self.stanza_processor.set_response_handlers(q, callback, callback)
self.send(q)
def vcard_callback(self, stanza):
vcard = stanza.get_payload(VCardPayload)
if vcard:
print(vcard.get("name"))