You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
86 lines
2.4 KiB
86 lines
2.4 KiB
#!/usr/bin/env python
|
|
# -*- coding:utf-8 -*-
|
|
# project: 9月
|
|
# author: NinEveN
|
|
# date: 2021/9/6
|
|
|
|
import xml.etree.ElementTree as ET
|
|
|
|
|
|
def parse_xml(web_data):
|
|
if len(web_data) == 0:
|
|
return None
|
|
xml_data = ET.fromstring(web_data)
|
|
msg_type = xml_data.find('MsgType').text
|
|
|
|
if msg_type == 'event':
|
|
event_type = xml_data.find('Event').text
|
|
if event_type == 'CLICK':
|
|
return Click(xml_data)
|
|
elif event_type in ('subscribe', 'unsubscribe'):
|
|
return Subscribe(xml_data)
|
|
# elif event_type == 'VIEW':
|
|
# return View(xml_data)
|
|
# elif event_type == 'LOCATION':
|
|
# return LocationEvent(xml_data)
|
|
elif event_type == 'SCAN':
|
|
return Scan(xml_data)
|
|
|
|
elif msg_type == 'text':
|
|
return TextMsg(xml_data)
|
|
elif msg_type == 'image':
|
|
return ImageMsg(xml_data)
|
|
|
|
|
|
class Msg(object):
|
|
def __init__(self, xml_data):
|
|
self.ToUserName = xml_data.find('ToUserName').text
|
|
self.FromUserName = xml_data.find('FromUserName').text
|
|
self.CreateTime = xml_data.find('CreateTime').text
|
|
self.MsgType = xml_data.find('MsgType').text
|
|
self.MsgId = xml_data.find('MsgId').text
|
|
|
|
|
|
class TextMsg(Msg):
|
|
def __init__(self, xml_data):
|
|
Msg.__init__(self, xml_data)
|
|
self.Content = xml_data.find('Content').text.encode("utf-8")
|
|
|
|
|
|
class ImageMsg(Msg):
|
|
def __init__(self, xml_data):
|
|
Msg.__init__(self, xml_data)
|
|
self.PicUrl = xml_data.find('PicUrl').text
|
|
self.MediaId = xml_data.find('MediaId').text
|
|
|
|
|
|
class EventMsg(object):
|
|
def __init__(self, xml_data):
|
|
self.ToUserName = xml_data.find('ToUserName').text
|
|
self.FromUserName = xml_data.find('FromUserName').text
|
|
self.CreateTime = xml_data.find('CreateTime').text
|
|
self.MsgType = xml_data.find('MsgType').text
|
|
self.Event = xml_data.find('Event').text
|
|
self.Eventkey = xml_data.find('EventKey').text
|
|
self.Ticket = ''
|
|
|
|
|
|
class Click(EventMsg):
|
|
def __init__(self, xml_data):
|
|
EventMsg.__init__(self, xml_data)
|
|
|
|
|
|
class Scan(EventMsg):
|
|
def __init__(self, xml_data):
|
|
EventMsg.__init__(self, xml_data)
|
|
self.Ticket = xml_data.find('Ticket').text
|
|
|
|
|
|
class Subscribe(EventMsg):
|
|
def __init__(self, xml_data):
|
|
EventMsg.__init__(self, xml_data)
|
|
tick = xml_data.find('Ticket')
|
|
if tick is None:
|
|
self.Ticket = ''
|
|
else:
|
|
self.Ticket = tick.text
|
|
|