Curso de programación de criptomonedas con Python - 11. Crear un bot recopilador de grandes cantidades de datos (parte 4/5)

in spanish •  last year

Hoy vamos a terminar al fin la construcción de nuestro recopilador de datos. Crearemos los dos módulos que faltan: el identificador() y recopilacion() (el núcleo del programa que lo pondrá en funcionamiento). Al lío...

En la próxima y última parte crearemos una función que nos permita consultar nuestra base de datos buscando por día, moneda e información de la moneda, pero al término de esta lección ya podremos poner en marcha nuestro bot.

La librería os

Primero vamos a importar una nueva librería con la que trabajaremos hoy. Nuestra primera línea de importaciones quedará así:

import ast, json, datetime, os

Esta librería nos permite recorrer nuestro sistema de carpetas por ficheros, crear carpetas, ver los archivos que tiene una carpeta... entre muchas posibilidades. Más información sobre este módulo aquí

Numerar cada entrada

Ahora vamos a adentrarnos en el código del identificador. Este nos servirá para muchos propósitos. Imagina que queremos recoger los datos de esta semana y estamos a día 4 del mes. En lugar de utilizar el nombre de los archivos para iterar sobre las fechas, con el problema que supone el pasar del 1_11_2016 al 31_10_2016, ponemos a cada entrada en la base de datos un número y sólo debemos iterar sobre un rango desde el identificador de hoy, hasta el identificador de hoy menos 7. El identificador irá en esta parte del código, supongamos que esto es una entrada en la base:

[{'BTC': {'total_market_cap_usd': ___, 'bitcoin_percentage_of_market_cap': ___... }, 'STEEM': {'total_market_cap_usd': ___, 'bitcoin_percentage_of_market_cap': ___...}, 'CRIPTOMONEDA': {'parámetro': valor}... }, identificador]

Es decir que el identificador será un número colocado en el segundo lugar de la lista que estamos guardando. Recuerda la 3ª línea del código estudiado en la lección anterior:

contenido = [get_info(numero, "diaria"), identificador()]

Aquí decíamos que el contenido que guardamos en cada entrada diaria de la base será una lista con dos elementos, el primero es la información en 2 diccionarios anidados y el segundo el identificador. El código de este último es el siguiente:

ruta_diaria = '"Aquí la ruta de tu carpeta diaria dentro de base_datos"'
def identificador():
    lista_base_datos = os.listdir(ruta_diaria)
    ident_pasados = []
    for y in lista_base_datos:
        ident_pasados.append(ast.literal_eval(open(ruta_diaria + str(y), "r").read())[1])
    mayor = ident_pasados[0]
    for valor in ident_pasados:
        if mayor > valor:
            mayor = valor
    ident = mayor + 1
    return ident

Primero definimos la variable que hará referencia a la carpeta 'diaria' dentro de nuestra carpeta 'base_datos'. La colocamos como variable global porque la necesitaremos en la siguiente lección.
Después comenzamos a construir la función creando una lista de los ficheros que se encuentran en dicha carpeta utilizando la librería os. Entonces creamos otra lista donde guardamos los identificadores pasados, los identificadores de los archivos que ya se encuentran en la base.

En la 5ª línea abrimos un bucle for para iterar sobre los archivos que hay en nuestra base de datos diaria. Lo que hacemos en la siguiente línea es recorrer los archivos de la base para extraer su identificador. Las líneas de 7 a 10 es un código que nos permite sacar el identificador con el valor más alto, que será el identificador de la última entrada en la base.

Para terminar, decimos que ident(el identificador que vamos a inscribirle hoy) sea igual al mayor identificador de la base más 1. Entonces retornamos este valor. Con esto ya funciona la función post_base_datos(), valga la redundancia.

El núcleo del sistema

Para ponerlo en marcha, necesitamos otra función que lleve a cabo las acciones que vamos a ejecutar. En proyectos de mayor envergadura, cada función que hemos creado estaría en un archivo .py aparte. El núcleo lo formaría otro .py con el nombre main.py, pero al ser este un script sencillo para entender el funcionamiento de Python lo he llamado recopilacion() y todas las funciones están incluídas en el mismo archivo de ejecución.

El pequeño código de esta función sería el siguiente:

largo = 'AQUI COLOCA EL NÚMERO DE MONEDAS QUE QUIERES (un número)'
def recopilacion():
    post_base_datos(largo, "dia")
    if x.day == 28:
        post_base_datos(1, "mes")

recopilacion()

Primero definimos una variable con el número de monedas que queremos recopilar. Yo lo tengo puesto a 250, los archivos diarios pesan 46KB cada uno y tarda media hora en recopilar la información.

Para ejecutar una función en Python no hay más que nombrarla como hacemos aquí. Decimos a Python que ejecute la función post_base_datos con los dos valores, el número de monedas y el parámetro día. Luego tengo configurado que si estamos a día 28, me imprima los datos que me interesan ver mensualmente.

Para terminar ejecutamos la función que acabamos de crear. Si está todo correcto podremos ejecutar nuestro bot sin problemas corriendo el script. En la siguiente clase crearemos una función para consultar nuestra base de datos. ¡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
6. Funciones. Crear un bot informador de STEEM (parte 1/2)
7. Crear un bot informador de STEEM (parte 2/2)
8. Crear un bot recopilador de grandes cantidades de datos (parte 1/5)
9. Crear un bot recopilador de grandes cantidades de datos (parte 2/5)
10. Crear un bot recopilador de grandes cantidades de datos (parte 3/5)

Authors get paid when people like you upvote their post.
If you enjoyed what you read here, create your account today and start earning FREE STEEM!
Sort Order:  trending

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