Идея
В диалогах телеграма я очень часто использую телеграм бот: 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 (http://personeltest.ru/aways/pypi.org/project/wolframalpha/). Документация предельно понятная и можно сделать все, что доступно в веб версии. Правда, есть ограничение бесплатного Wolfram API на 2000 запросов в месяц. Код, который работает с вольфрамом предельно простой и у меня вышел в 4 строки.
import wolframalphaclient = 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