Curso de programación de criptomonedas con Python - 4. Recopilar datos uno a uno: diccionarios
Bienvenido a una nueva clase del curso. Hoy vamos a aprender como seleccionar los datos que queremos recopilar uno a uno. Más adelante automatizaremos esta tarea para recopilar grandes cantidades, pero antes debemos entender cómo trabajar con listas y diccionarios en Python. Así que manos a la obra.
Tipos de datos
Python distinte muchos tipos de datos: cadenas, números decimales, números enteros, listas, diccionarios, booleanos... Unir un tipo de dato a un nombre se le llama definir una variable. Para más información sobre los tipos de datos entra aquí.
En las clases anteriores, accedíamos a una URL que nos devolvía muchos datos. Para que nos devuelva un sólo dato debemos indicarle a Python que acceda a ellos. Al acceder a una URL, la información viene codificada en varios tipos de datos: listas, diccionarios, cadenas, unicode, números (enteros o decimales)... Así que tenemos que entender cómo la API nos está devolviendo la información en bruto para acceder al dato que necesitamos.
Vamos a ir esta vez a la API de la exchange Poloniex. Allí buscamos en la parte de 'Public API Methods'. Más adelante veremos cómo llamar a los métodos de trading, por ahora jugaremos con los métodos públicos. A través de la siguiente URL, vamos a comprobar la información de los mercados en Poloniex: https://poloniex.com/public?command=returnTicker
También puedes acceder a ella directamente desde Python con el siguiente código, que ya explicamos en una clase anterior:
import requests
print requests.get("https://poloniex.com/public?command=returnTicker")
Diccionarios
Menudo mareo de datos ¿eh? No te sientas abrumado, es muy fácil recoger los que queremos. Para ellos nos fijamos primero en cual es el primer símbolo que nos devuelve la llamada. En este caso es un corchete {
de apertura. Esto significa que Poloniex nos está enviando un diccionario.
Así que vamos a darle un nombre al diccionario que nos está mandando Poloniex. Borramos la segunda línea del código y lo dejamos así, aunque puedes ponerle el nombre que quieras:
import requests
info_mercados = requests.get("https://poloniex.com/public?command=returnTicker")
print info_mercados
Acceso a un dato concreto
Ha llegado el momento de acceder al mercado que queremos. Presionamos intro para ir a la respuesta. En el mar de datos podemos observar que cada mercado (por ejemplo: BTC_1CR) va seguido de :
y luego de un nuevo diccionario donde está la información. Es un diccionario dentro del diccionario con todos los mercados. Vamos a acceder primero al mercado de BTC_ETH. Para ello agregamos a nuestro código ´['BTC_ETH']`. La tercera línea quedará así:
print info_mercados['BTC_ETH']
Ahora Python nos devuelve un diccionario con la información para el mercado del par Bitcoin-Ether. Para acceder a la información de ese diccionario simplemente volvemos a agregar al final otros ['']
con lo que queremos obtener. En este caso a mi me interesa el precio de la última transacción:
print info_mercados['BTC_ETH']['last']
Ahora Python nos devolverá el último precio de compraventa de Ether en Poloniex. Explico el código completo para que no quede ninguna duda:
import requests
info_mercados = requests.get("https://poloniex.com/public?command=returnTicker")
print info_mercados['BTC_ETH']['last']
- Línea 1: importamos la librería request para poder acceder a URLs desde Python.
- Línea 2: llamamos al método
get
de la libreríarequests
y le indicamos la URL entre paréntesis y comillas. Al diccionario que nos devuelve le denominamosinfo_mercados
. - Línea 3: Imprimos la información
last
para el mercado deBTC_ETH
.
Por supuesto, las dos últimas líneas podemos resumirlas en una:
print requests.get("https://poloniex.com/public?command=return24hVolume")['BTC_ETH']['last']
Hasta aquí la lección de hoy. En la próxima veremos cómo acceder a los datos si vienen dentro de listas y a ordenar los datos de manera que nuestra respuesta quede limpia y legible. Nos vemos en la próxima.
El ejercicio no funciona.... tranquilo nada es perfecto... me tome la molestia de investigar y arreglarlo :D
el problema es que info_mercados no tiene la estructura diccionario q esperamos... podemos verificar asi:
print type(info_mercados)
obtendremos aslgo como esto:
<class 'requests.models.Response'>
Eso no es un diccionario.. ahora para cambiarla Json a diccionario hacemos esto:
info_mercados = info_mercados.json()
print type(info_mercados)
Son 2 lineas que vamos a agregar, y obtendremos esto:
<type 'dict'>
Ahora si tenemos 1 diccionario :D, por lo que podemos acceder a los datos de la manera que se menciono antes...
print info_mercados[u'BTC_RBY']
y obtenemos esto
{u'last': u'0.00019569', u'quoteVolume': u'20370.58160801', u'high24hr': u'0.00021210', u'isFrozen': u'0', u'highestBid': u'0.00019456', u'percentChange': u'-0.05239455', u'low24hr': u'0.00019458', u'lowestAsk': u'0.00019569', u'id': 81, u'baseVolume': u'4.20498647'}
voy a ver si posteo esto completo en mi blog stickybitshell.wordpress.com, haya encontraran mas ejercicios de python entre otras cosas... invitados :D
Quiero darte las gracias por publicar este curso.
Hice las correcciones y aun no me funciona.
Saludos
Que error te da amigo?
En mi blog tengo algunos post de este tema que te pueden ayudar, saludos y estamos para servirte
import requests
info_mercados = requests.get("https://poloniex.com/public?command=returnTicker")
info_mercados = info_mercados.json()
print(type(info_mercados))
print(info_mercados[u'BTC_ETH']['last'])
Deberia funcionarte así
Man Gracias!