def split_case_info(case): title = case['title'] content = json.loads(case['content']) title_list = list(jieba.cut_for_search(title)) content_list = list(jieba.cut_for_search(content)) case_list = title_list + content_list case_word_list = list(set(case_list)) # print(case_list) for word in case_word_list: if word not in strip_word_list: word_md5 = common.get_md5(word) res = Data.find('case_search_index', [('case_id', '=', case['id']), ('keyword_md5', '=', word_md5)]) if res != None: # print('已经存在') continue params = { 'case_id': case['id'], 'keyword': json.dumps(word), 'keyword_md5': word_md5 } Data.insert('case_search_index', params) continue else: continue
def insert(self,table,content): Data.insert(table,content) if table in self.data_all: self.append_lines(table) else: self.refresh_one_table(table) return
def truncate(self,table): if table in self.data_all: self.data_all[table] = [] else: self.data_all[table] = [] Data.truncate(table) return
def refresh_db(self): time_now = time_to_str(int(time.time())).split()[1].split(':')[:2] if ':'.join(time_now) == refresh_time: for table in self.data_all: Data.delete(table,[]) Data.insert(table,self.data_all[table]) time.sleep(60) else: pass return
def write_event_post_item(self, data, res): for item in data['post_items']: item_url = self.get_post_item(item) params = { 'case_id': res['id'], 'post_item': item_url, 'ctime': int(time.time()), 'raw_url': item, } Data.insert('case_post_item', params)
def get_all_data(): start_time = time.time() table_list = Data.get_tables() data_strct = {} for table in table_list: ctime = time.time() print('reading',table,'...') data_strct[table] = Data.select(table,[]) print('read',table,'done! spend',time.time()-ctime,'seconds') print('read database done!') print('spend',time.time()-start_time,'seconds') return data_strct
def append_lines(self,table): last_id = self.data_all[table][-1]['id'] res = Data.select(table,[('id','>',last_id)]) if res != None: if len(res) != 0: self.data_all[table] = self.data_all[table]+res return
def get(self): data = self.get_data() pw_md5 = common.get_md5(data['pw']) condition = [('user_name', '=', data['username']), ('passwd', '=', pw_md5)] res = Data.find('user', condition) if res == None: self.send_faild('LOGIN_PSW_ERROR') return else: token = self.get_token(res) result = {'token': token} Data.update('user', condition, result) self.send_ok(result) return
def get_post_items(self, case_id): # 获取案子相关附件 result = [] res = Data.select('case_post_item', [('case_id', '=', case_id)]) if res != None: for line in res: result.append(line['post_item']) return result
def post(self): data = self.get_post_data() user_base = self.get_user_base() content = json.dumps(data['content']) # content = content.replace('\\','\\\\') # 不确定是否需要 content_md5 = common.get_md5(content) user_id = user_base['id'] ctime = int(time.time()) event_time = common.str_to_time(data['event_time'] + ' 00:00:00') title = data['title'] # Data.find('case_info',[('content_md5','=',content_md5)]) params = { 'user_id': user_id, 'ctime': ctime, 'content': content, 'content_md5': content_md5, 'event_time': event_time, 'title': title, } Data.insert('case_info', params) # self.write_event_post_item() cond = [('user_id', '=', user_id), ('ctime', '=', ctime), ('content_md5', '=', content_md5)] res = Data.find('case_info', cond) self.split_case_info(res) # 创建关键词索引 # self.write_event_post_item(data,res) if res != None: self.send_ok({}) self.write_event_post_item(data, res) print('download_done!') return else: self.send_faild({'INSERT_FAIL'}) return
def get(self): data = self.get_data() if data['pw1'] != data['pw2']: self.send_faild('PW_NOT_SAME') return if data['invite_token'] == '': self.send_faild('NO_TOKEN') return # 需要传入邀请者token作为参数 res = Data.find('user', [('user_name', '=', data['username'])]) if res != None: self.send_faild('ACCOUNT_HAD') return inviter = Data.find('user', [('token', '=', data['invite_token'])]) if inviter == None: self.send_faild('NO_TOKEN') return params = { 'user_name': data['username'], 'passwd': common.get_md5(data['pw2']), 'join_time': int(time.time()), 'uuid': self.create_uuid(), 'invite_id': inviter['id'], 'nickname': json.dumps(data['nickname']) } Data.insert('user', params) Data.update('user', [('id', '=', inviter['id'])], {'token': ''}) # 插入新的数据,为了安全,更新一次token conditions = [('user_name', '=', data['username']), ('passwd', '=', common.get_md5(data['pw2']))] res = Data.find('user', conditions) token = self.get_token(res) result = {'token': token} Data.update('user', conditions, result) # 插入token self.send_ok(result) return
def delete(self,table,conditions): if table in self.data_all: table_content = self.data_all[table] del_line = [] for line in table_content: if judge(line,conditions) == True: del_line.append(line) for i in del_line: table_content.remove(i) Data.delete(table,conditions) else: Data.delete(table,conditions) self.data_all[table] = Data.select(table,[]) return
def write_main_info(): title = '南昌红谷滩杀人' content = '''32岁南昌男子从背后袭击,当街将24岁女子捅杀】24日下午5时18分许,南昌市红谷滩发生一起杀人案。27日记者从南昌公安局了解到,犯罪嫌疑人万某弟(男,32岁,南昌人)已被控制,作案动机仍在调查。监控视频显示,行凶者当时冲向并排行走的三人,持刀向其中一名女子砍去。女子倒地后,行凶者仍不依不饶。另据@北京时间 报道,凶手曾想杀“个子高”女子,后发现另一女子“更白更漂亮”。''' content = json.dumps(content) #.replace('\\','\\\\') content_md5 = common.get_md5(content) event_time = '2019-05-28 00:00:00' event_time = common.str_to_time(event_time) params = { 'user_id': 2, 'ctime': int(time.time()), 'content': content, 'content_md5': content_md5, 'event_time': event_time, 'title': title } # Data.update('case_info',[('content_md5','=',content_md5)],params) Data.insert('case_info', params)
def get(self): data = self.get_data() keyword_list = data['keyword_list'] if keyword_list == []: self.send_faild('NEED_WORD') return case_id_list = [] for keyword in keyword_list: keyword_md5 = common.get_md5(keyword) res = Data.select('case_search_index', [('keyword_md5', '=', keyword_md5)]) if res == None: continue else: for case in res: case_id_list.append(case['case_id']) continue case_id_list = list(set(case_id_list)) print(case_id_list) title_list = [] for case_id in case_id_list: res = Data.find('case_info', [('id', '=', case_id)]) if res == None: continue else: case_info = {'case_id': res['id'], 'title': res['title']} title_list.append(case_info) continue result = {'keyword_list': keyword_list, 'result': title_list} # 关键词搜索 self.send_ok(result) return
def get_user_base(self): ''' 获取用户基本信息 :return: ''' token = self.get_argument('token') print(token) conditions = [] conditions.append(('token', '=', token)) user_data = Data.find(Data.USER, conditions) return user_data
def get_user_base(self): ''' 获取用户基本信息 :return: ''' token = self.get_argument('token') # print(token) conditions = [] if token == '': # 如果不存在token return None conditions.append(('token', '=', token)) user_data = Data.find('user', conditions) return user_data
def create_uuid(self): # 生成一个uuid uuid_list = [] all_number = [] for i in range(100000, 999999): all_number.append(i) res = Data.select('user', [('id', '!=', 0)]) if res == None: pass else: for i in res: uuid_list.append(i['uuid']) for uuid in uuid_list: all_number.remove(uuid) return all_number[0]
def get(self): data = self.get_data() search_time = data['limit_year_time'] if search_time != '': search_time_stamp_start = common.str_to_time(str(search_time)+'-01-01 00:00:00') search_time_stamp_end = common.str_to_time(str(search_time)+'-12-31 23:59:59') else: search_time_stamp_start = 0 search_time_stamp_end = 999999999 condition = [ ('event_time','>',search_time_stamp_start), ('event_time','<',search_time_stamp_end), ('is_show','=',1), ] res = Data.select('case_info',condition) result_list = [] if res == None: self.send_faild('NO_RECORD') return for line in res: info_line = { 'ctime':common.time_to_str(line['ctime']).split()[0], 'title':line['title'], 'case_id':line['id'] } result_list.append(info_line) result = { 'result_list':result_list } # print(result) self.send_ok(result) return
def get(self): data = self.get_data() case_id = data['case_id'] line = Data.find('case_info', [('id', '=', case_id), ('is_show', '=', 1)]) if line == None: self.send_faild('NO_RECORD') return info_line = { 'case_id': line['id'], 'content': json.loads(line['content']), 'ctime': common.time_to_str(line['ctime']).split()[0], 'title': line['title'], 'uploader_info': self.get_uploader_info(line['user_id']), 'post_items': self.get_post_items(line['id']), } result = info_line # print(result) self.send_ok(result) return
def update(self,table,conditions,params): if table in self.data_all: table_content = self.data_all[table] table_id_list = [] tmp = [] if conditions == []: for line in table_content: table_id_list.append(line['id']) tmp.append(line) else: for line in table_content: if judge(line,conditions) == True: table_id_list.append(line['id']) tmp.append(line) Data.update(table,conditions,params) for line in tmp: self.data_all[table].remove(line) for i in table_id_list: res = Data.find(table,[('id','=',i)]) for line in table_content: if line['id'] > res['id']: line_index = table_content.index(line) if line_index == 0: tail = [res]+table_content else: tail = table_content[:line_index] + [res] + table_content[line_index:] break table_content = tail self.data_all[table] = table_content else: Data.update(table,conditions,params) self.data_all[table] = Data.select(table,[]) return
def update_post_items(): res = Data.select('case_post_item', [('id', '!=', 0)]) for line in res: Data.update('case_post_item', [('id', '=', line['id'])], {'raw_url': line['post_item']}) return
case_word_list = list(set(case_list)) # print(case_list) for word in case_word_list: if word not in strip_word_list: word_md5 = common.get_md5(word) res = Data.find('case_search_index', [('case_id', '=', case['id']), ('keyword_md5', '=', word_md5)]) if res != None: # print('已经存在') continue params = { 'case_id': case['id'], 'keyword': json.dumps(word), 'keyword_md5': word_md5 } Data.insert('case_search_index', params) continue else: continue # for i in case_list: # def all_case = Data.select('case_info', [('id', '!=', 0)]) for case in all_case: split_case_info(case)
def refresh_one_table(self,table): # self.data_all.pop(table) print('importing..',table) self.data_all[table] = Data.select(table,[]) print('importing..',table,'done!') return
def get(self): res = Data.find('test', [('id', '!=', 0)]) self.send_ok(res)
def get_uploader_info(self, user_id): # 获取上传者信息 res = Data.find('user', [('id', '=', user_id)]) result = {'nickname': json.loads(res['nickname']), 'uuid': res['uuid']} return result