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

""" 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)