""" Import profiles from accs""" from os import chdir from getpass import getpass from os.path import abspath, dirname from random import randint from time import sleep import base64 import json import requests # Gör fb-scraper till arbetsmapp chdir(dirname(dirname(abspath(__file__)))) from arangodb import arango_connect import config from helpers import now, nowstamp def used_servers(profiles='profiles'): cursor = db.aql.execute( """ FOR doc IN @@col RETURN doc._key """, bind_vars={'@col': profiles} ) servers = [doc for doc in cursor] return servers def used_servers(profiles='profiles'): """ Check what servers are used. """ cursor = db.aql.execute( """ FOR doc IN @@col RETURN doc._key """, bind_vars={'@col': profiles} ) servers = [doc for doc in cursor] return servers def get_server(db, country, servers='servers', profiles='profiles'): """ Hämtar en server åt profilen """ if country == 'any': cursor = db.aql.execute( """ FOR doc IN @@col FILTER doc.country not in ['us', 'se'] RETURN {proxies: doc.proxies, country: doc.country, id: doc.id, _key:doc._key, city:doc.city, server:doc.server, server_connect:doc.server_connect} """, bind_vars={'@col': servers}) else: cursor = db.aql.execute( """ FOR doc IN @@servers FILTER doc.country == @country RETURN {proxies: doc.proxies, country: doc.country, id: doc.id, _key:doc._key, city:doc.city, server:doc.server, server_connect:doc.server_connect} """, bind_vars={'country': country, '@servers': servers} ) servers = [] used = used_servers(profiles) for server in cursor: if server['_key'] not in used: servers.append(server) if servers != []: server = servers[randint(0, len(servers)-1)] return server def used_emails(db, collection): cursor = db.aql.execute( """ FOR doc IN @@col RETURN doc.email """, bind_vars={'@col': collection}) return [email for email in cursor] def to_profiles(db, profiles, servers, country='us', accs='accs', continuous=True): """ Tar en prifil från accs och en server från servers och lägger in i profiles. Args: db ([type]): Arango database. profiles (str, optional): . Profiles to upload to. servers (str, optional): Proxyservers to use. country (str, optional): Country for profiles. Defaults to 'us'. accs (str, optional): Table for accounts. Defaults to 'accs'. continuous (bool, optional): If "true" the update happens every other day. Defaults to True. """ while True: count = 0 for profile in [i for i in db.collection(accs).all()]: count +=1 if profile['email'] in used_emails(db, profiles): continue id_acc = profile['_id'] del profile['_id'] del profile['_rev'] server = get_server(db, country, servers, profiles) if server == None: print(f'Inlagda profiler: {count}\nInga fler lediga servrar.') break profile["server"] = server["server"] profile["server_connect"] = server["server_connect"] profile["_key"] = server["_key"]#.replace(':', '') profile["in_use"] = nowstamp() profile['proxies'] = server['proxies'] db.insert_document(profiles, profile) sleep(0.1) db.delete_document(id_acc) print('Inlagda profiler:', count, end='\r') if not continuous: break sleep(86400) if __name__ == "__main__": # Starta koppling till arango. pwd = 'concert-hangar-mirth-salk-DECAL' db = arango_connect(pwd, username='Accs') ############################### ### Variabler att ställa in ### country='us' profiles = 'profiles_webshare' # profiles_webshare, profiles_mullvad servers = 'servers_webshare' ############################### to_profiles(db, profiles=profiles, country=country, servers=servers, continuous=True)