Skip to content

Instantly share code, notes, and snippets.

@andandandand
Forked from rgoncalves-95/Localbitcoins.py
Created April 14, 2018 21:51
Show Gist options
  • Save andandandand/bdbc850998aa24c007065d8becd8c526 to your computer and use it in GitHub Desktop.
Save andandandand/bdbc850998aa24c007065d8becd8c526 to your computer and use it in GitHub Desktop.

Revisions

  1. @rgoncalves-95 rgoncalves-95 created this gist Apr 4, 2018.
    61 changes: 61 additions & 0 deletions Localbitcoins.py
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,61 @@
    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))