Начнем цикл статей, в которой будем работать с блокчейном нашего дорого любимого Golos. С полученными данными будем работать на языке Python. В планах анализировать посты на голосе.
Давайте начнем. Первым делом нам надо из блокчейна получать данные.
Установим библиотеку для работы с websocket'ом.
pip3 install websocket-client
Создаем новый скрипт python.
Создаем соединение с websocket, и объявим функции для открытия соединения(on_open), получения сообщений (on_message) и получения ошибок(on_error).
ws = websocket.WebSocketApp("wss://ws18.golos.io/",
on_message = on_message,
on_error = on_error,
on_close = on_close)
Вызовем функцию, которая будет выполняться при создании соединения.
ws.on_open = on_open
Допишем:
ws.run_forever()
Эта строчка запускает бесконечный цикл обработки данных WebSocket, он жив пока не жив сам WebSocket.
Теперь реализуем функции.
Первая функция - обработчик открытия соединения.
def on_open(ws):
ws.send(json.dumps({'id': 1, 'method': 'call', 'jsonrpc':'2.0', 'params': ['database_api', 'set_block_applied_callback', [0]]}))
Реализация по сути не отличается от реализации на JS, за исключением некоторых нюансов.
Функция json.dumps
преобразовывает JSON объект в строку JSON формата.
Реализуем функции обработки ошибок и закрытия соединения:
def on_error(ws, error):
print(error)
def on_close(ws):
print("### closed ###")
В них вы выводим ошибку и уведомляем о закрытии.
Слушаем вебсокет.
def on_message(ws, message):
jsons = json.loads(message)
data_result = jsons.get('result')
if jsons.get('id') == 1:
height = int(data_result.get('previous')[0:8], 16)
ws.send(json.dumps({'id': 2, 'method': 'call', 'jsonrpc':'2.0', 'params': ['operation_history', 'get_ops_in_block', [height, 'false']]}))
elif jsons.get('id') == 2:
print(data_result)
Остановимся на функции-обработчике приходящих сообщений.
Мы получаем входящее сообщение в строковом формате.
Его надо преобразовать в json.
jsons = json.loads(message)
Так мы получим массив result
, в котором хранятся нужные данные. Проверим id, пришедших данных, если он равен 1, то получаем номер блока и отправим данные снова.
int(data_result.get('previous')[0:8], 16)
data_result.get('previous')[0:8]
- получаем первые 8 символов, которые хранятся в previous.
int(str, 16)
- переводим в шестнадцетиричную систему счисления - это номер нужного нам блока.
И отправляем данные.
ws.send(json.dumps({'id': 2, 'method': 'call', 'jsonrpc':'2.0', 'params': ['operation_history', 'get_ops_in_block', [height, 'false']]}))
Если id в сообщении равен 2, то это значит, что пришли данные блоков, которые мы будем обрабатывать в следующей статье.
Можете сохранить код в файл с расширением .py и запустить его в консоли через python3.
Материал подготовлен автором @zheev
Ваш пост поддержали следующие Инвесторы Сообщества "Добрый кит":
alex2016, neo, midnight, ruslandis, tasha, tristamoff, vadbars, rusalka, amikphoto, kotik, olga-olga, vict0r, semasping, cergey-p, ladyzarulem, arystarch, oksana0407, lenutsa, vpervye1, yurchello, amelina.elena, lushaya, soroka, hellen-g, victorskaz, kertar, ifingramota, oksi-m, liseykina, zhenek, ksantoprotein, magformers, kr-alexey, katarinka, katherina, andrzhej, anandasurya, rastabandito, borgerry
Поэтому я тоже проголосовал за него!
Узнать подробности о сообществе можно тут:
Разрешите представиться - Кит Добрый
Правила
Инструкция по внесению Инвестиционного взноса
Вы тоже можете стать Инвестором и поддержать проект!!!
Если Вы хотите отказаться от поддержки Доброго Кита, то ответьте на этот комментарий командой "!нехочу"
dobryj.kit теперь стал Делегатом! Ваш голос важен для всего сообщества!!!
Поддержите нас: