add readme and driver

This commit is contained in:
ppwwyyxx
2014-11-21 14:37:18 +08:00
parent 83040b8a8d
commit 436717da10
3 changed files with 36 additions and 13 deletions
+2 -2
View File
@@ -1,7 +1,7 @@
#!/usr/bin/env python2
# -*- coding: UTF-8 -*-
# File: Msg.py
# Date: Fri Nov 21 14:08:33 2014 +0800
# Date: Fri Nov 21 14:10:21 2014 +0800
# Author: Yuxin Wu <[email protected]>
from datetime import datetime
@@ -62,7 +62,7 @@ class WeChatMsg(object):
self.createTime,
ensure_unicode(self.msg_str())).encode('utf-8')
if self.imgPath:
ret = u"{}|img:{}".format(ensure_unicode(ret), self.imgPath)
ret = u"{}|img:{}".format(ensure_unicode(ret.strip()), self.imgPath)
return ret.encode('utf-8')
else:
return ret
+70
View File
@@ -0,0 +1,70 @@
#!/usr/bin/env python2
# -*- coding: UTF-8 -*-
# File: Parser.py
# Date: Fri Nov 21 14:36:18 2014 +0800
# Author: Yuxin Wu <[email protected]>
import sqlite3
from collections import defaultdict
from .Msg import WeChatMsg
from .utils import ensure_unicode
""" tables in concern:
emojiinfo
imginfo2
addr_upload2
chatroom
message
rcontact
"""
class WeChatDBParser(object):
def __init__(self, db_fname):
""" db_fname: EnMicroMsg.db"""
self.db_fname = db_fname
self.db_conn = sqlite3.connect(self.db_fname)
self.cc = self.db_conn.cursor()
self.contacts = {}
self.msgs_by_talker = defaultdict(list)
def _parse_contact(self):
contacts = self.cc.execute(
"""
SELECT username,conRemark,nickname FROM rcontact
""")
for row in contacts:
username, remark, nickname = row
if remark:
self.contacts[username] = ensure_unicode(remark)
else:
self.contacts[username] = ensure_unicode(nickname)
def _parse_msg(self):
db_msgs = self.cc.execute(
"""
SELECT {} FROM message
""".format(','.join(WeChatMsg.FIELDS)))
for row in db_msgs:
msg = WeChatMsg(row)
if msg.type not in WeChatMsg.FILTER_TYPES:
self.msgs_by_talker[msg.talker].append(msg)
self.msgs_by_talker = dict([
(self.contacts[k], sorted(v, key=lambda x: x.createTime))
for k, v in self.msgs_by_talker.iteritems()])
for k, v in self.msgs_by_talker.iteritems():
for msg in v:
msg.talker = k
def _find_msg_by_type(self):
ret = []
for v in self.msgs_by_talker.itervalues():
for msg in v:
if msg.type == 34:
print msg
print
return ret
def parse(self):
self._parse_contact()
self._parse_msg()