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