You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
141 lines
4.4 KiB
141 lines
4.4 KiB
""" 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) |