示例#1
0
def get_evaluate_max(index_name):
    max_result = {}
    index_type = 'bci'
    evaluate_index = ['user_index']
    for evaluate in evaluate_index:
        query_body = {
            'query': {
                'match_all': {}
            },
            'size': 1,
            'sort': [{
                evaluate: {
                    'order': 'desc'
                }
            }]
        }
        # try:
        result = es_cluster.search(index=index_name,
                                   doc_type=index_type,
                                   body=query_body)['hits']['hits']
        # except Exception, e:
        # raise e
        max_evaluate = result[0]['_source'][evaluate]
        max_result[evaluate] = max_evaluate
    return max_result
def get_user_detail(date, input_result):
    bci_date = ts2datetime(datetime2ts(date) - DAY)
    results = []
    uid_list = input_result
    if date!='all':
        index_name = 'bci_' + ''.join(bci_date.split('-'))
    else:
        now_ts = time.time()
        now_date = ts2datetime(now_ts)
        index_name = 'bci_' + ''.join(now_date.split('-'))
    index_type = 'bci'
    user_bci_result = es_cluster.mget(index=index_name, doc_type=index_type, body={'ids':uid_list}, _source=True)['docs']  #INFLUENCE,fans,status
    user_profile_result = es_user_profile.mget(index=profile_index_name, doc_type=profile_index_type, body={'ids':uid_list}, _source=True)['docs'] #个人姓名,注册地
    max_evaluate_influ = get_evaluate_max(index_name)
    for i in range(0, len(uid_list)):
        uid = uid_list[i]
        bci_dict = user_bci_result[i]
        profile_dict = user_profile_result[i]

        try:
            bci_source = bci_dict['_source']
        except:
            bci_source = None
        if bci_source:
            influence = bci_source['user_index']
            influence = math.log(influence/float(max_evaluate_influ['user_index']) * 9 + 1 ,10)
            influence = influence * 100
        else:
            influence = ''
        try:
            profile_source = profile_dict['_source']
        except:
            profile_source = None
        if profile_source:
            uname = profile_source['nick_name'] 
            location = profile_source['user_location']
            try:
                fansnum = bci_dict['fields']['user_fansnum'][0]
            except:
                fansnum = 0
            try:
                statusnum = bci_dict['fields']['weibo_month_sum'][0]
            except:
                statusnum = 0
        else:
            uname = uid
            location = ''
            try:
                fansnum = bci_dict['fields']['user_fansnum'][0]
            except:
                fansnum = 0
            try:
                statusnum = bci_dict['fields']['weibo_month_sum'][0]
            except:
                statusnum = 0

        results.append({'uid':uid, 'uname':uname, 'location':location, 'fansnum':fansnum, 'statusnum':statusnum, 'influence':round(influence,2)})

    return results
示例#3
0
def get_detail_org(uid_list, user_name):

    if len(uid_list) == 0:
        return {}
    result = {}
    user_bci_result = es_cluster.mget(index=index_name,
                                      doc_type=index_type,
                                      body={'ids': uid_list},
                                      _source=True)['docs']
    search_result = es_user_portrait.mget(index=portrait_index_name,
                                          doc_type=portrait_index_type,
                                          body={"ids": uid_list})["docs"]
    if len(search_result) == 0:
        return result
    for i in range(0, len(search_result)):
        item = search_result[i]
        uid = item['_id']
        if not item['found']:
            result[uid] = {}
            continue
        else:
            data = item['_source']
            if not data['uname']:
                name = ''
            else:
                name = data['uname'].encode('utf-8')

            if not data['location']:
                location = ''
            else:
                location = data['location'].encode('utf-8')
            if not data['verify_type']:
                verified = ''
            else:
                verified = ver_data[data['verify_type']]

            work_tag = data['function_mark'].encode('utf-8')
            tags = work_tag.split('&')
            tag_list = []
            for tag in tags:
                u, t = tag.split('_')
                if u == user_name:
                    tag_str.append(t)

            bci_dict = user_bci_result[i]
            try:
                fansnum = bci_dict['fields']['user_fansnum'][0]
            except:
                fansnum = 0

            result[uid] = {
                'name': name,
                'location': location,
                'verified': verified,
                'tag': work_tag,
                'fansnum': fansnum
            }

    return result
def search_bci(uid):#获取用户的粉丝数、关注数和微博数

    uid_list = [uid]
    date = 1480176000#time.time()
    bci_date = ts2datetime(date - DAY)
    index_name = 'bci_' + ''.join(bci_date.split('-'))
    index_type = 'bci'
    user_bci_result = es_cluster.mget(index=index_name, doc_type=index_type, body={'ids':uid_list})['docs']
    if len(user_bci_result):
        return {'fansnum':'', 'statusnum':'', 'friendnum':''}
    result = {'fansnum':'', 'statusnum':'', 'friendnum':''}
    for item in user_bci_result:
        if not item['found']:
            return result
        else:
            data = item['_source']
            fansnum = data['user_fansnum']
            friendsnum = data['user_friendsnum']
            statusnum = data['origin_weibo_number']+data['retweeted_weibo_number']
    result = {'fansnum':fansnum, 'statusnum':statusnum, 'friendnum':friendsnum}
    return result
示例#5
0
 }
 try:
     top_sensitive_result = es_bci_history.search(
         index=ES_SENSITIVE_INDEX,
         doc_type=DOCTYPE_SENSITIVE_INDEX,
         body=query_sensitive_body,
         _source=False,
         fields=[sensitive_string])['hits']['hits']
     top_sensitive = top_sensitive_result[0]['fields'][sensitive_string][0]
 except Exception, reason:
     print Exception, reason
     top_sensitive = 400
 index_type = 'bci'
 user_bci_result = es_cluster.mget(
     index=index_name,
     doc_type=index_type,
     body={'ids': uid_list},
     _source=True)['docs']  #INFLUENCE,fans,status
 user_profile_result = es_user_profile.mget(index='weibo_user',
                                            doc_type='user',
                                            body={'ids': uid_list},
                                            _source=True)['docs']  #个人姓名,注册地
 # bci_history_result = es_bci_history.mget(index=bci_history_index_name, doc_type=bci_history_index_type, body={"ids":uid_list}, fields=['user_fansnum', 'weibo_month_sum'])['docs']
 # sensitive_history_result = es_bci_history.mget(index=ES_SENSITIVE_INDEX, doc_type=DOCTYPE_SENSITIVE_INDEX, body={'ids':uid_list}, fields=[sensitive_string], _source=False)['docs']
 max_evaluate_influ = get_evaluate_max(index_name)
 for i in range(0, len(uid_list)):
     uid = uid_list[i]
     bci_dict = user_bci_result[i]
     profile_dict = user_profile_result[i]
     # bci_history_dict = bci_history_result[i]
     # sensitive_history_dict = sensitive_history_result[i]