Curso de programación de criptomonedas con Python - 4. Recopilar datos uno a uno: diccionarios

in #spanish8 years ago (edited)

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ía requests y le indicamos la URL entre paréntesis y comillas. Al diccionario que nos devuelve le denominamos info_mercados.
  • Línea 3: Imprimos la información lastpara el mercado de BTC_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.


Índice del curso:

1. Presentación
2. Cómo empezar: llamadas a APIs
3. Envolturas
4. Recopilar datos uno a uno: diccionarios

Sort:  

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!

Coin Marketplace

STEEM 0.15
TRX 0.16
JST 0.028
BTC 67340.80
ETH 2419.68
USDT 1.00
SBD 2.35