Skip to content

Instantly share code, notes, and snippets.

@Mikodes
Created January 16, 2020 00:11
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Mikodes/982f686d29e638c6c6a73e8087ce2500 to your computer and use it in GitHub Desktop.
Save Mikodes/982f686d29e638c6c6a73e8087ce2500 to your computer and use it in GitHub Desktop.
import ConfigParser
import sys
from datetime import datetime
import MySQLdb
import ccxt
exchanges = ['binance', 'bitfinex', 'bittrex', 'hitbtc', 'poloniex']
exchanges_id = {
'binance': 5,
'bitfinex': 6,
'bittrex': 1,
'hitbtc': 8,
'poloniex': 2,
}
def update_user_account_api_is_ok(cursor, echange_id, user_id):
cursor.execute('UPDATE accounts_py SET error=0 ,message="API KEY Correcta" WHERE id_user = "' + user_id
+ '" and exchange = ' + str(echange_id))
cursor.execute(
'UPDATE accounts SET error=0 ,message="API KEY Correcta" WHERE id_user = "' + user_id + '" and exchange = ' + str(
echange_id))
def update_user_account_api_is_down(cursor, echange_id, user_id):
cursor.execute('UPDATE accounts_py SET error=1 ,message="API KEY incorrecta" WHERE id_user = "' + user_id
+ '" and exchange = ' + str(echange_id))
cursor.execute(
'UPDATE accounts SET error=1 ,message="API KEY incorrecta" WHERE id_user = "' + user_id + '" and exchange = ' + str(
echange_id))
def get_action_from_pila(cursor):
cursor.execute("SELECT id_user,titulo,description,type,date,date2,status FROM pila WHERE status=0 ")
return cursor.fetchall()
def update_user_pila_status(cursor, user_id, status, old_status):
cursor.execute(
"UPDATE pila SET status = %d ,date2 = NOW() WHERE status= %d AND id_user ='%s'" % (
status, old_status, str(user_id)))
def get_connection_info():
config = ConfigParser.RawConfigParser()
config.read('/home/ubuntu/synapsebot/config/config.ini')
# config.read('D:\Projectos\ctrading\python\config\config.ini')
env = config.get('ENV', 'DB_ENV')
return {
'name': config.get(env, 'DB_NAME'),
'password': config.get(env, 'DB_PASSWORD'),
'host': config.get(env, 'DB_IP'),
'user': config.get(env, 'DB_USER'),
}
def get_data_from_user_exhange(exhange_id, private_key, secret):
exchange_key = [key for key, value in exchanges_id.iteritems() if value == exhange_id][0]
exchange = getattr(ccxt, exchange_key)
data = exchange({'apiKey': private_key,
'secret': secret}).fetch_balance()
return data
def get_user_exhanges_account(cursor, id_user):
cursor.execute('SELECT * FROM accounts_py WHERE id_user = "' + id_user + '"')
return cursor.fetchall()
def update_user_wallet(cursor, echange_id, user_id, data_exhange):
time = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
cursor.execute('DELETE FROM wallets WHERE exchange=%d AND idusuario ="%s"' % (echange_id, str(user_id)))
for data in data_exhange['total']:
value = data_exhange.get(data)
if value['total'] <= 0:
continue
cursor.execute("""INSERT INTO wallets (idusuario, exchange, currency, fecha,free,used)
VALUES (%s, %s, %s, %s,%s,%s) """,
(user_id, echange_id, data, time, value['free'], value['used']))
conexion_data = get_connection_info()
db_conexion = MySQLdb.connect(conexion_data.get('host'), conexion_data.get('user'), conexion_data.get('password'),
conexion_data.get('name'))
cursor = db_conexion.cursor(MySQLdb.cursors.DictCursor)
actions = get_action_from_pila(cursor)
for action in actions:
user_id = action['id_user']
update_user_pila_status(cursor, user_id, 1, 0)
user_account = get_user_exhanges_account(cursor, user_id)
for account in user_account:
try:
exhange_data = get_data_from_user_exhange(account['exchange'], account['public'], account['private'])
update_user_account_api_is_ok(cursor, account['exchange'], user_id)
update_user_wallet(cursor, account['exchange'], user_id, exhange_data)
db_conexion.commit()
except (ccxt.ExchangeError, ccxt.AuthenticationError) as error:
update_user_account_api_is_down(cursor, account['exchange'], user_id)
update_user_pila_status(cursor, user_id, 2, 1)
db_conexion.commit()
cursor.close()
db_conexion.close()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment