def parse_msg(xml): if not xml: return None parser = ElementTree.fromstring(xml) id_node = parser.find('MsgId') msg_id = id_node and int(id_node.text) or 0 msg_type = decode(parser.find('MsgType').text) touser = decode(parser.find('ToUserName').text) fromuser = decode(parser.find('FromUserName').text) create_at = int(parser.find('CreateTime').text) msg = ObjectDict( mid=msg_id, type=msg_type, touser=touser, fromuser=fromuser, time=create_at ) if msg_type == MSG_TYPE_TEXT: msg.content = decode(parser.find('Content').text) elif msg_type == MSG_TYPE_LOCATION: msg.location_x = decode(parser.find('Location_X').text) msg.location_y = decode(parser.find('Location_Y').text) msg.scale = int(parser.find('Scale').text) msg.label = decode(parser.find('Label').text) elif msg_type == MSG_TYPE_IMAGE: msg.picurl = decode(parser.find('PicUrl').text) elif msg_type == MSG_TYPE_LINK: msg.title = decode(parser.find('Title').text) msg.description = decode(parser.find('Description').text) msg.url = decode(parser.find('Url').text) elif msg_type == MSG_TYPE_EVENT: msg.event = decode(parser.find('Event').text) msg.event_key = decode(parser.find('EventKey').text) return msg
def parse_msg(xml): if not xml: return None parser = ElementTree.fromstring(xml) msg_id = parse_node(parser, 'MsgId', get_uuid()) msg_type = parse_node(parser, 'MsgType') touser = parse_node(parser, 'ToUserName') fromuser = parse_node(parser, 'FromUserName') create_at = int(parse_node(parser, 'CreateTime', 0)) msg = ObjectDict( mid=msg_id, type=msg_type, touser=touser, fromuser=fromuser, time=create_at ) if msg_type == MSG_TYPE_TEXT: msg.content = parse_node(parser, 'Content') elif msg_type == MSG_TYPE_LOCATION: msg.location_x = parse_node(parser, 'Location_X') msg.location_y = parse_node(parser, 'Location_Y') msg.scale = int(parse_node(parser, 'Scale')) msg.label = parse_node(parser, 'Label') elif msg_type == MSG_TYPE_IMAGE: msg.picurl = parse_node(parser, 'PicUrl') elif msg_type == MSG_TYPE_VOICE: msg.media_id = parse_node(parser, 'MediaId') msg.format = parse_node(parser, 'Format') elif msg_type == MSG_TYPE_VIDEO: msg.media_id = parse_node(parser, 'MediaId') msg.thumb = parse_node(parser, 'ThumbMediaId') elif msg_type == MSG_TYPE_LINK: msg.title = parse_node(parser, 'Title') msg.description = parser.find('Description').text msg.url = parse_node(parser, 'Url') elif msg_type == MSG_TYPE_EVENT: msg.event = parse_node(parser, 'Event') msg.event_key = parse_node(parser, 'EventKey') msg.ticket = parse_node(parser, 'Ticket') if msg.event == 'LOCATION': msg.latitude = parse_node(parser, 'Latitude') msg.longitude = parse_node(parser, 'Longitude') msg.precision = parse_node(parser, 'Precision') return msg