Curso de programación de criptomonedas con Python - 6. Funciones. Crear un bot informador de STEEM (parte 1/2)

in #spanish7 years ago (edited)

Ya hemos visto en las clases anteriores cómo recopilar los datos de las APIs usando las claves de los diccionarios y los índices de las listas. Ahora vamos a usar todo esto junto, a través de las envolturas, para crear un informe sobre la monedas STEEM y enviarlo a nuestro correo.

Las funciones

¿Recuerdas que en la lección anterior hacíamos la siguiente llamada?

from bittrex import bittrex
info_steem = bittrex.getmarketsummary('BTC-STEEM')
print info_steem

Lo que estábamos haciendo era llamar a una función. La segunda línea significa que la variable info_steem se referirá a una llamada a la clase bittrex, que es el nombre de la clase en la envoltura bittrex. La función que tomamos de esa clase es getmarketsummary(). Para referirnos a una función dentro de una clase utilizamos el .

A las funciones se le pueden pasar parámetros. Esta función requería que le indicásemos el mercado a cuya información queremos acceder, en este caso'BTC-STEEM'. Los parámetros que pasamos a las funciones se escriben entre comillas simples ' o dobles ". Si hay más de un parámetro los separamos por ,

Bot informador de STEEM

Vamos a crear nuestra primera aplicación en Python. Se tratará de un pequeño bot que haga llamadas a las APIs de Coinmarketcap, Bittrex y Poloniex. Nos informará sobre el último precio de STEEM en Bittrex y en Poloniex, así como el porcentaje de cambio en 24 horas y en 7 días en Coinmarketcap.

Para ello, vamos a crear una carpeta y dentro vamos a meter las envolturas de coinmarketcap, bittrex y poloniex. Las dos primeras puedes encontrarlas en clases anteriores, la última aquí.

Cuando tengamos las 3, creamos un archivo .py con el nombre que más nos guste e importamos las envolturas con el siguiente código:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import smtplib, ast
from bittrex import bittrex
from poloniex import poloniex
from coinmarketcap import Market

En este código vemos dos formas de importar librerías diferentes. En la primera línea smtplib indica una librería python que usaremos para enviar correos electrónicos. Abajo verás para qué sirve la segunda librería. Las demás líneas indican: from (del archivo), nombre del archivo, importa una clase. Si vamos a las envolturas veremos que las clases que las forman tienen los nombres bittrex, poloniex y Market.

API Key y API Secret

Las envolturas de bittrex y poloniex requieren que introduzcamos unos parámetros adicionales para funcionar. Son las claves que las exchanges nos proporcionan para operar desde sus APIs. Para conseguirlas debemos ir a las preferencias de nuestra cuenta en las exchanges y las introducimos a nuestro código de la siguiente manera:

bittrex = bittrex('Tu APIKEY', 'Tu APISECRET')
poloniex = poloniex('Tu APIKEY', tu APISECRET')
coinmarketcap = Market()

Con esto entiendo que asumes los riesgos que conlleva el no tener encriptada la información sensible guardada en tu ordenador, así como el uso inconsciente de las APIs de las exchanges.

Recopilando los datos

Ahora vamos a recopilar los datos que necesitamos. Primero agregamos el último precio en Bittrex. Para saber cómo conseguirlo vamos a la documentación de la API de Bittrex. Allí buscamos cual es la llamada que debemos realizar para conseguir ese dato. En este caso será 'getmarketsummary'. Entonces nos vamos a bittrex.py y comprobamos cómo se llama la función que realiza esa llamada. Casi siempre, los creadores de las envolturas le ponen el mismo nombre para no marear la perdiz. Él código será el siguiente:

steem_bittrex = bittrex.gettticker('BTC-STEEM')
ultimo_steem_bittrex = steem_bittrex['Last']

En las clases anteriores aprendimos que significa esto. Llamamos a la clase bittrex ubicada en bittrex.py, le pasamos la función getticker() y su argumento 'BTC-STEEM'. Del diccionario que obtenemos con toda la información del par BTC-STEEM seleccionamos la clave que indica el último precio con ['Last']

Intenta obtener el precio en Poloniex usando su envoltura y la documentación de su API. Cuando hayamos recopilado todos los datos debería quedarnos algo así:

steem_bittrex = bittrex.getticker('BTC-STEEM')
ultimo_steem_bittrex = steem_bittrex['Last']
ultimo_steem_poloniex = poloniex.returnTicker().get('BTC_STEEM')['last']
coinmarket_steem = ast.literal_eval(coinmarketcap.ticker('steem'))
porcentaje_24h = coinmarket_steem[0]['percent_change_24h']
porcentaje_7d = coinmarket_steem[0]['percent_change_7d']

Las dos cosasnuevas que vemos aquí es la librería ast que importamos al principio, (con la API de coinmarketcap hay que usarla, ya que esta API nos devuelve los datos en formato de cadena de caracteres), además de .get en la llamada a poloniex. Para más información sobre esto click aquí.

ast.literal_eval() es una función que sirve para convertir las cadenas de texto en lo que detecte la librería, en este caso dos diccionarios anidados. Si no usamos ast no podremos acceder a los datos que hay dentro del diccionario. Para saber que tipo de dato nos está retornando coinmarketcap podemos usar la función type(), así:

print type(coinmarketcap.ticker('steem'))

Otro punto a tener en cuenta es que coinmarketcap nos pide el nombre completo de la moneda al pasarle el parámetro. No funcionará si le pasamos 'BTC', hay que escribir 'bitcoin'.

Para comprobar si lo hemos hecho bien imprimimos los datos:

print ultimo_steem_bittrex
print ultimo_steem_poloniex]
print porcentaje_24h 
print porcentaje_7d

En la segunda parte veremos como enviarlos a nuestro correo bien ordenados, ¡hasta entonces!


Índice del curso:

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

Sort:  

Interesante, recomiendo el trabajo que hace @someguy123 el cual ha hecho una serie de utilerias como steemdb, steemdns y steem-utils en python.
https://github.com/angelog/steam-utils

Hey creo que te equivocas de link, esto es STEEM, steam es otra cosa para descargar juegos.

Me parece interesante pero no se para que vamos a enviar esto al correo :S, tomamos un rumbo raro :D

Te explico para qué uso yo este código. Todas las mañanas miro el correo en android. Con una aplicación de PlayStore llamada Tasker automatizo que todos los días a una determinada hora me lleguen datos al correo. Así no tengo que estar mirando en diferentes exchanges, con todo el tiempo que eso conlleva. Todo es echarle imaginación, ¡un saludo!

Le he dado vueltas al asunto y aun no me queda claro.... esta bien puedes revisar losd atos en el correo mas facilmente... Yo trabajo con ODOO aunque estoy atareado ultimamente me tome la molestia de mejorar un poco el codigo... no lo voy a postear por aqui si no en mi blog para no robarte la idea... pero pdoria hacer un modulo sencillo en ODOO9 y asi la informacion la podrias ver en la web con graficas y mas... no se que opinas? tengo la idea de hacer una APP desde ODOO, lo hare en odoo por que mapea la base de datos y tiene cron integrado ademas puedes crear una Pagina Web Facilmente... creare un post de ODOO9 esta semana para que te hags una idea del poder de ODOO saludos

Sería estupendo, cuando tenga más tiempo me pondré a investigarlo en profundidad, pero si tu lo subes me ahorras trabajo. ¡Un saludo!

This post has been linked to from another place on Steem.

Learn more about and upvote to support linkback bot v0.5. Flag this comment if you don't want the bot to continue posting linkbacks for your posts.

Built by @ontofractal

Coin Marketplace

STEEM 0.28
TRX 0.11
JST 0.034
BTC 66137.63
ETH 3161.38
USDT 1.00
SBD 4.13