Ejemplo n.º 1
0
 def prepare_message_dict(self):
     db_node = self.node.GetByPath('Library/Caches/YWDB')
     if db_node is None:
         return
     p_l = os.listdir(db_node.PathWithMountPoint)
     db_dirs = list()
     for p in p_l:
         res = re.search('WXOPENIMSDKDB(.*)', p, re.I | re.M)
         if res is not None:
             db_dirs.append(p)
     for d in db_dirs:
         message_node = self.node.GetByPath(
             'Library/Caches/YWDB/%s/message.db' % d)
         if message_node is not None:
             path = unity_c37r.check_sqlite_maturity(
                 message_node, self.cache)
             conn = unity_c37r.create_connection(path)
             cmd = sql.SQLiteCommand(conn)
             cmd.CommandText = '''
                 select ZUSER_ID from ZUSERINFO
             '''
             reader = cmd.ExecuteReader()
             if reader.Read():
                 tb_id = unity_c37r.c_sharp_get_blob(reader, 0).decode(
                     'utf-8')  #cntaobaotb5057305_11
                 tb_id = re.search('cntaobao(.*)', tb_id,
                                   re.I | re.M).group(1)
                 self.message_dict[
                     tb_id] = unity_c37r.check_sqlite_maturity(
                         message_node, self.cache)
             cmd.Dispose()
             conn.Close()
Ejemplo n.º 2
0
 def generate_deal_bcp(self):
     conn = unity_c37r.create_connection(self.cache_db + '.IM')
     cmds  = sql.SQLiteCommand(conn)
     cmds.CommandText = '''
         select * from deal
     '''
     reader = cmds.ExecuteReader()
     res = dict()
     while reader.Read():
         deal = DealInfo()
         deal.set_value_with_idx(deal.colltection_target_id, self.colltection_target_id)
         deal.set_value_with_idx(deal.app_code, self.app_code)
         deal.set_value_with_idx(deal.deal_id, unity_c37r.c_sharp_get_string(reader, 0))
         try:
             deal.set_value_with_idx(deal.money, unity_c37r.c_sharp_get_real(reader, 2))
         except:
             deal.set_value_with_idx(deal.money, 0)
         deal.set_value_with_idx(deal.description, unity_c37r.c_sharp_get_string(reader, 3))
         t = unity_c37r.c_sharp_get_long(reader, 6)
         if t != 0:
             deal.set_value_with_idx(deal.time, t)
         pass
         unity_c37r.execute_query(self.cmd, TBL_BCP_INSERT_DEAL, deal.get_values())
         # status... not supported right now
         # type ... not suppoted right now
     reader.Close()
     cmds.Dispose()
     conn.Close()
Ejemplo n.º 3
0
 def __prepare_contact(self):
     im_conn = unity_c37r.create_connection(self.cache + '.IM')
     cmd = sql.SQLiteCommand(im_conn)
     cmd.CommandText = '''
         select account_id, nickname, photo from account
     '''
     reader = cmd.ExecuteReader()
     while reader.Read():
         o = O()
         o.uid = unity_c37r.c_sharp_get_string(reader, 0)
         o.nick = unity_c37r.c_sharp_get_string(reader, 1)
         o.photo = unity_c37r.c_sharp_get_string(reader, 2)
         self.contact[o.uid] = o
     reader.Close()
     #cmd.Dispose()
     cmd.CommandText = '''
         select friend_id, nickname, photo from friend
     '''
     reader = cmd.ExecuteReader()
     while reader.Read():
         o = O()
         o.uid = unity_c37r.c_sharp_get_string(reader, 0)
         o.nick = unity_c37r.c_sharp_get_string(reader, 1)
         o.photo = unity_c37r.c_sharp_get_string(reader, 2)
         if self.contact.__contains__(o.uid):
             continue
         self.contact[o.uid] = o
     reader.Close()
     cmd.Dispose()
     im_conn.Close()
Ejemplo n.º 4
0
 def get_models(self):
     models = list()
     conn = unity_c37r.create_connection(self.cache_db, True)
     cmd = sql.SQLiteCommand(conn)
     cmd.CommandText = '''
         select * from WA_MFORENSICS_120100
     '''
     reader = cmd.ExecuteReader()
     a = IMEAccount()
     while reader.Read():
         am = Common.User()
         am.ID.Value = unity_c37r.c_sharp_get_string(reader, a.account)
         am.Name.Value = unity_c37r.c_sharp_get_string(reader, a.nick)
         photo = unity_c37r.c_sharp_get_string(reader, a.photo)
         photo = unity_c37r.get_c_sharp_uri(photo)
         am.PhotoUris.Add(photo)
         # reserved gender
         sex = unity_c37r.c_sharp_get_string(reader, a.gender_code)
         models.append(am)
     reader.Close()
     cmd.CommandText = '''
         select * from WA_MFORENSICS_120200
     '''
     reader = cmd.ExecuteReader()
     b = IMEKeyword()
     while reader.Read():
         kw = InputMethod.WordFrequency()
         kw.KeyWord.Value = unity_c37r.c_sharp_get_string(
             reader, b.key_word)
         kw.Count.Value = unity_c37r.c_sharp_get_long(reader, b.times)
         models.append(kw)
     reader.Close()
     cmd.Dispose()
     conn.Close()
     return models
Ejemplo n.º 5
0
 def before_check(bcp_path, bcp_db):
     r_bcp_db = os.path.join(bcp_path, bcp_db)
     if not os.path.exists(r_bcp_db):
         return True
     try:
         conn = unity_c37r.create_connection(r_bcp_db)
         cmd = sql.SQLiteCommand(conn)
         cmd.CommandText = '''
             select * from tb_version where vkey = '{}'
         '''.format(EB_VERSION_KEY)
         reader = cmd.ExecuteReader()
         if reader.Read():
             value = unity_c37r.c_sharp_get_long(reader, 0)
             reader.Close()
             cmd.Dispose()
             conn.Close()
             if value != EB_VERSION_VALUE:
                 return True
             else:
                 return False
         else:
             reader.Close()
             cmd.Dispose()
             conn.Close()
             return True
     except:
         traceback.print_exc()
         reader.Close()
         cmd.Dispose()
         conn.Close()
         return False
Ejemplo n.º 6
0
 def parse_search(self, ac):
     db_node = self.node.GetByPath('Library/edge_compute.db')
     if db_node is None:
         return
     path = unity_c37r.check_sqlite_maturity(db_node, self.cache)
     conn = unity_c37r.create_connection(path)
     cmd = sql.SQLiteCommand(conn)
     cmd.CommandText = '''
         select args,create_time from usertrack where owner_id = {} and page_name = 'Page_SearchItemList'
     '''.format(ac.uid)
     reader = cmd.ExecuteReader()
     while reader.Read():
         if canceller.IsCancellationRequested:
             cmd.Dispose()
             conn.Close()
             self.im.db_close()
             raise IOError('E')
         s = model_im.Search()
         s.account_id = ac.uid
         m_str = unity_c37r.c_sharp_get_string(reader, 0)
         try:
             #s.key = re.search('keyword=(.*?),', m_str, re.I | re.M).group(1)
             match = re.search('keyword=(.*?),', m_str, re.I | re.M)
             if match is None:
                 continue
             s.key = match.group(1)
         except:
             self.log.m_err('error string:{}'.format(m_str))
             continue
         s.create_time = unity_c37r.c_sharp_get_long(reader, 1) / 1000
         self.im.db_insert_table_search(s)
     self.im.db_commit()
     cmd.Dispose()
     conn.Close()
Ejemplo n.º 7
0
 def generate_product_bcp(self):
     conn = unity_c37r.create_connection(self.cache_db)
     cmds = sql.SQLiteCommand(conn)
     cmds.CommandText = '''
         select * from tb_product
     '''
     reader = cmds.ExecuteReader()
     while reader.Read():
         pdt = ProductInfo()
         pdt.set_value_with_idx(pdt.app_code, self.app_code)
         pdt.set_value_with_idx(pdt.colltection_target_id, self.colltection_target_id)
         pdt.set_value_with_idx(pdt.account_id, unity_c37r.c_sharp_get_string(reader, 0))
         tp = unity_c37r.c_sharp_get_string(reader, 1)
         pdt.set_value_with_idx(pdt.source, '0%s' %tp)
         pdt.set_value_with_idx(pdt.product_id, unity_c37r.c_sharp_get_string(reader, 2))
         pdt.set_value_with_idx(pdt.product_name, unity_c37r.c_sharp_get_string(reader, 3))
         pdt.set_value_with_idx(pdt.price, unity_c37r.c_sharp_get_string(reader, 4))
         t = unity_c37r.c_sharp_get_long(reader, 5)
         if t is not 0:
             pdt.set_value_with_idx(pdt.create_time, t)
         pdt.set_value_with_idx(pdt.description, unity_c37r.c_sharp_get_string(reader, 6))
         pdt.set_value_with_idx(pdt.url, unity_c37r.c_sharp_get_string(reader, 7))
         pdt.set_value_with_idx(pdt.shop_id, unity_c37r.c_sharp_get_string(reader, 8))
         pdt.set_value_with_idx(pdt.delete_status, unity_c37r.c_sharp_get_long(reader, 9))
         unity_c37r.execute_query(self.cmd, TBL_BCP_INSERT_PRODUCT, pdt.get_values())
     reader.Close()
     cmds.Dispose()
     conn.Close()
Ejemplo n.º 8
0
 def __init__(self, cache_name):
     self.cache = cache_name
     self.im_cache = cache_name + '.IM'
     if not (os.path.exists(self.cache) and os.path.exists(self.im_cache)):
         raise IOError("File Losted!")
     self.ebc = unity_c37r.create_connection(self.cache)
     self.ccmd = sql.SQLiteCommand (self.ebc)
     self.contact = dict()
Ejemplo n.º 9
0
 def __init__(self, cache_db):
     self.conn = None
     self.cmd = None
     if not os.path.exists(cache_db):
         return
     if not os.path.exists(cache_db + ".IM"):
         return
     self.conn = unity_c37r.create_connection(cache_db)
     self.cmd = sql.SQLiteCommand(self.conn)
Ejemplo n.º 10
0
 def __generate_transfer(self):
     connection = unity_c37r.create_connection(self.cache_db)
     cmd = sql.SQLiteCommand(connection)
     cmd.CommandText = '''
         select * from tb_transfer
     '''
     fts = NDFileTransfer()
     reader = cmd.ExecuteReader()
     while reader.Read():
         t = NDBCPTRANSFER()
         t.set_value_with_idx(
             t.account_id,
             unity_c37r.c_sharp_get_string(reader, fts.account))
         t.set_value_with_idx(
             t.file_name,
             unity_c37r.c_sharp_get_string(reader, fts.file_name))
         t.set_value_with_idx(
             t.file_size,
             unity_c37r.c_sharp_get_long(reader, fts.file_size))
         t.set_value_with_idx(
             t.hash, unity_c37r.c_sharp_get_string(reader, fts.hash_code))
         t.set_value_with_idx(
             t.server_path,
             unity_c37r.c_sharp_get_string(reader, fts.server_path))
         t.set_value_with_idx(
             t.file_path,
             unity_c37r.c_sharp_get_string(reader, fts.local_path))
         t.set_value_with_idx(
             t.url, unity_c37r.c_sharp_get_string(reader, fts.url))
         t.set_value_with_idx(
             t.torrent,
             unity_c37r.c_sharp_get_string(reader, fts.torrent_name))
         t.set_value_with_idx(
             t.status, unity_c37r.c_sharp_get_long(reader, fts.status))
         t.set_value_with_idx(
             t.action_type,
             unity_c37r.c_sharp_get_long(reader, fts.is_download))
         t.set_value_with_idx(
             t.begin_time,
             unity_c37r.c_sharp_get_long(reader, fts.begin_time))
         t.set_value_with_idx(
             t.end_time, unity_c37r.c_sharp_get_long(reader, fts.end_time))
         t.set_value_with_idx(
             t.cached_size,
             unity_c37r.c_sharp_get_long(reader, fts.cached_size))
         t.set_value_with_idx(
             t.delete_status,
             unity_c37r.c_sharp_get_long(reader, fts.deleted))
         t.set_value_with_idx(t.collect_id, self.cid)
         t.set_value_with_idx(t.app_type, self.app_type)
         self.db_insert_transfer(t)
     self.db_commit()
     reader.Close()
     cmd.Dispose()
     connection.Close()
Ejemplo n.º 11
0
 def db_check(self, app_v):
     if not os.path.exists(self.cache) or not os.path.exists(self.cache + '.im'):
         self.need_parse = True
         return
     conns = unity_c37r.create_connection(self.cache)
     cmd = sql.SQLiteCommand(conns)
     try:
         eb_checked = False
         eb_app_checked = False
         cmd.CommandText = '''
             select version_value from tb_version where version_key = '{}' 
         '''.format(EB_VERSION_KEY)
         reader = None
         reader = cmd.ExecuteReader()
         if reader.Read():
             res = unity_c37r.c_sharp_get_long(reader, 0)
             if res == EB_VERSION_VALUE:
                 eb_checked = True
         cmd.Dispose()
         cmd.CommandText = '''
             select version_value from tb_version where version_key = '{}'
         '''.format(EB_APP_VERSION_KEY)
         reader = cmd.ExecuteReader()
         if reader.Read():
             res = unity_c37r.c_sharp_get_long(reader, 0)
             if res == app_v:
                 eb_app_checked = True
         cmd.Dispose()
         reader.Close()
         conns.Close()
         conns = None
         reader = None
         if not ( eb_checked and eb_app_checked):
             self.need_parse = True
         n_parse = self.im.need_parse(self.cache + '.im', EB_VERSION_VALUE)
         if n_parse:
             self.need_parse = True
             return
         self.need_parse = False
     except Exception as e:
         traceback.print_exc()
         if reader is not None:
             reader.Close()
         if conns is not None:
             cmd.Dispose()
             conns.Close()
         self.log.m_err('check db failed, please try again!')
         self.log.m_err(e.message)
         self.need_parse = True
         return
Ejemplo n.º 12
0
 def __init__(self, bcp_path, mount_path, cache_db, bcp_db,
              collect_target_id, contact_account_type):
     self.bcp_path = bcp_path
     self.db = bcp_db
     self.mnt = mount_path
     self.cache_db = cache_db
     self.cid = collect_target_id
     self.app_type = contact_account_type
     if os.path.exists(self.db):
         os.remove(self.db)
     self.conn = unity_c37r.create_connection(self.db, False)
     self.cmd = sql.SQLiteCommand(self.conn)
     self.transaciton = None
     self.create_tables()
Ejemplo n.º 13
0
 def generate_bcp_account(self):
     conn = unity_c37r.create_connection(self.cache_db + '.IM')
     cmds = sql.SQLiteCommand(conn)
     cmds.CommandText = '''
         select * from account
     '''
     reader = cmds.ExecuteReader()
     while reader.Read():
         a = AccountInfo()
         #a.colltection_target_id = self.colltection_target_id
         a.set_value_with_idx(a.colltection_target_id, self.colltection_target_id)
         a.set_value_with_idx(a.app_code, self.app_code)
         a.set_value_with_idx(a.account_id, unity_c37r.c_sharp_get_string(reader, 0))
         a.set_value_with_idx(a.nick, unity_c37r.c_sharp_get_string(reader, 1))
         a.set_value_with_idx(a.account, unity_c37r.c_sharp_get_string(reader, 2))
         a.set_value_with_idx(a.password, unity_c37r.c_sharp_get_string(reader, 3))
         pic = unity_c37r.c_sharp_get_string(reader, 4)
         pic = os.path.join(self.mnt, pic)
         if os.path.exists(pic):
             #a.set_value_with_idx(os.path.join(self.app_code, ))
             ppath,pname = os.path.split(pic)
             a.set_value_with_idx(a.photo, self.app_code + '/' + pname)
             pass # copy file...
         a.set_value_with_idx(a.telephone, unity_c37r.c_sharp_get_string(reader, 5))
         gender = unity_c37r.c_sharp_get_long(reader, 6)
         rg = '0'
         if gender == 0:
             rg = '0'
         elif gender == 1:
             rg = '1'
         elif gender == 2:
             rg = '2'
         elif gender == 9:
             rg = '9'
         a.set_value_with_idx(a.sex_code, rg)
         a.set_value_with_idx(a.age, unity_c37r.c_sharp_get_long(reader, 7))
         #a.set_value_with_idx(a.country_code, unity_c37r.c_sharp_get_string(reader, 8)) # NOT SUPPORT RIGHT NOW!!!!
         a.set_value_with_idx(a.city, unity_c37r.c_sharp_get_string(reader, 9))
         #a.set_value_with_idx(a.signature, unity_c37r.c_sharp_get_string(reader, ))
         a.set_value_with_idx(a.address, unity_c37r.c_sharp_get_string(reader, 12))
         a.set_value_with_idx(a.birth, unity_c37r.c_sharp_get_string(reader, 13))
         a.set_value_with_idx(a.signature, unity_c37r.c_sharp_get_string(reader, 14))
         d = unity_c37r.c_sharp_get_string(reader, 15)
         a.set_value_with_idx(a.signature, d)
         # not support delete time
         unity_c37r.execute_query(self.cmd, TBL_BCP_INSERT_ACCOUNT, a.get_values())
     self.db_commit()
     reader.Close()
     cmds.Dispose()
     conn.Close()
Ejemplo n.º 14
0
 def __init__(self, db_name, app_version=1):
     self.db_name = db_name
     self.need_parse = True
     self.conn = None
     self.cmd = None
     self.im = None
     if os.path.exists(self.db_name):
         self.need_parse = NetDisk.checkout(db_name, app_version)
     if self.need_parse:
         self.conn = unity_c37r.create_connection(db_name, False)
         self.cmd = sql.SQLiteCommand(self.conn)
         self.im = model_im.IM()
         self.im.db_create(db_name + '.IM')
         self.events = None
         self.create_tables()
Ejemplo n.º 15
0
 def __generate_account(self):
     connection = unity_c37r.create_connection(self.cache_db + ".IM", True)
     command = sql.SQLiteCommand(connection)
     command.CommandText = '''
         select * from account
     '''
     reader = command.ExecuteReader()
     while reader.Read():
         a = NDBCPACCOUNT()
         a.set_value_with_idx(a.account_id,
                              unity_c37r.c_sharp_get_string(reader, 0))
         a.set_value_with_idx(a.account, a.get_value_with_idx(a.account_id))
         a.set_value_with_idx(a.nick,
                              unity_c37r.c_sharp_get_string(reader, 1))
         a.set_value_with_idx(a.password,
                              unity_c37r.c_sharp_get_string(reader, 3))
         photo = unity_c37r.c_sharp_get_string(reader, 4)
         photo = os.path.join(self.mnt, photo)
         if os.path.exists(photo):
             pass  # ===>copy file fix that
         else:
             a.set_value_with_idx(a.photo, photo)
         a.set_value_with_idx(a.telephone,
                              unity_c37r.c_sharp_get_string(reader, 5))
         a.set_value_with_idx(a.email,
                              unity_c37r.c_sharp_get_string(reader, 6))
         gender = unity_c37r.c_sharp_get_long(reader, 7)
         gender = '0%d' % gender
         a.set_value_with_idx(a.gender, gender)
         a.set_value_with_idx(a.age, unity_c37r.c_sharp_get_long(reader, 8))
         a.set_value_with_idx(a.city,
                              unity_c37r.c_sharp_get_string(reader, 11))
         a.set_value_with_idx(a.address,
                              unity_c37r.c_sharp_get_string(reader, 12))
         a.set_value_with_idx(a.birthday,
                              unity_c37r.c_sharp_get_string(reader, 13))
         a.set_value_with_idx(a.signature,
                              unity_c37r.c_sharp_get_string(reader, 14))
         a.set_value_with_idx(a.delete_status,
                              unity_c37r.c_sharp_get_string(reader, 15))
         a.set_value_with_idx(a.collect_id, self.cid)
         a.set_value_with_idx(a.app_type, self.app_type)
         self.db_insert_account(a)
     self.db_commit()
     reader.Close()
     command.Dispose()
     connection.Close()
Ejemplo n.º 16
0
 def __handle_location(self, aid, f_k):
     f_sql_node = self.root_node.GetByPath(
         'Documents/{}/account/{}_Attachment.sqlite'.format(aid, aid))
     if f_sql_node is None:
         return None
     #db = sqlite3.connect(f_sql_node.PathWithMountPoint)
     db = unity_c37r.create_connection(f_sql_node.PathWithMountPoint)
     cmd = sql.SQLiteCommand(db)
     cmd.CommandText = '''
         select ZEXTENSION from ZATTACHMENTOBJECT where ZATT_ID = '{}'
     '''.format(f_k)
     reader = cmd.ExecuteReader()
     res = ''
     if reader.Read():
         res = unity_c37r.c_sharp_get_string(reader, 0)
     cmd.Dispose()
     db.Close()
     return res
Ejemplo n.º 17
0
 def __find_file(self, aid, f_k):
     f_sql_node = self.root_node.GetByPath(
         'Documents/{}/account/{}_ks3Resource.sqlite'.format(aid, aid))
     if f_sql_node is None:
         return ''
     db = unity_c37r.create_connection(f_sql_node.PathWithMountPoint)
     cmd = sql.SQLiteCommand(db)
     cmd.CommandText = '''
         select localPath from MLKS3ResourceObject where objectKey = '{}' 
     '''.format(f_k)
     reader = cmd.ExecuteReader()
     res = ''
     if reader.Read():
         res = os.path.join(
             self.root_node.AbsolutePath, 'Documents/{}/{}'.format(
                 aid, unity_c37r.c_sharp_get_string(reader, 0)))
     cmd.Dispose()
     db.Close()
     return res
Ejemplo n.º 18
0
 def __init__(self, cache_db, app_version):
     self.cache_db = cache_db
     self.conn = None
     self.cmd = None
     self.transaction = None
     res = 0x0
     res |= 0x1 if unity_c37r.CheckVersion(self.cache_db, IME_DB_KEY,
                                           IME_DB_VAL) else 0
     res |= 0x2 if unity_c37r.CheckVersion(self.cache_db, IME_APP_KEY,
                                           app_version) else 0
     self.need_parse = True
     if res != 0x3:
         self.need_parse = True
     else:
         self.need_parse = False
         return
     if os.path.exists(self.cache_db):
         os.remove(self.cache_db)
     self.conn = unity_c37r.create_connection(self.cache_db, False)
     self.cmd = sql.SQLiteCommand(self.conn)
     self.create_tables()
Ejemplo n.º 19
0
 def __init__(self, bcp_path, mount_path, cache_db, bcp_db, collect_target_id, contact_account_type):
     res = EBBCP.before_check(bcp_path, bcp_db)
     self.need_generate = True
     if res is True:
         if os.path.exists(os.path.join(bcp_path, bcp_db)):
             os.remove(os.path.join(bcp_path, bcp_db))
     else:
         self.need_generate = False
     self.bcp_path = bcp_path
     self.cache_db = cache_db
     self.db = unity_c37r.create_connection(os.path.join(bcp_path, bcp_db), False)
     self.cache_path = os.path.join(bcp_path, contact_account_type)
     if not os.path.exists(self.cache_path):
         os.mkdir(self.cache_path)
     self.cmd = sql.SQLiteCommand(self.db)
     self.event = None
     self.colltection_target_id = collect_target_id
     self.app_code = contact_account_type
     self.mnt = mount_path
     if self.need_generate:
         self.create_tables()
         self.begin_event()
Ejemplo n.º 20
0
 def checkout(db_name, app_version):
     res = 0x0
     try:
         conn = unity_c37r.create_connection(db_name)
         cmd = sql.SQLiteCommand(conn)
         cmd.CommandText = '''
             select * from tbl_version where v_key = '{}'
         '''.format(NDDBVersionKey)
         reader = cmd.ExecuteReader()
         if reader.Read():
             v = unity_c37r.c_sharp_get_long(reader, 1)
             if v == NDDBVersionValue:
                 res |= 0x1
         reader.Close()
         cmd.CommandText = '''
             select * from tbl_version where v_key = '{}'
         '''.format(NDDBApplicationVersionKey)
         reader = cmd.ExecuteReader()
         if reader.Read():
             v = unity_c37r.c_sharp_get_long(reader, 1)
             if v == app_version:
                 res |= 0x2
         reader.Close()
         r = model_im.IM.need_parse(db_name + '.IM', NDDBVersionValue)
         if not r:
             res |= 0x4
         cmd.Dispose()
         conn.Close()
     except:
         conn.Close()
         res = 0x0
     if res != 0x7:
         try:
             os.remove(db_name)
             os.remove(db_name + '.IM')
             return True
         except:
             raise IOError("中间数据库被占用,无法继续分析")
     return False
Ejemplo n.º 21
0
 def generate_shop_bcp(self):
     conn = unity_c37r.create_connection(self.cache_db)
     cmds = sql.SQLiteCommand(conn)
     cmds.CommandText = '''
         select * from tb_shop
     '''
     reader = cmds.ExecuteReader()
     while reader.Read():
         s = ShopInfo()
         s.set_value_with_idx(s.colltection_target_id, self.colltection_target_id)
         s.set_value_with_idx(s.app_code, self.app_code)
         s.set_value_with_idx(s.account_id, unity_c37r.c_sharp_get_string(reader, 0))
         s.set_value_with_idx(s.shop_id, unity_c37r.c_sharp_get_string(reader, 1))
         s.set_value_with_idx(s.shop_name, unity_c37r.c_sharp_get_string(reader, 2))
         s.set_value_with_idx(s.boss_id, unity_c37r.c_sharp_get_string(reader, 3))
         s.set_value_with_idx(s.boss_account, unity_c37r.c_sharp_get_string(reader, 4))
         s.set_value_with_idx(s.boss_nick, unity_c37r.c_sharp_get_string(reader, 5))
         s.set_value_with_idx(s.delete_status, unity_c37r.c_sharp_get_long(reader, 6))
         unity_c37r.execute_query(self.cmd, TBL_BCP_INSERT_SHOP, s.get_values())
     reader.Close()
     cmds.Dispose()
     conn.Close()
Ejemplo n.º 22
0
 def __parse_message(self, a_node, aid):
     f_message_node = a_node.GetByPath('/{}_Message.sqlite'.format(aid))
     db = unity_c37r.create_connection(f_message_node.PathWithMountPoint)
     cmd = sql.SQLiteCommand(db)
     cmd.CommandText = '''
         select ZLOCAL_ID, ZBODY_TYPE, ZTIMESTAMP, ZBODY, ZEXT_ID, ZMSG_SENDER, ZMSG_TO, ZMSG_XML from ZMESSAGEV5OBJECT
     '''
     try:
         reader = None
         reader = cmd.ExecuteReader()
     except:  #因为此处会出现错误,故暂时在出异常时,把文件移到Cache里面(Md5)
         if reader is not None:
             reader.Close()
         cmd.Dispose()
         db.Close()
         dst_file = self.cache + "/" + unity_c37r.md5(
             f_message_node.PathWithMountPoint)
         unity_c37r.mapping_file_with_copy(
             f_message_node.PathWithMountPoint, dst_file)
         db = unity_c37r.create_connection(dst_file)
         cmd = sql.SQLiteCommand(db)
         cmd.CommandText = '''
             select ZLOCAL_ID, ZBODY_TYPE, ZTIMESTAMP, ZBODY, ZEXT_ID, ZMSG_SENDER, ZMSG_TO, ZMSG_XML from ZMESSAGEV5OBJECT
         '''
         reader = cmd.ExecuteReader()  # 如果再出错误,这个案例就有问题了
     while reader.Read():
         if canceller.IsCancellationRequested:
             self.im.db_close()
             raise IOError("E")
         m = model_im.Message()
         m.talker_type = model_im.CHAT_TYPE_FRIEND
         m.account_id = aid
         target_id = unity_c37r.c_sharp_get_string(reader, 5)
         m.is_sender = 1 if str(target_id) == aid else 0
         m.deleted = 0
         m.msg_id = unity_c37r.c_sharp_get_long(reader, 0)
         m.send_time = int(
             unity_c37r.c_sharp_get_real(reader, 2) * 1000) / 1000
         m.source = f_message_node.AbsolutePath
         m.sender_id = unity_c37r.c_sharp_get_string(reader, 5)
         if m.is_sender == 1:
             tid = unity_c37r.c_sharp_get_string(reader, 6)
             m.talker_id = tid.split('@')[0]
         else:
             m.talker_id = unity_c37r.c_sharp_get_string(reader, 5)
         #def __process_message(self, content, xml, aid, m_type, ext_id):
         p1 = unity_c37r.c_sharp_get_string(reader, 3)
         p2 = unity_c37r.c_sharp_get_string(reader, 7)
         tp = unity_c37r.c_sharp_get_long(reader, 1)
         p3 = unity_c37r.c_sharp_get_string(reader, 4)
         s_msg = self.__process_message(p1, p2, aid, tp, p3)
         m.content = s_msg.content
         m.media_path = s_msg.media_path
         m.type = s_msg.media_type
         try:
             self.im.db_insert_table_message(m)
         except:
             print('f****d!')
     cmd.Dispose()
     db.Close()
     self.im.db_commit()
     g_message_node = self.root_node.GetByPath(
         'Documents/{}/account/{}_MUC.sqlite'.format(aid, aid))
     if g_message_node is None:
         reader = None
     else:
         db = unity_c37r.create_connection(
             g_message_node.PathWithMountPoint)
         cmd = sql.SQLiteCommand(db)
         cmd.CommandText = '''
             select ZBODY_TYPE, ZMSG_ID, ZSEND_TIME, ZBODY, ZSENDER_ID, ZMSG_TO, ZMSG_XML, ZEXT_ID from ZMUCMESSAGEOBJECT
         '''
         reader = cmd.ExecuteReader()
     while reader is not None and reader.Read():
         if canceller.IsCancellationRequested:
             self.im.db_close()
             raise IOError("E")
         m = model_im.Message()
         m.talker_type = model_im.CHAT_TYPE_GROUP
         m.msg_id = unity_c37r.c_sharp_get_string(reader, 1)
         m.account_id = aid
         sender_id = unity_c37r.c_sharp_get_string(reader, 4)
         m.sender_id = sender_id if sender_id is not 0 or unity_c37r.c_sharp_get_string(
             reader, 4) != '' else -1000  # -1000 means system...
         m.is_sender = 1 if str(m.sender_id) == aid else 0
         m.send_time = unity_c37r.c_sharp_get_long(reader, 2) / 1000
         m.source = g_message_node.AbsolutePath
         m.deleted = 0
         tp = unity_c37r.c_sharp_get_long(reader, 0)
         xml = unity_c37r.c_sharp_get_string(reader, 6)
         ext_id = unity_c37r.c_sharp_get_string(reader, 7)
         if tp == 0 or tp == 3:
             m.content = unity_c37r.c_sharp_get_string(reader, 3)
             m.type = model_im.MESSAGE_CONTENT_TYPE_TEXT if m.sender_id != -1000 else model_im.MESSAGE_CONTENT_TYPE_SYSTEM
         elif xml is not None and ext_id is None:
             if tp == 1:
                 r = os.path.exists(
                     os.path.join(self.root_node.PathWithMountPoint,
                                  'Documents/image/%s' % ext_id))
                 if r:
                     m.media_path = os.path.join(
                         self.root_node.AbsolutePath,
                         'Documents/image/%s' % ext_id)
                     m.type = model_im.MESSAGE_CONTENT_TYPE_IMAGE
                 elif os.path.exists(
                         os.path.join(self.root_node.PathWithMountPoint,
                                      'Documents/image/th_%s' % ext_id)):
                     m.media_path = os.path.join(
                         self.root_node.AbsolutePath,
                         'Documents/image/th_%s' % ext_id)
                     m.type = model_im.MESSAGE_CONTENT_TYPE_IMAGE
                 else:
                     m.content = 'image message not cached'
                     m.type = model_im.MESSAGE_CONTENT_TYPE_TEXT
             elif tp == 6:
                 r = self.__handle_location(aid, ext_id)
                 if r == '':
                     m.content = 'location message not cached'
                     m.type = model_im.MESSAGE_CONTENT_TYPE_TEXT
                 r = r.split(';')
                 m.location_name = r[0]
                 m.location_lat = r[1]
                 m.location_lng = r[2]
                 m.type = model_im.MESSAGE_CONTENT_TYPE_LOCATION
         else:
             p1 = unity_c37r.c_sharp_get_string(reader, 3)
             p2 = unity_c37r.c_sharp_get_string(reader, 6)
             ext_id = unity_c37r.c_sharp_get_string(reader, 7)
             s_msg = self.__process_message(p1, p2, aid, tp, ext_id)
             m.media_path = s_msg.media_path
             m.type = s_msg.media_type
         self.im.db_insert_table_message(m)
     if reader is not None:
         cmd.Dispose()
         db.Close()
     self.im.db_commit()
Ejemplo n.º 23
0
    def analyse_account(self, aid):
        account_node = self.root_node.GetByPath(
            '/Documents/{}/account'.format(aid))
        ##########################Friends#####################################
        f_sql_node = account_node.GetByPath('/{}_Relation2.sqlite'.format(aid))
        db = unity_c37r.create_connection(f_sql_node.PathWithMountPoint)
        cmd = sql.SQLiteCommand(db)
        friends = list()
        cmd.CommandText = '''
            select miliaoid, name, comments, icon, type, timestamp from MLRelation2Object 
        '''
        reader = cmd.ExecuteReader()
        while reader.Read():
            if canceller.IsCancellationRequested:
                self.im.db_close()
                raise IOError("E")
            f = model_im.Friend()
            f.account_id = aid
            f.friend_id = unity_c37r.c_sharp_get_string(reader, 0)
            f.deleted = 0
            f.nickname = unity_c37r.c_sharp_get_string(reader, 1)
            f.remark = unity_c37r.c_sharp_get_string(reader, 2)
            pic = unity_c37r.c_sharp_get_string(reader, 3)
            f.icon = self.__get_media_path(pic, -1)
            f.source = f_sql_node.AbsolutePath
            f.type = model_im.FRIEND_TYPE_FRIEND
            friends.append(f)
        cmd.Dispose()
        db.Close()

        f_info_node = account_node.GetByPath(
            '/{}_PersonalInfo2.sqlite'.format(aid))
        db = unity_c37r.create_connection(f_info_node.PathWithMountPoint)
        cmd = sql.SQLiteCommand(db)
        for f in friends:
            cmd.CommandText = '''
                select info from MLPersonalInfo2Object where miliaoid = '{}'
            '''.format(f.friend_id)
            reader = cmd.ExecuteReader()
            if not reader.Read():
                cmd.Dispose()
                continue
            jstring = unity_c37r.c_sharp_get_string(reader, 0)
            r = json.loads(jstring, encoding='utf-8')
            f.address = r.get('city')
            if r.get('sex') == u'男':
                f.gender = 0
            elif r.get('sex') == u'女':
                f.gender = 1
            else:
                f.gender = 9
            f.photo = self.__get_media_path(r.get('icon'), -1)
            f.signature = r.get('signature')
            self.im.db_insert_table_friend(f)
            cmd.Dispose()
        self.im.db_commit()
        cmd.CommandText = '''
            select info from MLPersonalInfo2Object where miliaoid = {} 
        '''.format(aid)
        reader = cmd.ExecuteReader()
        if not reader.Read():
            module_print('no account record in the db, skipped', 1)
        else:
            a = model_im.Account()
            a.account_id = aid
            jstring = unity_c37r.c_sharp_get_string(reader, 0)
            r = json.loads(jstring)
            a.nickname = r.get('nickname')
            a.address = r.get('city')
            a.birthdat = r.get('birthday')
            a.source = f_info_node.PathWithMountPoint
            a.signature = r.get('signature')
            icon_url = r.get('icon')
            a.photo = self.__get_media_path(icon_url, -1)
            a.source = f_info_node.AbsolutePath
            self.im.db_insert_table_account(a)
        ##########################Groups#####################################
        cmd.Dispose()
        db.Close()

        grp_sql_node = account_node.GetByPath('/{}_MUC2.sqlite'.format(aid))
        if grp_sql_node is not None:
            db = unity_c37r.create_connection(grp_sql_node.PathWithMountPoint)
            cmd = sql.SQLiteCommand(db)
            cmd.CommandText = '''
            select creator_id, creator_name, group_id, group_name, create_time, group_member_limit, group_icon
            from MLMUC2Object
            '''
            reader = cmd.ExecuteReader()
        else:
            reader = None
        grp = dict()
        while reader is not None and reader.Read():
            if canceller.IsCancellationRequested:
                self.im.db_close()
                raise IOError("E")
            g = model_im.Chatroom()
            g.account_id = aid
            g.chatroom_id = unity_c37r.c_sharp_get_string(reader, 2)
            g.creator_id = unity_c37r.c_sharp_get_string(reader, 0)
            g.create_time = unity_c37r.c_sharp_get_long(reader, 4)
            g.owner_id = g.creator_id
            g.name = unity_c37r.c_sharp_get_string(reader, 3)
            g.max_member_count = unity_c37r.c_sharp_get_long(reader, 5)
            g.deleted = 0
            g.source = grp_sql_node.AbsolutePath
            g.member_count = 0
            pic = unity_c37r.c_sharp_get_string(reader, 6)
            if pic is None:
                pic = ""
            res = re.search('\\[(.*)\\]', pic, re.I | re.M)
            if res is not None:
                g.photo = self.__get_media_path(
                    json.loads(res.group(1)).get('url'),
                    -1) if res.group(1) is not "" else None
            grp[g.chatroom_id] = g
        if reader is not None:
            cmd.Dispose()
            db.Close()
        grp_mem_node = account_node.GetByPath(
            '/{}_mucMember2.sqlite'.format(aid))
        if grp_mem_node is not None:
            #db = sqlite3.connect(grp_mem_node.PathWithMountPoint)
            db = unity_c37r.create_connection(grp_mem_node.PathWithMountPoint)
            #cur = db.cursor()
            cmd = sql.SQLiteCommand(db)
            cmd.CommandText = '''
                select group_id, member_gender, member_icon, member_id, member_nick, join_time, last_send_msg, member_uptodate
                from MLMUCMember2Object           
            '''
            reader = cmd.ExecuteReader()
        else:
            reader = None
        while reader is not None and reader.Read():
            if canceller.IsCancellationRequested:
                self.im.db_close()
                raise IOError("E")
            gid = unity_c37r.c_sharp_get_string(reader, 0)
            if grp.__contains__(gid):
                grp[gid].member_count += 1
            m = model_im.ChatroomMember()
            m.account_id = aid
            m.member_id = unity_c37r.c_sharp_get_string(reader, 3)
            m.display_name = unity_c37r.c_sharp_get_string(reader, 4)
            # fix it later
            #m.photo = md5()
            pic = unity_c37r.c_sharp_get_string(reader, 2)
            m.photo = self.__get_media_path(pic, -1) if pic is not "" else None
            m.source = grp_mem_node.AbsolutePath
            m.chatroom_id = unity_c37r.c_sharp_get_string(reader, 0)
            #m.gender =  # fix it later...
            m.gender = 9
            m.deleted = 0
            self.im.db_insert_table_chatroom_member(m)
        if reader is not None:
            cmd.Dispose()
            db.Close()
        for k in grp:
            self.im.db_insert_table_chatroom(grp[k])
        self.im.db_commit()
        self.__parse_message(account_node, aid)
Ejemplo n.º 24
0
    def parse(self, ac):
        #ac = TbAccount()
        self.parse_avfs(ac)
        db_node = self.node.GetByPath('Library/Caches/amps3_{}.db'.format(
            ac.uid))
        if db_node is None:
            self.log.m_print('get db node failed, parse exists!')
            return
        #path = db_node.PathWithMountPoint
        #update sqlite-checking.
        path = unity_c37r.check_sqlite_maturity(db_node, self.cache)
        conn = unity_c37r.create_connection(path)
        cmd = sql.SQLiteCommand(conn)
        cmd.CommandText = '''
            select ZDISPLAYNAME, ZHEADPIC, ZMOBILEPHONE, ZNICK from ZAMPUSER where ZTAOBAOID = {}
        '''.format(ac.uid)
        reader = cmd.ExecuteReader()
        image_cache_path = os.path.join(
            self.node.PathWithMountPoint,
            'Library/Caches/YWDiskCache/ImageCache')
        if reader.Read():
            a = model_im.Account()
            a.account_id = ac.uid
            a.nickname = unity_c37r.c_sharp_get_string(reader, 3)
            a.username = unity_c37r.c_sharp_get_string(reader, 0)
            ac.tb_id = a.username
            a.telephone = unity_c37r.c_sharp_get_string(reader, 2)
            pic = unity_c37r.c_sharp_get_string(reader, 1)
            hash_code = unity_c37r.md5(pic)
            if os.path.exists(os.path.join(image_cache_path, hash_code)):
                a.photo = 'Library/Cache/YWDiskCache/YWDiskCache/ImageCache/{}'.format(
                    hash_code)
            else:
                a.photo = pic
            self.im.db_insert_table_account(a)
        cmd.Dispose()
        cmd.CommandText = '''
           select ZDISPLAYNAME, ZHEADPIC, ZMOBILEPHONE, ZNICK, ZTAOBAOID, ZSIGNATURE from ZAMPUSER where ZTAOBAOID != {}
        '''.format(ac.uid)
        reader = cmd.ExecuteReader()
        f_dict = dict()
        while reader.Read():
            if canceller.IsCancellationRequested:
                cmd.Dispose()
                conn.Close()
                self.im.db_close()
                raise IOError('E')
            f = model_im.Friend()
            f.account_id = ac.uid  # Fix error
            try:
                f.friend_id = int(unity_c37r.c_sharp_get_string(reader, 4))
            except Exception as e:
                self.log.m_err('error account id: %s' %
                               unity_c37r.c_sharp_get_string(reader, 4))
                f.friend_id = random.randint(0, 0xffffffff)  # 产生假ID
            f.nickname = unity_c37r.c_sharp_get_string(reader, 3)
            f.remark = unity_c37r.c_sharp_get_string(reader, 0)
            f.telephone = unity_c37r.c_sharp_get_string(reader, 2)
            f.signature = unity_c37r.c_sharp_get_string(reader, 5)
            pic = unity_c37r.c_sharp_get_string(reader, 1)
            hash_code = unity_c37r.md5(pic)
            if os.path.exists(os.path.join(image_cache_path, hash_code)):
                f.photo = 'Library/Cache/YWDiskCache/ImageCache/{}'.format(
                    hash_code)
            else:
                f.photo = pic
            f_dict[f.remark] = f
        cmd.Dispose()
        conn.Close()
        conn = None
        cmd = None
        # 用户行为分析 可以说很详细了
        if ac.tb_id is None:
            reader = None
        else:
            log_node = self.node.GetByPath(
                'Library/Caches/StructuredLogs/cntaobao{}.db'.format(ac.tb_id))
            if log_node is None:
                reader = None
            else:
                #update sqlite connection
                pth = unity_c37r.check_sqlite_maturity(log_node, self.cache)
                conn = unity_c37r.create_connection(pth)
                cmd = sql.SQLiteCommand(conn)
                cmd.CommandText = '''
                    select id, operation_id, record, logtime, result from Record
                '''
                reader = cmd.ExecuteReader()
        while reader is not None and reader.Read():
            if canceller.IsCancellationRequested:
                cmd.Dispose()
                conn.Close()
                raise IOError('E')
            try:
                logs = model_eb.EBLog()
                m_str = unity_c37r.c_sharp_get_string(reader, 1)
                m_sl = m_str.split('|')
                sender = m_sl[1]
                reciever = m_sl[2]
                if reciever == 'wwLogin':
                    sender = re.search(r'\(null\)(.*)', sender,
                                       re.I | re.M).group(1)
                    desc = '''{} try to login'''.format(sender)
                    logs.set_value_with_idx(logs.description, desc)
                else:
                    sender = re.search('cnhhupan(.*)', sender,
                                       re.I | re.M).group(1)
                    reciever = re.search('cnhhupan(.*)', reciever,
                                         re.I | re.M).group(1)
                    desc = '''{} try to send message to {}'''.format(
                        sender, reciever)
                    logs.set_value_with_idx(logs.description, desc)
                m_str = unity_c37r.c_sharp_get_string(reader, 2)
                js = json.loads(m_str)
                content = js.get('title')
                logs.set_value_with_idx(logs.content, content)
                log_time = unity_c37r.c_sharp_get_long(reader, 3) / 1000
                logs.set_value_with_idx(logs.time, log_time)
                result = unity_c37r.c_sharp_get_long(reader, 4)
                logs.set_value_with_idx(logs.result, result)
                self.eb.db_insert_table_log(logs.get_value())
            except Exception as e:
                traceback.print_exc()
                self.log.m_print(e)
                self.log.m_err('detect wrong string format: {}'.format(m_str))
        if conn is not None:
            cmd.Dispose()
            conn.Close()
            cmd = None
            conn = None
        #l = unity_c37r.search_for_certain(self.node, 'Library/Caches/YWDB/WXOPENIMSDKDB(.*)/message.db$')
        u = self.message_dict.get(ac.tb_id)
        if u is None:
            self.log.m_print('no %s chat info!' % ac.tb_id)
            return

        conn = unity_c37r.create_connection(u)
        cmd = sql.SQLiteCommand(conn)
        cmd.CommandText = '''
            select ZDISPLAYNAME, ZEMAIL, ZGENDER, ZTBNICK, ZPHONE_NUM from ZWWPERSON
        '''
        reader = cmd.ExecuteReader()
        while reader.Read():
            if canceller.IsCancellationRequested:
                cmd.Dispose()
                conn.Close()
                self.im.db_close()
                raise IOError('e')
            user_name = unity_c37r.c_sharp_get_string(reader, 0)
            if f_dict.__contains__(user_name):
                pass
            else:
                f = model_im.Friend()
                f.account_id = ac.uid
                f.nickname = unity_c37r.c_sharp_get_string(reader, 3)
                f.remark = unity_c37r.c_sharp_get_string(reader, 0)
                f.friend_id = random.randint(0, 0xffffffff)  # 产生假ID
                f_dict[f.remark] = f

        for k in f_dict:
            self.im.db_insert_table_friend(f_dict[k])

        cmd.Dispose()
        cmd.CommandText = '''
            select ZMESSAGEID, ZTYPE, ZTIME, ZCONTENT, ZRECEIVERID, ZSENDERID from ZWWMESSAGE
        '''
        reader = cmd.ExecuteReader()
        # 最好将talker_name之类的设置全面,因为淘宝的id管理比较混乱。
        # 原则上淘宝账号、支付宝账号、闲鱼账号、天猫账号、阿里巴巴账号等通用,但是实际上他们在进行管理时
        # 各自采用不同的ID管理方式。导致这边筛选很尴尬
        idx = 0
        while reader.Read():
            if canceller.IsCancellationRequested:
                cmd.Dispose()
                conn.Close()
                self.im.db_close()
                raise IOError('e')
            m = model_im.Message()
            m.account_id = ac.uid
            sender = unity_c37r.c_sharp_get_blob(reader, 5).decode(
                'utf-8'
            )  #struct.unpack('i', unity_c37r.c_sharp_get_blob(reader, 5))
            reciever = unity_c37r.c_sharp_get_blob(reader, 4).decode(
                'utf-8'
            )  #struct.unpack('i', unity_c37r.c_sharp_get_blob(reader, 4))
            try:
                sender = re.search("cnhhupan(.*)", sender,
                                   re.I | re.M).group(1)
                reciever = re.search("cnhhupan(.*)", reciever,
                                     re.I | re.M).group(1)
            except:
                try:
                    if sender.__contains__('alichn'):
                        sender = re.search('cnalichn(.*)', sender,
                                           re.I | re.M).group(1)
                    else:
                        reciever = re.search('cnalichn(.*)', reciever,
                                             re.I | re.M).group(1)
                except:
                    self.log.m_print("sender:{} rec:{}".format(
                        sender, reciever))
            if sender.__contains__(':'):
                sender = sender.split(':')[0]
            if reciever.__contains__(':'):
                reciever = reciever.split(':')[0]
            if sender == ac.tb_id:
                m.is_sender = 1
                if not f_dict.__contains__(reciever):
                    self.log.m_print("no such reciever friend:%s" % reciever)
                    continue
                m.talker_id = f_dict[reciever].friend_id
                m.sender_id = ac.uid
            elif f_dict.__contains__(sender):
                m.is_sender = 0
                m.talker_id = f_dict[sender].friend_id
                m.sender_id = f_dict[sender].friend_id
            elif f_dict.__contains__(sender):  #类似于hqxuelang:服务助手 这种有时候就不在表中
                m.is_sender = 0
                m.talker_id = f_dict[sender].friend_id
                m.sender_id = f_dict[sender].friend_id
            else:
                self.log.m_print('find unchecked friend:%s' % sender)
                f = self.create_fake_friend(ac, sender)
                f_dict[sender] = f
                m.talker_id = f_dict[sender].friend_id
                m.sender_id = f_dict[sender].friend_id
            m.msg_id = unity_c37r.c_sharp_get_long(reader, 0)
            tp = unity_c37r.c_sharp_get_long(reader, 1)
            tm = unity_c37r.c_sharp_try_get_time(reader, 2)
            m.send_time = unity_c37r.format_mac_timestamp(tm)
            m_str = unity_c37r.c_sharp_get_blob(reader, 3)
            if m_str is not None:
                m_str = m_str.decode('utf-8')
            else:
                self.log.m_print('find useless data, skipped!')
                m_str = ''
            if tp == 0 or tp == 5:
                m.content = m_str
                m.type = model_im.MESSAGE_CONTENT_TYPE_TEXT
            elif tp == 1:
                m.content = m_str
                m.media_path = m_str
                m.type = model_im.MESSAGE_CONTENT_TYPE_IMAGE
            elif tp == 2:
                m.content = m_str
                m.media_path = m_str
                m.type = model_im.MESSAGE_CONTENT_TYPE_VOICE
            elif tp == 8:
                m.content = 'empty message'
                m.type = model_im.MESSAGE_CONTENT_TYPE_TEXT
            elif tp == 65:
                try:
                    js = json.loads(m_str)
                    # 这里有子类型号
                    # 实际上是属于千牛发送的自动排列的消息内容
                    sub_tp = js.get('template').get('id')
                    sub_string = js.get('template').get('data').get('text')
                    # f = open('D:/webs/{}.xml'.format(random.randint(0, 0xffffffff)), 'w+')
                    # if sub_string is not None:
                    #     f.write(sub_string)
                    # f.close()
                    if sub_tp == 20002:
                        m.type = model_im.MESSAGE_CONTENT_TYPE_ATTACHMENT
                        deal = model_im.Deal()
                        trade = model_eb.EBDeal()
                        alter_string = js.get('header').get('degrade').get(
                            'alternative')
                        if alter_string.__contains__(':'):
                            deal.deal_id = alter_string.split(':')[1]
                        m.extra_id = deal.deal_id
                        deal.description = '''title:{}\ncontent:{}'''.format(
                            js.get('header').get('title'),
                            js.get('header').get('degrade').get('alternative'))
                        trade.set_value_with_idx(trade.desc, deal.description)
                        deal.type = model_im.DEAL_TYPE_RECEIPT  # may fix it later
                        trade.set_value_with_idx(trade.deal_type,
                                                 model_eb.TRADE_PAY)
                        #trade.set_value_with_idx(trade.status, model_eb.EBDEAL)
                        self.im.db_insert_table_deal(deal)
                        self.eb.db_insert_table_deal(trade.get_value())
                    elif sub_tp == 20013:  # 快速入口
                        m.type = model_im.MESSAGE_CONTENT_TYPE_TEXT
                        label_list = js.get('template').get('data').get(
                            'alist')
                        content = ''
                        for l in label_list:
                            content += '%s\n' % l.get('label')
                        m.content = content
                    elif sub_tp is None:
                        m.type = model_im.MESSAGE_CONTENT_TYPE_TEXT
                        m.content = '''title:{}\ncontent:{}'''.format(
                            js.get('header').get('title'),
                            js.get('degrade').get('alternative'))
                except Exception as e:
                    self.log.m_err(
                        'detect wrong message content:{}\nidx:{}'.format(
                            m_str, idx))
                    m.type = model_im.MESSAGE_CONTENT_TYPE_TEXT
                    m.content = u'解析失败,原始内容:' + m_str
            elif tp == 112:
                js = json.loads(m_str)
                m.type = model_im.MESSAGE_CONTENT_TYPE_TEXT
                m.content = js.get('title')
            elif tp == 113:
                js = json.loads(m_str)
                m.type = model_im.MESSAGE_CONTENT_TYPE_TEXT
                m.content = '''file message name:{}, size:{}'''.format(
                    js.get('nodeName'), js.get('nodeSize'))
            elif tp == 241:
                js = json.loads(m_str)
                js = json.loads(js.get('datas'))
                m.type = model_im.MESSAGE_CONTENT_TYPE_TEXT
                m.content = '''[product info]name:{}\nprice:{}\nsales:{}\npic:{}'''.format(
                    js.get('name'), js.get('priceAsString'),
                    js.get('salesCount'), js.get('picUrl'))
            else:
                self.log.m_print('detect unspport type:{}, index:{}'.format(
                    tp, idx))
                self.log.m_print('raw string: %s' % m_str)
                m.type = model_im.MESSAGE_CONTENT_TYPE_TEXT
                m.content = '''[unsupport type message] raw string:%s''' % m_str
            self.im.db_insert_table_message(m)
            idx += 1
        self.im.db_commit()
Ejemplo n.º 25
0
 def parse_shop_cart(self):
     node = self.node.GetByPath('Documents/AVFSStorage/carts/avfs.sqlite')
     if node is None:
         self.log.m_print('no shop carts item cached...')
         return
     path = unity_c37r.check_sqlite_maturity(node, self.cache)
     conn = unity_c37r.create_connection(path)
     cmd = sql.SQLiteCommand(conn)
     cmd.CommandText = '''
         select filename from AVFS_FIlE_INDEX_TABLE
     '''
     reader = cmd.ExecuteReader()
     r = list()
     while reader.Read():
         r.append(unity_c37r.c_sharp_get_string(reader, 0))
     cmd.Dispose()
     reader.Close()
     conn.Close()
     for f in r:
         f_node = self.node.GetByPath(
             'Documents/AVFSStorage/carts/files/%s' % f)
         abs_path = f_node.AbsolutePath
         if f_node is None:
             continue
         try:
             m_node = BPReader.GetTree(f_node)
             m_str = unity_c37r.get_btree_node_str(m_node, "body", '')
             js = json.loads(m_str)
             obj = js.get('data').get('data')
             for k in obj.keys():
                 grp = re.search('itemv2_', k, re.I | re.M)
                 if grp is not None:
                     itm = obj.get(k)
                     p = model_eb.EBProduct()
                     itm = itm.get('fields')
                     p.set_value_with_idx(p.account_id, self.master_account)
                     p.set_value_with_idx(p.url, itm.get('pic'))
                     p.set_value_with_idx(p.product_id, itm.get('itemId'))
                     p.set_value_with_idx(p.product_name, itm.get('title'))
                     p.set_value_with_idx(p.shop_id, itm.get('shopId'))
                     p.set_value_with_idx(p.source,
                                          model_eb.EB_PRODUCT_SHOPCART)
                     p.set_value_with_idx(p.source_file, abs_path)
                     its = itm.get('pay')
                     if its is None:
                         continue
                     money_str = itm.get('pay').get('nowTitle')
                     grp = re.search(u'¥(.*)', money_str, re.I | re.M)
                     p.set_value_with_idx(p.price, float(grp.group(1)))
                     self.eb.db_insert_table_product(p.get_value())
                     continue
                 grp = re.search('shopv2_', k, re.I | re.M)
                 if grp is not None:
                     shop = model_eb.EBShop()
                     itm = obj.get(k)
                     shop.set_value_with_idx(shop.account_id,
                                             self.master_account)
                     shop.set_value_with_idx(shop.shop_id, itm.get('id'))
                     shop.set_value_with_idx(shop.shop_name,
                                             itm.get('fields').get('title'))
                     shop.set_value_with_idx(
                         shop.boss_id,
                         itm.get('fields').get('sellerId'))
                     shop.set_value_with_idx(
                         shop.boss_nick,
                         itm.get('fields').get('seller'))
                     shop.set_value_with_idx(shop.source_file, abs_path)
                     self.eb.db_insert_table_shop(shop.get_value())
                     continue
         except:
             # f = open('D:/webs/{}.txt'.format(random.randint(0, 0xffffffff)),'w+')
             # f.write(m_str)
             # f.close()
             traceback.print_exc()
             continue
     self.eb.db_commit()
Ejemplo n.º 26
0
 def __generate_file_list(self):
     connection = unity_c37r.create_connection(self.cache_db)
     cmd = sql.SQLiteCommand(connection)
     cmd.CommandText = '''
         select * from tbl_filelist
     '''
     ftl = NDFileList()
     reader = cmd.ExecuteReader()
     while reader.Read():
         fl = NDBCPFILELIST()
         fl.set_value_with_idx(
             fl.account_id,
             unity_c37r.c_sharp_get_string(reader, ftl.account))
         fl.set_value_with_idx(fl.app_type, self.app_type)
         fl.set_value_with_idx(fl.collect_id, self.cid)
         fl.set_value_with_idx(
             fl.file_name,
             unity_c37r.c_sharp_get_string(reader, ftl.file_name))
         fl.set_value_with_idx(
             fl.hash, unity_c37r.c_sharp_get_string(reader, ftl.file_hash))
         fl.set_value_with_idx(
             fl.file_size,
             unity_c37r.c_sharp_get_long(reader, ftl.file_size))
         fl.set_value_with_idx(
             fl.server_path,
             unity_c37r.c_sharp_get_string(reader, ftl.server_path))
         fl.set_value_with_idx(
             fl.create_time,
             unity_c37r.c_sharp_get_long(reader, ftl.create_time))
         fl.set_value_with_idx(
             fl.update_time,
             unity_c37r.c_sharp_get_long(reader, ftl.update_time))
         fl.set_value_with_idx(
             fl.cached_time,
             unity_c37r.c_sharp_get_long(reader, ftl.cache_time))
         fl.set_value_with_idx(
             fl.delete_status,
             unity_c37r.c_sharp_get_long(reader, ftl.deleted))
         self.db_insert_file_list(fl)
     ftl = NDFileShared()
     reader.Close()
     cmd.CommandText = '''
         select * from tb_shared
     '''
     reader = cmd.ExecuteReader()
     while reader.Read():
         fl = NDBCPFILELIST()
         fl.set_value_with_idx(fl.app_type, self.app_type)
         fl.set_value_with_idx(fl.collect_id, self.cid)
         fl.set_value_with_idx(
             fl.account_id,
             unity_c37r.c_sharp_get_string(reader, ftl.account))
         fl.set_value_with_idx(
             fl.file_name,
             unity_c37r.c_sharp_get_string(reader, ftl.file_name))
         fl.set_value_with_idx(
             fl.file_size,
             unity_c37r.c_sharp_get_long(reader, ftl.file_size))
         fl.set_value_with_idx(
             fl.url, unity_c37r.c_sharp_get_string(reader, ftl.url))
         fl.set_value_with_idx(
             fl.create_time,
             unity_c37r.c_sharp_get_long(reader, ftl.create_time))
         fl.set_value_with_idx(
             fl.update_time,
             unity_c37r.c_sharp_get_long(reader, ftl.update_time))
         fl.set_value_with_idx(
             fl.cached_time,
             unity_c37r.c_sharp_get_long(reader, ftl.send_time))
         fl.set_value_with_idx(
             fl.server_path,
             unity_c37r.c_sharp_get_string(reader, ftl.server_path))
         self.db_insert_file_list(fl)
     self.db_commit()
     reader.Close()
     cmd.Dispose()
     connection.Close()
Ejemplo n.º 27
0
 def parse(self):
     app_node = self.node.GetByPath('Library/Caches/__xstore_app.db')
     if app_node is None:
         print('f****d')
         return
     conn = unity_c37r.create_connection(app_node.PathWithMountPoint)
     cmd = sql.SQLiteCommand(conn)
     cmd.CommandText = '''
         select nick, logo, gender from PUserInfo where userId = {}
     '''.format(self.account)
     reader = cmd.ExecuteReader()
     if reader.Read():
         a = model_im.Account()
         a.account_id = self.account
         a.nickname = unity_c37r.c_sharp_get_string(reader, 0)
         a.photo = unity_c37r.c_sharp_get_string(reader, 1)
         self.im.db_insert_table_account(a)
     cmd.Dispose()
     cmd.CommandText = '''
         select userId, nick, logo, gender from PUserInfo where userId != {}
     '''.format(self.account)
     reader = cmd.ExecuteReader()
     while reader.Read():
         if canceller.IsCancellationRequested:
             cmd.Dispose()
             conn.Close()
             self.im.db_close()
             raise IOError('e')
         f = model_im.Friend()
         f.account_id = self.account
         f.friend_id = unity_c37r.c_sharp_get_long(reader, 0)
         f.nickname = unity_c37r.c_sharp_get_string(reader, 1)
         f.photo = unity_c37r.c_sharp_get_string(reader, 2)
         self.im.db_insert_table_friend(f)
     cmd.Dispose()
     cmd.CommandText = '''
         select pondId, adminUserId, pondName, pondLogo from PPondInfo
     '''
     reader = cmd.ExecuteReader()
     while reader.Read():
         if canceller.IsCancellationRequested:
             cmd.Dispose()
             conn.Close()
             self.im.db_close()
             raise IOError('e')
         g = model_im.Chatroom()
         g.account_id = self.account
         g.chatroom_id = unity_c37r.c_sharp_get_long(reader, 0)
         g.name = unity_c37r.c_sharp_get_string(reader, 2)
         g.owner_id = unity_c37r.c_sharp_get_long(reader, 1)
         g.photo = unity_c37r.c_sharp_get_string(reader, 3)
         self.im.db_insert_table_chatroom(g)
     cmd.Dispose()
     cmd.CommandText = '''
         select * from PItemInfo
     '''
     reader = cmd.ExecuteReader()
     while reader.Read():
         if canceller.IsCancellationRequested:
             cmd.Dispose()
             conn.Close()
             self.im.db_close()
             raise IOError('e')
         feed = model_im.Feed()
         feed.account_id = self.account
         feed.attachment_link = unity_c37r.c_sharp_get_string(reader, 1)
         feed.attachment_title = unity_c37r.c_sharp_get_string(reader, 4)
         #feed.attachment_desc
         feed.attachment_desc = '''price:{}\norigPrice:\n'''.format(unity_c37r.c_sharp_get_string(reader, 2), unity_c37r.c_sharp_get_string(reader, 3))
         seller_id = unity_c37r.c_sharp_get_long(reader, 5)
         seller_info = unity_c37r.c_sharp_get_long(reader, 6)
         feed.sender_id = seller_id if seller_id != 0 else seller_info
         self.im.db_insert_table_feed(feed)
     cmd.Dispose()
     conn.Close()
     db_node = self.node.GetByPath('Library/Caches/__xstore_user_{}.db'.format(self.account))
     if db_node is None:
         print('f****d')
         return
     conn = unity_c37r.create_connection(db_node.PathWithMountPoint)
     cmd = sql.SQLiteCommand(conn)
     cmd.CommandText = '''
         select Sid, Uid, content, extJson, timeStamp from PMessage
     '''
     reader = cmd.ExecuteReader()
     while reader.Read():
         if canceller.IsCancellationRequested:
             cmd.Dispose()
             conn.Close()
             self.im.db_close()
             raise IOError('e')
         m = model_im.Message()
         m.account_id = self.account
         m.sender_id = unity_c37r.c_sharp_get_long(reader, 1)
         m.talker_id = unity_c37r.c_sharp_get_long(reader, 0)
         m.send_time = unity_c37r.c_sharp_get_long(reader, 4) / 1000
         try:
             string = unity_c37r.c_sharp_get_string(reader, 2)
             js = json.loads(string)
             tp = js.get('contentType')
             if tp == 1:
                 m.content = js.get('text').get('text')
                 m.type = model_im.MESSAGE_CONTENT_TYPE_TEXT
             elif tp == 17: # trade...
                 #m.content = js.get('content')
                 m.content = js.get('title')
                 deal = model_im.Deal()
                 m.type = model_im.MESSAGE_CONTENT_TYPE_RECEIPT
                 m.extra_id = deal.deal_id
                 deal.money = js.get('content')
                 deal.description = js.get('title')
                 self.im.db_insert_table_deal(deal)
             elif tp == 10:
                 m.type = model_im.MESSAGE_CONTENT_TYPE_TEXT
                 js = js.get('actionCard')
                 m.content = '''title:{}\ncontent:{}'''.format(js.get('memo'), js.get('title'))
             elif tp == 2: # image
                 m.type = model_im.MESSAGE_CONTENT_TYPE_IMAGE
                 m.media_path = js.get('image').get('pics')[0].get('url')
             elif tp == 8:
                 m.type = model_im.MESSAGE_CONTENT_TYPE_TEXT
                 m.content = '''title:{}\ncontent:{}'''.format(js.get('imageCard').get('title'), js.get('imageCard').get('content'))
             elif tp == 6:
                 m.type = model_im.MESSAGE_CONTENT_TYPE_TEXT
                 #m.content = '''title:{}\ncontent:{}\nstring:{}'''.format(js.get('textCard').get('title'), js.get('textCard').get('memo'), string)
                 js = js.get('textCard')
                 title = js.get('title')
                 # if title is None:
                 #     m.content = '''content:{}'''.format(js.get('content'))
                 # else:
                 #     m.content = '''title:{}\ncontent:{}\nstring:{}'''.format(js.get('title'), js.get('memo'), string)
                 content = js.get('content')
                 memo = js.get('memo')
                 m.content = '''title:{}\ncontent:{}\nmemo:{}'''.format(title, content, memo)
             elif tp == 16:
                 m.type = model_im.MESSAGE_CONTENT_TYPE_ATTACHMENT
                 m.content = js.get('itemCard').get('title')
                 deal = model_im.Deal()
                 js = js.get('itemCard').get('item')
                 deal.deal_id = js.get('itemId')
                 m.extra_id = deal.deal_id
                 m.media_path = js.get('mainPic')
                 deal.description = js.get('title')
                 deal.money = js.get('price')
                 self.im.db_insert_table_deal(deal)
             elif tp == 11: # 留言
                 m.type = model_im.MESSAGE_CONTENT_TYPE_TEXT
                 m.content = '''title:{}\ncontent:{}'''.format(js.get('reply').get('title'), js.get('reply').get('content'))
                 # url is lost... waiting for support.
             elif tp == 20:
                 m.type = model_im.MESSAGE_CONTENT_TYPE_TEXT
                 m.content = js.get('text')
             elif tp == 7:
                 m.type = model_im.MESSAGE_CONTENT_TYPE_TEXT
                 m.content = js.get('itemCard').get('title')
             elif tp == 14:
                 m.type = model_im.MESSAGE_CONTENT_TYPE_TEXT
                 m.content = js.get('tip').get('tips')
             else:
                 print('detect unsupported type:%d' % tp)
                 m.type = model_im.MESSAGE_CONTENT_TYPE_TEXT
                 m.content = string
             self.im.db_insert_table_message(m)
         except Exception as e:
             print 'find error string:{}'.format(string)
             logging.error(e)
     self.im.db_commit()
     cmd.Dispose()
     cmd.CommandText = '''
         select XSummary, Session$$$$sessionId , ts, Sender from XMessageCenterItem
     '''
     reader = cmd.ExecuteReader()
     while reader.Read():
         if canceller.IsCancellationRequested:
             cmd.Dispose()
             conn.Close()
             self.im.db_close()
             raise IOError('e')
         m = model_im.Message()
         m.type = model_im.MESSAGE_CONTENT_TYPE_TEXT
         m.content = unity_c37r.c_sharp_get_string(reader, 0)
         m.talker_id = unity_c37r.c_sharp_get_long(reader, 1)
         m.sender_id = unity_c37r.c_sharp_get_long(reader, 3)
         m.send_time = unity_c37r.c_sharp_get_long(reader, 2) / 1000
         self.im.db_insert_table_message(m)
     self.im.db_commit()
     cmd.Dispose()
     conn.Close()