def search_top_index(index_name, top_k=1, index_type="bci", top=False, sort_order="user_index"): query_body = { "query": { "match_all": {} }, "size": top_k, "sort": [{sort_order: {"order": "desc"}}] } if top: result = es.search(index=index_name, doc_type=index_type, body=query_body)['hits']['hits'][0]['_source'][sort_order] else: search_result = es.search(index=index_name, doc_type=index_type, body=query_body)['hits']['hits'] uid_list = [] for item in search_result: uid_list.append(item['_id']) profile_result = es_profile.mget(index="weibo_user",doc_type="user", body={"ids":uid_list}, _source=True)['docs'] portrait_result = es_portrait.mget(index="user_portrait", doc_type="user", body={"ids":uid_list}, _source=True)['docs'] result = [] rank = 1 for i in range(len(search_result)): info = ['','','',''] info[0] = rank if profile_result[i]['found']: info[1] = profile_result[i]['_source'].get('photo_url','') info[3] = profile_result[i]['_source'].get('nick_name','') info[2] = search_result[i].get('_id','') if sort_order in ["user_index","origin_weibo_retweeted_brust_average","origin_weibo_comment_brust_average"]: info.append(search_result[i]['_source'][sort_order]) if portrait_result[i]['found']: info.append("1") else: info.append("0") elif sort_order == "origin_weibo_retweeted_top_number": info.append(search_result[i]['_source']['origin_weibo_retweeted_top_number']) mid = search_result[i]['_source']['origin_weibo_top_retweeted_id'] info.append(weiboinfo2url(info[2],mid)) if portrait_result[i]['found']: info.append("1") else: info.append("0") elif sort_order == "origin_weibo_comment_top_number": info.append(search_result[i]['_source']['origin_weibo_comment_top_number']) mid = search_result[i]['_source']['origin_weibo_top_comment_id'] info.append(weiboinfo2url(info[2],mid)) if portrait_result[i]['found']: info.append("1") else: info.append("0") rank += 1 result.append(info) return result
def search_max_single_field(field, index_name, doctype, top_k=3): # field = "origin_weibo_retweeted_top_number", "origin_weibo_comment_top_number" query_body = { "query": { "match_all": {} }, "sort": [{field: {"order": "desc"}}], "size": top_k } return_list = [] rank = 1 count_c = 0 start = 0 while 1: search_list = [] user_list = search_k(es, index_name, doctype, start, field, 100) start += 100 for item in user_list: uid = item.get('user','0') search_list.append(uid) # uid list search_result = es_portrait.mget(index="user_portrait", doc_type="user", body={"ids": search_list}, _source=True)["docs"] profile_result = es_profile.mget(index="weibo_user", doc_type="user", body={"ids": search_list}, _source=True)["docs"] for i in range(len(search_result)): if search_result[i]['found']: info = ['','','','','','','1'] info[0] = rank info[2] = search_result[i].get('_id','') if profile_result[i]['found']: info[1] = profile_result[i]['_source'].get('photo_url','') info[3] = profile_result[i]['_source'].get('nick_name','') if 'retweeted' in field: temp_mid = user_list[i]['origin_weibo_top_retweeted_id'] info[5] = weiboinfo2url(info[2], temp_mid) info[4] = user_list[i]['origin_weibo_retweeted_top_number'] else: temp_mid = user_list[i]['origin_weibo_top_comment_id'] info[5] = weiboinfo2url(info[2], temp_mid) info[4] = user_list[i]['origin_weibo_comment_top_number'] rank += 1 return_list.append(info) if rank >= int(top_k)+1: return return_list
def group_user_weibo(task_name, submit_user, sort_type): weibo_list = [] now_date = ts2datetime(time.time()) if sort_type == 'retweet': sort_type = 'retweeted' #run_type if RUN_TYPE == 0: now_date = RUN_TEST_TIME sort_type = 'timestamp' #step1: get group user task_id = submit_user + '-' + task_name try: group_exist_result = es_group_result.get(index=group_index_name, doc_type=group_index_type,\ id=task_id)['_source'] except: group_exist_result = {} if not group_exist_result: return 'group no exist' #step2: get user weibo list uid_list = group_exist_result['uid_list'] for i in range(6,-1,-1): iter_date = ts2datetime(datetime2ts(now_date) - i * DAY) index_name = flow_text_index_name_pre + iter_date try: weibo_result = es_flow_text.search(index=index_name, doc_type=flow_text_index_type,\ body={'query':{'filtered':{'filter':{'terms':{'uid': uid_list}}}}, 'sort':[{sort_type: {'order': 'desc'}}], 'size':100})['hits']['hits'] except: weibo_result = [] if weibo_result: weibo_list.extend(weibo_result) #sort_weibo_list = sorted(weibo_list, key=lambda x:x['_source'][sort_type], reverse=True)[:100] sort_weibo_list = weibo_list #step3: get user name try: portrait_exist_result = es_user_portrait.mget(index=portrait_index_name, doc_type=portrait_index_type, \ body={'ids':uid_list})['docs'] except: portrait_exist_result = [] uid2uname_dict = {} for portrait_item in portrait_exist_result: uid = portrait_item['_id'] if portrait_item['found'] == True: source = portrait_item['_source'] uname = source['uname'] else: uname = 'unknown' uid2uname_dict[uid] = uname weibo_list = [] for weibo_item in sort_weibo_list: source = weibo_item['_source'] mid = source['mid'] uid = source['uid'] uname = uid2uname_dict[uid] text = source['text'] ip = source['geo'] timestamp = source['timestamp'] date = ts2date(timestamp) sentiment = source['sentiment'] weibo_url = weiboinfo2url(uid, mid) #run_type: if RUN_TYPE == 1: try: retweet_count = source['retweeted'] except: retweet_count = 0 try: comment_count = source['comment'] except: comment_count = 0 try: sensitive_score = source['sensitive'] except: sensitive_score = 0 else: retweet_count = 0 comment_count = 0 sensitive_score = 0 city = ip2city(ip) weibo_list.append([mid, uid, uname, text, ip, city, timestamp, date, retweet_count, comment_count, sensitive_score, weibo_url]) if sort_type == 'timestamp': new_weibo_list = sorted(weibo_list, key=lambda x:x[6], reverse=True) elif sort_type == 'retweeted': new_weibo_list = sorted(weibo_list, key=lambda x:x[8], reverse=True) elif sort_type == 'comment': new_weibo_list = sorted(weibo_list, key=lambda x:x[9], reverse=True) elif sort_type == 'sensitive': new_weibo_list = sorted(weibo_list, key=lambda x:x[10], reverse=True) return new_weibo_list
def get_group_results(task_name, module): result = [] try: es_result = es.get(index=index_name, doc_type=index_type, id=task_name)['_source'] #print 'result:', result except: return None #basic module: gender, count, verified if module == 'overview': task_name = es_result['task_name'] submit_date = es_result['submit_date'] state = es_result['state'] tightness = es_result['tightness'] activeness = es_result['activeness'] importance = es_result['importance'] influence = es_result['influence'] result = [ task_name, submit_date, state, tightness, activeness, importance, influence ] if module == 'basic': gender_dict = json.loads(es_result['gender']) count = es_result['count'] verified = es_result['verified'] if verified: verified_dict = json.loads(verified) result = [gender_dict, count, verified] if module == 'activity': activity_geo_dict = json.loads(es_result['activity_geo']) sort_activity_geo = sorted(activity_geo_dict.items(), key=lambda x: x[1], reverse=True) activity_geo = sort_activity_geo[:50] activity_trend = json.loads(es_result['activity_trend']) online_pattern_dict = json.loads(es_result['online_pattern']) sort_online_pattern = sorted(online_pattern_dict.items(), key=lambda x: x[1], reverse=True) online_pattern = sort_online_pattern[:50] geo_track = json.loads(es_result['geo_track']) result = [activity_geo, activity_trend, online_pattern, geo_track] if module == 'social': #degree_his = json.loads(es_result['degree_his']) density = es_result['density'] retweet_weibo_count = es_result['retweet_weibo_count'] retweet_user_count = es_result['retweet_user_count'] retweet_relation = json.loads(es_result['retweet_relation']) uid_list = [] for relation in retweet_relation: uid_list.append(relation[0]) uid_list.append(relation[1]) es_portrait_result = es.mget(index='user_portrait', doc_type='user', body={'ids': uid_list})['docs'] es_count = 0 new_retweet_relation = [] for relation in retweet_relation: source_uid = relation[0] source_item = es_portrait_result[es_count] try: source = source_item['_source'] source_uname = source['uname'] except: source_uname = '' target_uid = relation[1] es_count += 1 target_item = es_portrait_result[es_count] try: source = target_item['_source'] target_uname = source['uname'] except: target_uname = '' count = relation[2] new_retweet_relation.append( [source_uid, source_uname, target_uid, target_uname, count]) uid_list = [] out_beretweet_relation = json.loads( es_result['out_beretweet_relation']) uid_list = [] uid_list = [item[0] for item in out_beretweet_relation] es_portrait_result = es.mget(index='user_portrait', doc_type='user', body={'ids': uid_list})['docs'] es_count = 0 new_out_beretweet_relation = [] for i in range(len(uid_list)): item = es_portrait_result[i] uid = item['_id'] try: source = item['_source'] uname = source['uname'] except: uname = '' out_relation_item = out_beretweet_relation[i][1:] a = [uid, uname] a.extend(out_relation_item) #print 'add_item:', add_item new_out_beretweet_relation.append(a) result = [ new_retweet_relation, density, retweet_weibo_count, retweet_user_count, new_out_beretweet_relation ] if module == 'think': domain_dict = json.loads(es_result['domain']) topic_dict = json.loads(es_result['topic']) psycho_status = json.loads(es_result['psycho_status']) psycho_feature = json.loads(es_result['psycho_feature']) result = [domain_dict, topic_dict, psycho_status, psycho_feature] if module == 'text': hashtag_dict = json.loads(es_result['hashtag']) sort_hashtag = sorted(hashtag_dict.items(), key=lambda x: x[1], reverse=True) hashtag = sort_hashtag[:50] emoticon_dict = json.loads(es_result['emoticon']) sort_emoticon = sorted(emoticon_dict.items(), key=lambda x: x[1], reverse=True) emoticon = sort_emoticon[:5] keyword_dict = json.loads(es_result['keywords']) sort_keyword = sorted(keyword_dict.items(), key=lambda x: x[1], reverse=True) keyword = sort_keyword[:50] result = [hashtag, keyword, emoticon] if module == 'influence': importance_dis = json.loads(es_result['importance_his']) activeness_his = json.loads(es_result['activeness_his']) influence_his = json.loads(es_result['influence_his']) user_influence_list = json.loads(es_result['user_influence_list']) user_influence_result = [] for user_item in user_influence_list: uid = user_item[0] result_item = user_item[:5] for i in range(5, 9): item = user_item[i] mid = item[1] number = item[0] if mid != 0 and uid: weibolink = weiboinfo2url(uid, mid) else: weibolink = None result_item.append((number, mid, weibolink)) user_influence_result.append(result_item) ''' origin_max_retweeted_number =es_result['origin_max_retweeted_number'] origin_max_retweeted_id = es_result['origin_max_retweeted_id'] origin_max_retweeted_user = es_result['origin_max_retweeted_user'] if origin_max_retweeted_id != 0 and origin_max_retweeted_user != 0: origin_max_retweeted_weibolink = weiboinfo2url(origin_max_retweeted_user, origin_max_retweeted_id) else: origin_max_retweeted_weibolink = None origin_max_comment_number = es_result['origin_max_comment_number'] origin_max_comment_id = es_result['origin_max_comment_id'] origin_max_comment_user = es_result['origin_max_comment_user'] if origin_max_comment_id !=0 and origin_max_comment_user != 0: origin_max_comment_weibolink = weiboinfo2url(origin_max_comment_user, origin_max_comment_id) else: origin_max_comment_weibolink = None retweet_max_retweeted_number = es_result['retweet_max_retweeted_number'] retweet_max_retweeted_id = es_result['retweet_max_retweeted_id'] retweet_max_retweeted_user = es_result['retweet_max_retweeted_user'] if retweet_max_retweeted_id != 0 and retweet_max_retweeted_user != 0: retweet_max_retweeted_weibolink = weiboinfo2url(retweet_max_retweeted_user, retweet_max_retweeted_id) else: retweet_max_retweeted_weibolink = None retweet_max_comment_number = es_result['retweet_max_comment_number'] retweet_max_comment_id = es_result['retweet_max_comment_id'] retweet_max_comment_user = es_result['retweet_max_comment_user'] if retweet_max_comment_id != 0 and retweet_max_comment_user != 0: retweet_max_comment_weibolink = weiboinfo2url(retweet_max_comment_user, retweet_max_comment_id) else: retweet_max_comment_weibolink = None ''' result = [ importance_dis, activeness_his, influence_his, user_influence_result ] #print result return result
def group_user_weibo(task_name, submit_user, sort_type): weibo_list = [] now_date = ts2datetime(time.time()) #run_type if RUN_TYPE == 0: now_date = RUN_TEST_TIME sort_type = 'timestamp' #step1: get group user task_id = submit_user + '-' + task_name try: group_exist_result = es_group_result.get(index=group_index_name, doc_type=group_index_type,\ id=task_id)['_source'] except: group_exist_result = {} if not group_exist_result: return 'group no exist' #step2: get user weibo list uid_list = group_exist_result['uid_list'] for i in range(7, 0, -1): iter_date = ts2datetime(datetime2ts(now_date) - i * DAY) index_name = flow_text_index_name_pre + iter_date try: weibo_result = es_flow_text.search(index=index_name, doc_type=flow_text_index_type,\ body={'query':{'filtered':{'filter':{'terms':{'uid': uid_list}}}}, 'sort':sort_type, 'size':100})['hits']['hits'] except: weibo_result = [] if weibo_result: weibo_list.extend(weibo_result) sort_weibo_list = sorted(weibo_list, key=lambda x: x['_source'][sort_type], reverse=True)[:100] #step3: get user name try: portrait_exist_result = es_user_portrait.mget(index=portrait_index_name, doc_type=portrait_index_type, \ body={'ids':uid_list})['docs'] except: portrait_exist_result = [] uid2uname_dict = {} for portrait_item in portrait_exist_result: uid = portrait_item['_id'] if portrait_item['found'] == True: source = portrait_item['_source'] uname = source['uname'] else: uname = 'unknown' uid2uname_dict[uid] = uname weibo_list = [] for weibo_item in sort_weibo_list: source = weibo_item['_source'] mid = source['mid'] uid = source['uid'] uname = uid2uname_dict[uid] text = source['text'] ip = source['geo'] timestamp = source['timestamp'] date = ts2date(timestamp) sentiment = source['sentiment'] weibo_url = weiboinfo2url(uid, mid) #run_type: if RUN_TYPE == 1: retweet_count = source['retweet_count'] comment_count = source['comment_count'] sensitive_score = source['sensitive_score'] else: retweet_count = 0 comment_count = 0 sensitive_score = 0 city = ip2city(ip) weibo_list.append([ mid, uid, uname, text, ip, city, timestamp, date, retweet_count, comment_count, sensitive_score, weibo_url ]) return weibo_list
def get_group_results(task_name, module): result = [] try: es_result = es.get(index=index_name, doc_type=index_type, id=task_name)['_source'] #print 'result:', result except: return None #basic module: gender, count, verified if module=='overview': task_name = es_result['task_name'] submit_date = es_result['submit_date'] state = es_result['state'] tightness = es_result['tightness'] activeness = es_result['activeness'] importance = es_result['importance'] influence = es_result['influence'] result = [task_name, submit_date, state, tightness, activeness, importance, influence] if module=='basic': gender_dict = json.loads(es_result['gender']) count = es_result['count'] verified = es_result['verified'] if verified: verified_dict = json.loads(verified) result = [gender_dict, count, verified] if module=='activity': activity_geo_dict = json.loads(es_result['activity_geo']) sort_activity_geo = sorted(activity_geo_dict.items(), key=lambda x:x[1], reverse=True) activity_geo = sort_activity_geo[:50] activity_trend = json.loads(es_result['activity_trend']) online_pattern_dict = json.loads(es_result['online_pattern']) sort_online_pattern = sorted(online_pattern_dict.items(), key=lambda x:x[1], reverse=True) online_pattern = sort_online_pattern[:50] geo_track = json.loads(es_result['geo_track']) result = [activity_geo, activity_trend, online_pattern, geo_track] if module=='social': #degree_his = json.loads(es_result['degree_his']) density = es_result['density'] retweet_weibo_count = es_result['retweet_weibo_count'] retweet_user_count = es_result['retweet_user_count'] retweet_relation = json.loads(es_result['retweet_relation']) uid_list = [] for relation in retweet_relation: uid_list.append(relation[0]) uid_list.append(relation[1]) es_portrait_result = es.mget(index='user_portrait', doc_type='user', body={'ids':uid_list})['docs'] es_count = 0 new_retweet_relation = [] for relation in retweet_relation: source_uid = relation[0] source_item = es_portrait_result[es_count] try: source = source_item['_source'] source_uname = source['uname'] except: source_uname = '' target_uid = relation[1] es_count += 1 target_item = es_portrait_result[es_count] try: source = target_item['_source'] target_uname = source['uname'] except: target_uname = '' count = relation[2] new_retweet_relation.append([source_uid, source_uname, target_uid, target_uname, count]) uid_list = [] out_beretweet_relation = json.loads(es_result['out_beretweet_relation']) uid_list = [] uid_list = [item[0] for item in out_beretweet_relation] es_portrait_result = es.mget(index='user_portrait', doc_type='user', body={'ids':uid_list})['docs'] es_count = 0 new_out_beretweet_relation = [] for i in range(len(uid_list)): item = es_portrait_result[i] uid = item['_id'] try: source = item['_source'] uname = source['uname'] except: uname = '' out_relation_item = out_beretweet_relation[i][1:] a = [uid, uname] a.extend(out_relation_item) #print 'add_item:', add_item new_out_beretweet_relation.append(a) result = [new_retweet_relation, density, retweet_weibo_count, retweet_user_count, new_out_beretweet_relation] if module=='think': domain_dict = json.loads(es_result['domain']) topic_dict = json.loads(es_result['topic']) psycho_status = json.loads(es_result['psycho_status']) psycho_feature = json.loads(es_result['psycho_feature']) result = [domain_dict, topic_dict, psycho_status, psycho_feature] if module=='text': hashtag_dict = json.loads(es_result['hashtag']) sort_hashtag = sorted(hashtag_dict.items(), key=lambda x:x[1], reverse=True) hashtag = sort_hashtag[:50] emoticon_dict = json.loads(es_result['emoticon']) sort_emoticon = sorted(emoticon_dict.items(), key=lambda x:x[1], reverse=True) emoticon = sort_emoticon[:5] keyword_dict = json.loads(es_result['keywords']) sort_keyword = sorted(keyword_dict.items(), key=lambda x:x[1], reverse=True) keyword = sort_keyword[:50] result = [hashtag, keyword, emoticon] if module=='influence': importance_dis = json.loads(es_result['importance_his']) activeness_his = json.loads(es_result['activeness_his']) influence_his = json.loads(es_result['influence_his']) user_influence_list = json.loads(es_result['user_influence_list']) user_influence_result = [] for user_item in user_influence_list: uid = user_item[0] result_item = user_item[:5] for i in range(5,9): item = user_item[i] mid = item[1] number = item[0] if mid != 0 and uid: weibolink = weiboinfo2url(uid, mid) else: weibolink = None result_item.append((number, mid, weibolink)) user_influence_result.append(result_item) ''' origin_max_retweeted_number =es_result['origin_max_retweeted_number'] origin_max_retweeted_id = es_result['origin_max_retweeted_id'] origin_max_retweeted_user = es_result['origin_max_retweeted_user'] if origin_max_retweeted_id != 0 and origin_max_retweeted_user != 0: origin_max_retweeted_weibolink = weiboinfo2url(origin_max_retweeted_user, origin_max_retweeted_id) else: origin_max_retweeted_weibolink = None origin_max_comment_number = es_result['origin_max_comment_number'] origin_max_comment_id = es_result['origin_max_comment_id'] origin_max_comment_user = es_result['origin_max_comment_user'] if origin_max_comment_id !=0 and origin_max_comment_user != 0: origin_max_comment_weibolink = weiboinfo2url(origin_max_comment_user, origin_max_comment_id) else: origin_max_comment_weibolink = None retweet_max_retweeted_number = es_result['retweet_max_retweeted_number'] retweet_max_retweeted_id = es_result['retweet_max_retweeted_id'] retweet_max_retweeted_user = es_result['retweet_max_retweeted_user'] if retweet_max_retweeted_id != 0 and retweet_max_retweeted_user != 0: retweet_max_retweeted_weibolink = weiboinfo2url(retweet_max_retweeted_user, retweet_max_retweeted_id) else: retweet_max_retweeted_weibolink = None retweet_max_comment_number = es_result['retweet_max_comment_number'] retweet_max_comment_id = es_result['retweet_max_comment_id'] retweet_max_comment_user = es_result['retweet_max_comment_user'] if retweet_max_comment_id != 0 and retweet_max_comment_user != 0: retweet_max_comment_weibolink = weiboinfo2url(retweet_max_comment_user, retweet_max_comment_id) else: retweet_max_comment_weibolink = None ''' result = [importance_dis, activeness_his, influence_his, user_influence_result] #print result return result
def search_max_single_field(field, index_name, doctype, top_k=3): # field = "origin_weibo_retweeted_top_number", "origin_weibo_comment_top_number" query_body = { "query": { "match_all": {} }, "sort": [{ field: { "order": "desc" } }], "size": top_k } return_list = [] rank = 1 count_c = 0 start = 0 while 1: search_list = [] user_list = search_k(es, index_name, doctype, start, field, 100) start += 100 for item in user_list: uid = item.get('user', '0') search_list.append(uid) # uid list search_result = es_portrait.mget(index=portrait_index_name, doc_type=portrait_index_type, body={"ids": search_list}, _source=True)["docs"] profile_result = es_profile.mget(index=profile_index_name, doc_type=profile_index_type, body={"ids": search_list}, _source=True)["docs"] for i in range(len(search_result)): if search_result[i]['found']: info = ['', '', '', '', '', '', '1'] info[0] = rank info[2] = search_result[i].get('_id', '') if profile_result[i]['found']: info[1] = profile_result[i]['_source'].get('photo_url', '') info[3] = profile_result[i]['_source'].get('nick_name', '') if 'retweeted' in field: temp_mid = user_list[i]['origin_weibo_top_retweeted_id'] info[5] = weiboinfo2url(info[2], temp_mid) info[4] = user_list[i]['origin_weibo_retweeted_top_number'] else: temp_mid = user_list[i]['origin_weibo_top_comment_id'] info[5] = weiboinfo2url(info[2], temp_mid) info[4] = user_list[i]['origin_weibo_comment_top_number'] rank += 1 return_list.append(info) if rank >= int(top_k) + 1: return return_list
def search_top_index(index_name, top_k=1, index_type="bci", top=False, sort_order="user_index"): query_body = { "query": { "match_all": {} }, "size": top_k, "sort": [{ sort_order: { "order": "desc" } }] } if top: result = es.search( index=index_name, doc_type=index_type, body=query_body)['hits']['hits'][0]['_source'][sort_order] else: search_result = es.search(index=index_name, doc_type=index_type, body=query_body)['hits']['hits'] uid_list = [] for item in search_result: uid_list.append(item['_id']) profile_result = es_profile.mget(index=profile_index_name, doc_type=profile_index_type, body={"ids": uid_list}, _source=True)['docs'] portrait_result = es_portrait.mget(index=portrait_index_name, doc_type=portrait_index_type, body={"ids": uid_list}, _source=True)['docs'] result = [] rank = 1 for i in range(len(search_result)): info = ['', '', '', ''] info[0] = rank if profile_result[i]['found']: info[1] = profile_result[i]['_source'].get('photo_url', '') info[3] = profile_result[i]['_source'].get('nick_name', '') info[2] = search_result[i].get('_id', '') if sort_order in [ "user_index", "origin_weibo_retweeted_brust_average", "origin_weibo_comment_brust_average" ]: info.append(search_result[i]['_source'][sort_order]) if portrait_result[i]['found']: info.append("1") else: info.append("0") elif sort_order == "origin_weibo_retweeted_top_number": info.append(search_result[i]['_source'] ['origin_weibo_retweeted_top_number']) mid = search_result[i]['_source'][ 'origin_weibo_top_retweeted_id'] info.append(weiboinfo2url(info[2], mid)) if portrait_result[i]['found']: info.append("1") else: info.append("0") elif sort_order == "origin_weibo_comment_top_number": info.append(search_result[i]['_source'] ['origin_weibo_comment_top_number']) mid = search_result[i]['_source'][ 'origin_weibo_top_comment_id'] info.append(weiboinfo2url(info[2], mid)) if portrait_result[i]['found']: info.append("1") else: info.append("0") rank += 1 result.append(info) return result