пятница, 3 февраля 2017 г.

Работем с ботом Telegram из CRAN R


Пару постов назад я писал о прикручивании SMS-оповещений к своей программе на R. А сегодня я очень кратко покажу, как можно связать R с ботом Telegram.


Для этого нам понадобиться, собственно установленные новые версии R и Telegram.

Прежде всего  создадим своего бота, послав @BotFather команду /newbot. Он спросит название и имя бота - укажем их. В ответ получим сообщение в котором говорится об успешном создании бота и его ключ вида 1234567890:AAAAAAAAAaa-bBBBBBBBBBBB.

Отлично. Теперь осталось научить R подсоединяться к боту через Telegram Bot API. И эта функциональность уже реализована в пакете telegram, который можно найти на гитхабе тут. Подключаем и переходим к делу.

Далее в коде показано, как получить доступ к боту, запросить у него информацию о себе, отправить текст, картинку и даже анимацию.
Однако, прежде чем опробовать код нужно указать TARGET_USER_ID, то есть получить свой собственный Telegram ID. И самый простой путь это сделать - написать боту и проверить его входящие командой getUpdates. Там мы найдём необходимый номер.
  
library(telegram)

# Past your access token here
R_TELEGRAM_BOT_TOKEN = '1234567890:AAAAAAAAAaa-bBBBBBBBBBBB'

# Your user ID
TARGET_USER_ID = *******

message = "Hi, this is bot message from R" 
 
# Get access
bot <- TGBot$new(token = R_TELEGRAM_BOT_TOKEN)
 
# Get bot info
bot$getMe()
 
# Send message
bot$sendMessage(text = message, chat_id = TARGET_USER_ID)
 
# Get bot inbox
bot$getUpdates()

# Send plot
png('test.png')
plot(rnorm(100))
dev.off()
bot$sendPhoto('test.png', caption = 'This is my awesome graph',
              chat_id = TARGET_USER_ID)

# Send sticker
bot$sendSticker(system.file('r_logo.webp', package = 'telegram'),
              chat_id = TARGET_USER_ID)

# Send animation
# Specify path to ffmpeg on Windows (or avconv on Linux)
ffmpeg <- 'G:/Programs/ffmpeg/bin/ffmpeg.exe'
library(animation)
saveVideo({
    par(mar = c(3, 3, 1, 0.5), mgp = c(2, 0.5, 0), tcl = -0.3,
        cex.axis = 0.8, 
        cex.lab = 0.8,
        cex.main = 1)
    ani.options(interval = 0.1, nmax = 300)
    brownian.motion(pch = 21, cex = 5, col = "red", bg = "yellow")
},
video.name = "video.mp4",
other.opts = "-pix_fmt yuv420p -b 300k",
ffmpeg = ffmpeg)
bot$sendVideo('video.mp4', chat_id = TARGET_USER_ID)

Всё - запускаем и наслаждаемся!

Комментариев нет:

Отправить комментарий