Hacer consultas a la blockchain Hive mediante APIs y Python

in Develop Spanish3 years ago

image.png

Hace unos días se publicó un post desde la cuenta de Aliento, hablando de la nueva App que he ayudado a desarrollar Ver anuncio, así desde la misma comunidad han surgido dudas de como hago para solicitar datos a la blockchain Hive mediante APIs y para no responder la duda de manera individual, me motivé hacer este post.

Para hacer requerimientos a la blockchain de una manera más común es mediante las APIs que integran a la plataforma, para ver todas las APIs puedes ingresar al siguiente link:

https://beacon.peakd.com/

Allí dentro de esa página puedes ver las diferentes APIs, donde la más popular es https://api.hive.blog

¿Qué necesito para extraer datos de Hive?

  • Conocimientos básicos en algún lenguaje de programación como Python o JavaScript
  • Instalar y explorar una librería de Hive correspondiente al lenguaje de programación que más domines, en mi caso uso Beem para Python.
  • Un editor de texto como sublimetext

Estructura básica para extraer datos

### Extraer las propiedades básicas de la blockchain
from pprint import pprint
from beem import Hive
from beem.account import Account
from beem.instance import set_shared_blockchain_instance



hived_nodes = [

  'https://api.deathwing.me',
  'https://api.openhive.network',
]


hive = Hive(node=hived_nodes)


pprint(hive.get_chain_properties())



Resultado:

{'account_creation_fee': {'amount': '3000',
                          'nai': '@@000000021',
                          'precision': 3},
 'account_subsidy_budget': 797,
 'account_subsidy_decay': 347321,
 'hbd_interest_rate': 1200,
 'maximum_block_size': 65536}

Vamos a explorar la librería de Beem con un ejemplo:

Lo primero que hacemos es ver como podemos extraer datos a partir de los módulos de Liberia mediante APIs Ver

image.png

Para mostrar un ejemplo, voy a crear un código que me diga el balance de mi cuenta de Hive.

Así está en la librería de Beem el módulo.

image.png

Solo debemos agregar los siguientes códigos, para saber el balance de una cuenta de Hive:

account = Account("enrique89", blockchain_instance= hive)

balance = account.get_balances()


pprint (balance)

Resultado:

{'available': [731.184 HIVE, 27.270 HBD, 10243276.539006 VESTS],
 'rewards': [0.000 HIVE, 0.000 HBD, 994.817549 VESTS],
 'savings': [0.000 HIVE, 0.000 HBD],
 'total': [731.184 HIVE, 27.270 HBD, 10244271.356555 VESTS]}
[Finished in 2.4s]

Ahora vamos a probar con la reputación:

image.png

Para solicitar la reputación agregamos el siguiente el código:

reputacion = account.get_reputation()


pprint (reputacion)


Resultado:


75.2643870917311


Podemos interpretar que para solicitar información con la librería de Beem solo debemos sustituir el módulo.

Hay algunas que tienen más variables como la siguiente:

get_notifications(only_unread=True, limit=100, raw_data=False, account=None)

Probamos el módulo:

get_notifications(only_unread=True, limit=100, raw_data=False, account=None)

Únicamente voy a modificar el limit y quitaré la variable account, con esta configuración me mostrará las no leídas.

notificaciones = account.get_notifications(only_unread=True, limit=10, raw_data=False)


pprint (notificaciones)

Resultado:

[{'date': datetime.datetime(2022, 4, 12, 0, 17, tzinfo=<UTC>),
  'id': 10217310,
  'msg': '@poshtoken mentioned you and 123 others',
  'score': 60,
  'type': 'mention',
  'url': '@poshtoken/posh-1649722618709'},
 {'date': datetime.datetime(2022, 4, 11, 16, 29, 42, tzinfo=<UTC>),
  'id': 10173683,
  'msg': '@hive-data mentioned you and 31 others',
  'score': 50,
  'type': 'mention',
  'url': '@hive-data/daily-twitter-data-reports-as-of-april-10-2022-2520-hive-tweets-of-the-day'},
 {'date': datetime.datetime(2022, 4, 10, 23, 15, 27, tzinfo=<UTC>),
  'id': 10095215,
  'msg': '@victoriabsb mentioned you and 68 others',
  'score': 60,
  'type': 'mention',
  'url': '@victoriabsb/hive-blockchain-la-guia-completa-para-nuevos-usuarios'},
 {'date': datetime.datetime(2022, 4, 10, 22, 43, 3, tzinfo=<UTC>),
  'id': 10092952,
  'msg': '@reylimarian replied to your post',
  'score': 40,
  'type': 'reply',
  'url': '@reylimarian/re-enrique89-ra5b3r'},
 {'date': datetime.datetime(2022, 4, 10, 22, 23, 39, tzinfo=<UTC>),
  'id': 10091467,
  'msg': '@dhenz voted on your post ($2.74)',
  'score': 75,
  'type': 'vote',
  'url': '@enrique89/es-momento-para-empezar-hive'},
 {'date': datetime.datetime(2022, 4, 10, 20, 28, 12, tzinfo=<UTC>),
  'id': 10080643,
  'msg': '@orinoco voted on your post ($0.28)',
  'score': 50,
  'type': 'vote',
  'url': '@enrique89/es-momento-para-empezar-hive'},
 {'date': datetime.datetime(2022, 4, 10, 20, 11, 57, tzinfo=<UTC>),
  'id': 10079481,
  'msg': '@ladyunicorn voted on your post ($0.02)',
  'score': 25,
  'type': 'vote',
  'url': '@enrique89/es-momento-para-empezar-hive'},
 {'date': datetime.datetime(2022, 4, 10, 18, 23, 6, tzinfo=<UTC>),
  'id': 10069980,
  'msg': '@grisvisa mentioned you and 0 others',
  'score': 60,
  'type': 'mention',
  'url': '@grisvisa/re-enrique89-ra4z2g'},
 {'date': datetime.datetime(2022, 4, 10, 18, 23, 6, tzinfo=<UTC>),
  'id': 10069979,
  'msg': '@grisvisa replied to your post',
  'score': 60,
  'type': 'reply',
  'url': '@grisvisa/re-enrique89-ra4z2g'},
 {'date': datetime.datetime(2022, 4, 10, 17, 49, 9, tzinfo=<UTC>),
  'id': 10067275,
  'msg': '@nahupuku replied to your comment',
  'score': 50,
  'type': 'reply_comment',
  'url': '@nahupuku/re-enrique89-ra4xhh'}]

Esto es parte de lo que puedes hacer con la Liberia de Beem conectada a la blockchain Hive, con esto ya comenzar o pensar en hacer muchas aplicaciones y soluciones para estar conectados a los datos de esta gran blockchain.

Estaré publicando este tipo de post, para animar a los desarrolladores que están en Hive a producir aplicaciones, bot y más, que estén conectados a Hive.

Saludos.

Sort:  

Muchísimas gracias por tu post, soy un usuario con conocimientos básicos en Python pero es muy sencillo trabajar con las APIS para obtener datos. Ya me hice un bot en Telegram alojado en una Rasberry Pi que me envía información de mis cuentas de Splinterlands.
Espero seguir aprendiendo con estos tutoriales. Uno de como enviar automáticamente tokens de una cuenta a otra sería maravilloso.
¡Te felicito!


The rewards earned on this comment will go directly to the person sharing the post on Twitter as long as they are registered with @poshtoken. Sign up at https://hiveposh.com.

Gracias por el post. No conocía esta comunidad ni esa librería para Python. Pronto estaré mostrando algunas cosillas interesantes que quiero hacer 🙃


@enrique89, sorry to see you have less Hive Power.
Your level lowered and you are now a Minnow!

Check out the last post from @hivebuzz:

Hive Power Up Month - Feedback from April day 6
Support the HiveBuzz project. Vote for our proposal!