Калькулятор Wolframalpha в диалоге Telegram

от автора

Идея

В диалогах телеграма я очень часто использую телеграм бот: inlatexbot. Он позволяет вставлять Latex прямо в диалоге телеграма — это удобно: математическое обозначение можно отправить понятной картинкой, чтобы было так

$$display$$\sqrt{4} * 2^x * \frac {1} {3}=1024$$display$$

, а не так sqrt(4)*2^x * 1/3 =1024.
Но не менее часто, мне в телеграме необходим функционал WolframAlpha: посчитать сложный счет за вечеринку с друзьями, различные проценты, решить уравнение и так далее — полный функционал WolframAlpha, но при этом не выходить из диалога телеграма.

Подключение Wolfram

Я нашел Wolfram Alpha API для python (https://pypi.org/project/wolframalpha/). Документация предельно понятная и можно сделать все, что доступно в веб версии. Правда, есть ограничение бесплатного Wolfram API на 2000 запросов в месяц. Код, который работает с вольфрамом предельно простой и у меня вышел в 4 строки.

import wolframalpha client = wolframalpha.Client('TOKEN') res = client.query(query) print(next(res.results).text)

В первых двух строчках я импортирую модуль wolframalpha, создаю client со своим APP ID — необходимо предварительно зарегистрироваться в wolfram и получить его, далее можно отправлять запросы к вольфраму и просто делаю принт результат того, что получил Wolfram Alpha. Все работает — теперь можно приступать к интегрированию с Telegram.

Интеграция в Телеграм бот

Осталось соединить все вместе и отправлять запросы, полученные из Телеграм в Вольфрам и выдавать ответ юзеру. Создаю бот в @BotFather, в настройках включаю режим inline, чтобы бот работал прямо в диалоге Телеграм. Использую пример inline бота из GitHub для Телеграм, и отправляю ответ юзеру. Вот как выглядит самая важная часть кода.

def inlinequery(update, context):     """Handle the inline query."""     query = update.inline_query.query     print(query)     res = client.query(query)     results = [         InlineQueryResultArticle(             id=uuid4(),             title="Magic answer is here!",             input_message_content=InputTextMessageContent(                 "{} => *{}*".format(query, next(res.results).text),                 parse_mode=ParseMode.MARKDOWN))]     update.inline_query.answer(results)

Как это работает?

Очень просто — прямо в диалоге я ввожу @calcherebot 12 + 15 и мне выдает ответ 27. Бот в телеграме упрощает не только процесс подсчетов чего-либо, но и процесс различных доказательств, например можно узнать население Москвы или средний вес человека и бот в каком-то смысле меняет коммуникацию: больше не нужны скриншоты калькуляторов, википедии или других источников — теперь все может быть доступно в диалоге.

Что дальше?

Пока что бот работает локально и поддерживает всего лишь 2000 запросов в месяц, что очень мало для публичного использования. В моих планах его доработка для массового использования всем, кому это необходимо: студентам, ученым, просто людям которым нужно что-то посчитать или доказать прямо в телеграме. Если у вас есть идеи или пожелания по доработке( скорее всего они есть, так как бот был написан за пару часов) напишите мне на почту: rk-helper@yandex.ru

ссылка на оригинал статьи https://habr.com/ru/post/515146/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *