es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Parámetros de filtro de la API REST en JSON.

Estoy intentando obtener los últimos datos de la API de Bitmex.

URI base: https://www.bitmex.com/api/v1

Realmente no entiendo cómo obtener los últimos datos (de hoy) utilizando filtros: https://www.bitmex.com/app/restAPI

Aquí está mi código:

from datetime import date
import requests
import json
import pandas as pd

today = date.today()
d1 = today.strftime("%Y-%m-%d")

def parser():
    today = date.today()
    d1 = today.strftime("%Y-%m-%d")
    return f'https://www.bitmex.com/api/v1/trade?symbol=.BVOL24H&startTime={d1}×tamp.time=12:00:00.000&columns=price';

response = requests.get(parser()).json()

for elem in response:
    print(elem)

y la respuesta es:

...
{'symbol': '.BVOL24H', 'timestamp': '2021-12-27T08:05:00.000Z', 'price': 2.02}
{'symbol': '.BVOL24H', 'timestamp': '2021-12-27T08:10:00.000Z', 'price': 2.02}
{'symbol': '.BVOL24H', 'timestamp': '2021-12-27T08:15:00.000Z', 'price': 2.02}

Faltan algunas horas, intenté usar endTime, startTime y Count sin éxito. Creo que necesito pasar otro filtro como endTime = now y timestamp.time = now, pero no sé cómo enviar un payload o cómo codificarlo en la URL.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para obtener los datos más recientes de la API de Bitmex, puedes intentar utilizar el punto final /trade con los filtros adecuados. Aquí tienes un fragmento de código actualizado que debería funcionar:

    from datetime import datetime, timedelta
    import requests
    
    # Definir la URL base
    base_url = "https://www.bitmex.com/api/v1"
    
    # Calcular las horas de inicio y fin
    end_time = datetime.utcnow()
    start_time = end_time - timedelta(seconds=10)
    
    # Definir los filtros
    filters = {
        "symbol": ".BVOL24H",
        "startTime": start_time.isoformat(),
        "endTime": end_time.isoformat(),
        "reverse": True,  # Obtener primero los datos más recientes
        "count": 100,  # Número máximo de registros a devolver
        "partial": False  # Solo devolver registros completos
    }
    
    # Codificar los filtros como parámetros de URL
    params = "&".join([f"{k}={v}" for k, v in filters.items()])
    
    # Construir la URL final
    url = f"{base_url}/trade?{params}"
    
    # Enviar la solicitud y obtener la respuesta
    response = requests.get(url).json()
    
    # Imprimir la respuesta
    for trade in response:
        print(trade)
    

    Así es como funciona el código:

    1. Definimos la URL base, que es `https://www.bitmex.com/api/v1`.
    2. Calculamos las horas de inicio y fin utilizando el módulo datetime. En este ejemplo, establecemos la hora de fin en el tiempo UTC actual y la hora de inicio en 10 segundos antes.
    3. Definimos los filtros que queremos aplicar creando un diccionario con los pares clave-valor correspondientes. Aquí, establecemos el símbolo en .BVOL24H (cambia esto por el símbolo que desees), la hora de inicio en start_time que calculamos anteriormente, la hora de fin en el tiempo actual, y configuramos los demás filtros para obtener sólo registros completos en orden cronológico inverso (es decir, los registros más recientes primero).
    4. Codificamos los filtros como parámetros de URL convirtiendo los pares clave-valor en una cadena de la forma clave1=valor1&clave2=valor2&....
    5. Construimos la URL final concatenando la URL base, el punto final (/trade), y los filtros codificados como parámetros de URL.
    6. Enviamos la solicitud HTTP GET a la API de Bitmex utilizando el módulo requests y obtenemos la respuesta como un objeto JSON.
    7. Iteramos a través de las transacciones en la respuesta e imprimimos cada transacción.

    Ten en cuenta que la documentación de la API de Bitmex es algo limitada y puede requerir un poco de prueba y error para determinar los filtros adecuados que debes utilizar. Además, ten en cuenta que la API tiene límites de velocidad y otras restricciones que debes leer y seguir cuidadosamente para evitar ser bloqueado o prohibido.

Comments are closed.