Esempio n. 1
0
def find_network(network, user_id):
    result = {network: user_id}
    friends = handler[network](user_id)
    if network == 'vk':
        query = Q(vk__in=friends)
    elif network == 'instagram':
        query = Q(instagram__in=friends)
    elif network == 'twitter':
        query = Q(twitter__in=friends)
    else:
        return result
    data = {'vk': list(), 'instagram': list(), 'twitter': list()}
    for profile in Profile.objects(query):
        if network != 'vk' and profile.vk:
            for id in profile.vk:
                data['vk'].append(id)
        if network != 'instagram' and profile.instagram:
            for id in profile.instagram:
                data['instagram'].append(id)
        if network != 'twitter' and profile.twitter:
            for id in profile.twitter:
                data['twitter'].append(id)
    print("Profiles from database is finded")  # DEBUG
    friends = {'vk': list(), 'instagram': list(), 'twitter': list()}
    with ThreadPoolExecutor(max_workers=12) as executor:
        for key in data:
            for item in executor.map(lambda x: handler[key](x), data[key]):
                for uid in item:
                    friends[key].append(uid)
            print("Parsing complete " + key)
    print("Friend list is generated")  # DEBUG
    temp = {'vk': list(), 'instagram': list(), 'twitter': list()}
    for key in data:
        for id in data[key]:
            response = run([
                'dotnet', 'trainer/Bindex.Trainer.dll', network,
                str(user_id), key,
                str(id)
            ],
                           stdout=PIPE,
                           stderr=PIPE,
                           universal_newlines=True)
            #try:
            vector = [
                float(item) for item in response.stdout.strip().split(' ')
            ]
            with graph.as_default():
                factor = model.predict(np.array([vector]))[0][0]
            if factor >= 0.5:
                temp[key].append((id, factor))
            #except:
            #pass
    print("Neural network is used")  # DEBUG
    for key in temp:
        if not temp[key]:
            continue
        result[key] = int(max(temp[key], key=lambda x: x[1])[0])
    print("Profiles from other networks is finded")  # DEBUG
    return result