Skip to content

Instantly share code, notes, and snippets.

@rgoncalves-95
Created April 4, 2018 20:45
Show Gist options
  • Save rgoncalves-95/192d0da1ce53b5306565873e62c5a03e to your computer and use it in GitHub Desktop.
Save rgoncalves-95/192d0da1ce53b5306565873e62c5a03e to your computer and use it in GitHub Desktop.
Script que descarga las transacciones realizadas en Bolívares en Localbitcoins
import json
import urllib.request
import datetime
import time
import pandas as pd
comienzo = time.time()
def hacer_request(tid):
url = "https://localbitcoins.com/bitcoincharts/VEF/trades.json?since="
file = urllib.request.urlopen(url+tid)
data = file.read().decode()
parsed_file = json.loads(data)
return parsed_file
# Localbitcoins tiene un máximo de 500 transacciones por request. El tid es la referencia única de cada transacción
# Para recolectar los datos del API con mayor libertad, opté por colocar los límites iniciales y finales del
# conjunto de transacciones que quería obtener. limite_inferior es el número de transacción por la cual
# el script empezará a buscar. Más abajo hay una condición en la que defino el límite final.
limite_inferior = "12500000"
limite_superior = 13000000
hoy = time.time()
tid = []
price = []
date = []
amount = []
while hacer_request(limite_inferior)[-1]["date"] < hoy:
nuevo_tid = str(hacer_request(limite_inferior)[-1]["tid"])
for x in hacer_request(limite_inferior):
fecha_larga = datetime.datetime.fromtimestamp(x['date'])
fecha_sin_horas = fecha_larga.strftime('%Y-%m-%d')
tid.append(x['tid'])
price.append(float(x['price']))
date.append(datetime.datetime.strptime(fecha_sin_horas, '%Y-%m-%d'))
amount.append(float(x['amount']))
limite_inferior = nuevo_tid
if int(limite_inferior) > limite_superior:
break
# El script me falla en mi pc si el rango de transacciones que coloco es muy amplio. No sé si es un problema
# de conexión. Recomiendo bandas pequeñas, como de 1 millón entre el tid inicial y el final
# Como referencia, las transacciones más recientes van por el tid 12 millones.
d = {'tid': tid, 'date': date, 'Amount (BTC)': amount, 'Price': price}
df = pd.DataFrame(data= d)
df = df.sort_values(by='date')
df = df.set_index('date')
final = time.time()
df.to_csv('transacciones.csv', sep= '\t')
print(df)
print("Tardé %s minutos en llegar a este resultado" % round((final - comienzo) / 60, 2))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment