瀏覽代碼

avoid assertion for type 49 (close #52)

Yuxin Wu 5 年之前
父節點
當前提交
55784bd1bf
共有 1 個文件被更改,包括 12 次插入10 次删除
  1. 12 10
      wechat/msg.py

+ 12 - 10
wechat/msg.py

@@ -6,7 +6,7 @@ TYPE_NAMECARD = 42
 TYPE_VIDEO_FILE = 43
 TYPE_EMOJI = 47
 TYPE_LOCATION = 48
-TYPE_LINK = 49  # link share OR file from web
+TYPE_LINK = 49  # link share OR file from web, see https://github.com/ppwwyyxx/wechat-dump/issues/52
 TYPE_VOIP = 50
 TYPE_WX_VIDEO = 62  # video took by wechat
 TYPE_SYSTEM = 10000
@@ -60,11 +60,13 @@ class WeChatMsg(object):
             pq = PyQuery(self.content_xml_ready)
             url = pq('url').text()
             if not url:
+                # TODO: see https://github.com/ppwwyyxx/wechat-dump/issues/52 for
+                # more logic to implement
                 title = pq('title').text()
-                assert title, \
-                        u"No title or url found in TYPE_LINK: {}".format(self.content)
-                return u"FILE:{}".format(title)
-            return u"URL:{}".format(url)
+                if title:  # may not be correct
+                    return "FILE:{}".format(title)
+                return "NOT IMPLEMENTED: " + self.content_xml_ready
+            return "URL:{}".format(url)
         elif self.type == TYPE_NAMECARD:
             pq = PyQuery(self.content_xml_ready, parser='xml')
             msg = pq('msg').attr
@@ -73,7 +75,7 @@ class WeChatMsg(object):
                 name = msg['alias']
             if not name:
                 name = ""
-            return u"NAMECARD: {}".format(self.content_xml_ready)
+            return "NAMECARD: {}".format(self.content_xml_ready)
         elif self.type == TYPE_APP_MSG:
             pq = PyQuery(self.content_xml_ready, parser='xml')
             return pq('title').text()
@@ -94,20 +96,20 @@ class WeChatMsg(object):
                 for event, elem in ET.iterparse(data_to_parse, events=('end',)):
                     if elem.tag == 'sendertitle':
                         title = elem.text
-                        return u"[RED ENVELOPE]\n{}".format(title)
+                        return "[RED ENVELOPE]\n{}".format(title)
             except:
                 pass
-            return u"[RED ENVELOPE]"
+            return "[RED ENVELOPE]"
         elif self.type == TYPE_MONEY_TRANSFER:
             data_to_parse = io.BytesIO(self.content.encode('utf-8'))
             try:
                 for event, elem in ET.iterparse(data_to_parse, events=('end',)):
                     if elem.tag == 'des':
                         title = elem.text
-                        return u"[Money Transfer]\n{}".format(title)
+                        return "[Money Transfer]\n{}".format(title)
             except:
                 pass
-            return u"[Money Transfer]"
+            return "[Money Transfer]"
         else:
             # TODO replace smiley with text
             return self.content