Web Scraping CryptoCurrency precio y almacenarlo en MongoDB usando Python

Veamos cómo obtener el precio del historial en USD o BTC, el volumen negociado y la capitalización de mercado para un rango de fechas determinado utilizando la API de Santiment y almacenando los datos en la colección MongoDB.

Python es un lenguaje maduro y se usa mucho en el dominio de las criptomonedas. MongoDB es una base de datos NoSQL que se combina con Python en muchos proyectos, lo que ayuda a mantener los detalles que se recuperaron de los programas de Python. PyMongo es una distribución de Python que contiene herramientas para trabajar con MongoDB y es una forma muy conveniente de trabajar con MongoDB desde Python para realizar operaciones de creación/actualización/eliminación/lectura fácilmente.

Veamos el código al usar la API de Santiment para obtener los precios de las criptomonedas para un rango de fechas determinado

Algunos ejemplos de criptomonedas son:

bitcoin
ethereum
ripple
bitcoin-cash
litecoin
eos
cardano
stellar
neo
iota
  1. En lugar de id, podemos pasar bitcoin/ethereum o cualquier nombre de criptomoneda que el siguiente código pueda analizar y obtener los datos
  2. Para un nombre de criptomoneda válido, los datos se recuperarán correctamente
  3. En lugar de from_date y to_date, se deben proporcionar fechas válidas en formatos de fecha válidos en el patrón aaaa-mm-dd. Para fines de comprensión, se da para tomar 7 días de datos. También podemos obtener datos de 1 mes de antigüedad. La llamada API puede obtener datos para las criptomonedas dadas en el rango de fechas dado o, si no está disponible (debido a un nombre de criptomoneda no válido/especificación de rango de fechas no válida), podemos detectar los errores
  4. En el siguiente programa, para facilitar la comprensión, tomando bitcoin y ethereum en el archivo «IndexCoins.idx» y, por lo tanto, en el lugar de id, se pasan

Ejemplo :

Para la siguiente entrada

Para bitcoin por encima de la llamada a la API, devuelve los datos de la siguiente manera

De manera similar para ethereum también, obtendremos valor

El valor recuperado debe almacenarse en MongoDB

Base de datos: geeksforgeeks

Colección : Coll_santiment_Price

Como vamos a tomar para 7 días de datos, se tiene que dar en bucle

En MongoDB, _id es la columna predeterminada que puede obtener ObjectId(). Nuestro proceso tiene múltiples filas donde todas y cada una de las filas se identifican por medio de «criptomoneda» y «hora». En nuestro código, lo tenemos como «id» y «tiempo» respectivamente.

Deje que se cree «Coll_santiment_Price» con 3 columnas, a saber, _id, id y hora primero. Luego, tras la ejecución exitosa de la llamada a la API, para la identificación y la hora, deje que la salida de la llamada a la API (verifique el nombre de la columna de bitcoinprice.png) ‘priceBtc’, ‘priceUsd’, ‘volume’ y ‘marketcap’ se actualicen en un bucle.

Implementación de código en Python

Python3

# importing the modules
from datetime import date, timedelta, datetime
from pymongo import MongoClient
import san
from bson.objectid import ObjectId
  
client = MongoClient('mongodb://localhost:27017/')
db1 = client.geeksforgeeks
data = {}
  
with open("IndexCoins.idx") as openfileobject:
    for line in openfileobject:
          
        # One by one File's cryptocurrency names are read
        id = line.strip() 
        try:
            print(id)
              
            # Collecting the data for 7 days and hence range(7) is taken
            for idx in range(7):
                daystr = str(date.today() - timedelta(days = idx))
  
                # Coll_santiment_Price collection documents need to be created
                # It will have columns namely "_id", "time", "id",
                # "priceBtc", "priceUsd", "volume", "marketcap"
                data['id'] = id
                data['time'] = daystr
  
                # _id column for unique key and can be generated by using ObjectId()
                data['_id'] = ObjectId()
                  
                # Initially create 3 columns in collection as rest of the
                # columns are updated after running santiment api call              
                db1.Coll_santiment_Price.insert(data) 
            try:
                # Santiment API call to get Cryptocurrency prices
                daa = san.get("prices/" + id,
                              from_date = "2020-08-20",
                              to_date = "2020-08-27",
                              interval = "1d")
                  
                # API call output and for bitcoin it is given in
                # https://media.geeksforgeeks.org/wp-content/uploads/20200827191739/bitcoinprice.png
                print(daa)
                  
            except:
                print("URL error")
                continue;                
  
            # 7 days output
            for idx in range(7):
                  
                daystr = str(date.today() - timedelta(days=idx))
  
                # API call output for the above chosen date
                row = daa.loc[daystr]
                  
                # priceBtc, priceUsd, volume and marketcap are
                # collected and stored in seperate variables
                priceBtc = row['priceBtc']
                priceUsd = row['priceUsd']
                volume = row['volume']
                marketcap = row['marketcap']
                print(id, daystr, priceBtc, priceUsd, volume, marketcap)
                try:
                    # Update the collection with above details against
                    # cryptocurrency id and time  i.e. bitcoin and 2020-08-27
                    db1.Coll_santiment_Price.update(
                        {'time': daystr, 'id': id},
                        {"$set": {"priceBtc": priceBtc,
                                  "priceUsd": priceUsd,
                                  "volume": volume,
                                  "marketcap": marketcap,
                                  }
                         },
                        upsert = True
                        )
                except Exception as e:
                    print(e)
        except:
            print("Error")

Salida de muestra: (para bitcoin)

Salida de muestra: (para Ethereum)

Las llamadas a la API de Santiment para obtener precios se utilizan mucho en los proyectos de criptomonedas. Como estamos obteniendo datos históricos, para el análisis de datos, esto es muy útil. Además, es de libre acceso y, por lo tanto, cualquier proyecto de nivel principiante puede usarlo sin problemas. Las variaciones de precios no varían mucho y, por lo tanto, están bien establecidas para proyectos de demostración y de pequeña escala.

Publicación traducida automáticamente

Artículo escrito por priyarajtt y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *