Curso de programación de criptomonedas con Python - 5. Recopilar datos uno a uno: listas
spanish·@mondeja·
0.000 HBDCurso de programación de criptomonedas con Python - 5. Recopilar datos uno a uno: listas
Hoy vamos a ver cómo recopilar datos del exchange Bittrex usando una envoltura para Python. También veremos cómo mostrar los datos limpios y ordenados. Así que pongámonos manos a la obra. <center>https://img1.steemit.com/0x0/https://s16.postimg.org/mx0rdgp8l/Pics_Art_10_20_09_43_49.png</center> En [la clase anterior](https://steemit.com/spanish/@mondeja/curso-de-programacion-de-criptomonedas-con-python-4-recopilar-datos-uno-a-uno-diccionarios) aprendimos a guardar los datos de Poloniex. La API de esta exchange nos provee los datos en diccionarios anidados, siguiendo la siguiente estructura: ~~~ {'elemento1': {'elemento1_1': dato, 'elemento1_2': dato...}, elemento2: {...}...} ~~~ Pero la API de Bittrex nos proveerá la información en diccionarios dentro de listas, por lo que la forma de acceder a sus datos cambia un poco. ### Listas Las [listas](http://pythonya.appspot.com/detalleconcepto?deta=Estructura%20de%20datos%20tipo%20lista) son conjuntos de datos más simples que los diccionarios. Mientras los diccionarios tienen una claves que corresponden a valores y podemos acceder a sus valores insertando sus claves así `['clave'], las listas van a ser simplemente datos uno detrás de otro. Una lista se representa así: ~~~ [dato1, dato2, dato3...] ~~~ ### La API de Bittrex Primero creamos un archivo con la extensión '.py', en un editor que corra con nuestro intérprete Python. Vamos a ir a la [documentación de la API](https://bittrex.com/Home/Api). También vamos a descargar una envoltura para Python, a mi me gusta [esta](https://github.com/ndri/python-bittrex/blob/master/bittrex.py), aunque no es la que viene como ejemplo en la documentación de la API. <center>https://img1.steemit.com/0x0/http://www.siglo25.com/images/steemit/python_a_bittrex.jpg</center> Descargamos el archivo 'bittrex.py' y lo guardamos en la misma carpeta donde hemos creado nuestro archivo con la extensión '.py'. ### Recopilar datos de Bittrex Vamos a hacer un ejemplo sencillo para entender la diferencia de trabajar con listas y con diccionarios. Escribimos lo siguiente en el editor de nuestro intérprete: ~~~ from bittrex import bittrex info_mercados = bittrex.getmarketsummaries() print info_mercados ~~~ Ahora obtendremos lo que podemos ver [aquí](https://bittrex.com/api/v1.1/public/getmarketsummaries), quitando esta parte del código: `{"success":true,"message":"","result":` Eso se debe a que esta envoltura está configurada para que nos devuelva el dato "result" o "message" del primer diccionario que Bittrex nos envía. <center>https://s18.postimg.org/bahm98wa1/envoltura_bittrex_result.jpg</center> Así que en nuestro intérprete aparece una lista de diccionarios. Para acceder a los valores de una lista sólo hay que poner el nombre de la lista seguido de [n], donde n será un número entero que indicará la posición que se encuentra el dato que queremos de la lista. Lo que debemos tener en cuenta es que el primer dato estará en la posición 0, no en 1. Lo entenderemos mejor con un ejemplo, cambiamos la última línea del código: ~~~ print info_mercados[0] ~~~ Ahora nos devuelve la información para la primera moneda. Pero esto en la práctica no nos sirve de mucho. Nosotros queremos acceder a un mercado en particular, BTC-STEEM. ¿Cómo lo hacemos? Afortunadamente la API trae otro método para referirnos a una moneda concreta: ~~~ from bittrex import bittrex info_steem = bittrex.getmarketsummary('BTC-STEEM') print info_steem ~~~ Con este ejemplo vamos a introducirnos en las [funciones](http://pythonya.appspot.com/detalleconcepto?deta=Funciones), concepto que profundizaremos en próximas entregas. De todas formas explico lo que hemos hecho en la 2ª línea: `bittrex`llama a la clase que configura la envoltura, `.` indica que accedemos a una función dentro de la clase, `getmarketsummary` indica la función y `STEEM` es el parámetro que pasamos a dicha función. ### Diccionarios, listas y funciones Al obtener datos concretos de las API tendremos en cuenta, principalmente, 3 formas de hacerlo: 1. **Diccionarios**: en la respuesta aparecen como `{}`, y para referirnos a un dato dentro de ellos utilizaremos `['dato']`, o `["dato"]`(Python interpreta las comillas simples y las dobles de la misma forma). 2. **Listas**: en la respuesta aparecen como `[]`, y para referirnos a un dato dentro de ellas utilizaremos [n] donde n es un número entero. 3. **Funciones**: las envolturas nos facilitan el no tener que escribir constantemente URLs complicadas. Están basadas en funciones a las que le pasamos parámetros para que completen las URLs de las llamadas. ### Respuestas legibles Imprimimos limpiamente el precio más alto que ha alcanzado hoy STEEM en Bittrex con el siguiente código: ~~~ from bittrex import bittrex info_steem = bittrex.getmarketsummary('BTC-STEEM') print "El precio más alto que ha alcanzado STEEM en Bittrex durante las últimas 24 horas, ha sido de: ", info_steem['High'], " BTC" ~~~ ____________________________________ ### <center>Índice del curso:</center> <center>[1. Presentación](https://steemit.com/spanish/@mondeja/curso-de-programacion-de-criptomonedas-en-python-1-presentacion)</center><center>[2. Cómo empezar: llamadas a APIs](https://steemit.com/spanish/@mondeja/curso-de-programacion-de-criptomonedas-en-python-2-como-empezar-llamadas-a-apis)</center><center>[3. Envolturas](https://steemit.com/spanish/@mondeja/curso-de-programacion-de-criptomonedas-en-python-3-envolturas)</center><center>[4. Recopilar datos uno a uno: diccionarios](https://steemit.com/spanish/@mondeja/curso-de-programacion-de-criptomonedas-con-python-4-recopilar-datos-uno-a-uno-diccionarios)</center><center>[5. Recopilar datos uno a uno: listas](https://steemit.com/spanish/@mondeja/curso-de-programacion-de-criptomonedas-con-python-5-recopilar-datos-uno-a-uno-listas)</center>
👍 mondeja, adelja, aresebel, hugimande, rozmarin, lerewderiity, nuevereccio, miercenimez, yozragoretejar, drac59, mipof, gargon, pgarcgo, wartrapa, titin, teo, kajirana, radolivlion, grilok, danretert, miedefirote, kulagrinnpezel, conjugara, zeraser, fegaskelelak, todero, segeyv, kijukil, ahead, xer, ethansteem, acquire, twinner, carinae, anyx, cheetah, laonie9, val-b, ned, lafona-miner, delegate.lafona, lafona5, patrice, zoee, jlufer, trans-juanmi, oecp85, mallorca, seisges, juanmiguelsalas, laonie, laonie1, laonie2, laonie3, laonie4, laonie5, laonie6, laonie7, laonie8, kimziv, bacchist, sisterholics, myfirst, somebody, kingofcoin, flysaga, midnightoil, elfkitchen, fishingvideos, xiaokongcom, xianjun, microluck, laonie11, bestoftherest, nelyp, xiaofang, birds90, dave-hughes, wongshiying, clement, azaan, poseidon, royalmacro, bergy, psitorn, drinkzya, wingz, steem1653, pjheinz, imag1ne, blockcodes, maryfromsochi, dave-mohican, hisnameisolllie, numberone, psyduck, stringer, neka, pindopa, elcotuo,