""" 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 # Gör fb-scraper till arbetsmapp chdir(dirname(dirname(abspath(__file__)))) from arangodb import arango_connect import config from helpers import 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)