ProHoster > Blog > podávání > Píšeme telegramového robota v jazyce R (část 1): Vytvořte robota a pomocí něj posílejte zprávy do telegramu
Píšeme telegramového robota v jazyce R (část 1): Vytvořte robota a pomocí něj posílejte zprávy do telegramu
Sledovanost telegramu roste exponenciálně každý den, což je usnadněno pohodlím messengeru, dostupností kanálů, chatů a samozřejmě schopností vytvářet roboty.
Boty lze použít pro širokou škálu účelů, od automatizace komunikace se zákazníky až po správu vašich vlastních úkolů.
Ve skutečnosti můžete prostřednictvím robota používat telegram k provádění jakékoli operace: odesílání nebo vyžádání dat, spouštění úloh na serveru, shromažďování informací v databázi, odesílání e-mailů a tak dále.
Mám v plánu napsat sérii článků o tom, jak pracovat s R v R. telegram bot APIa psát roboty pro vaše potřeby.
V tomto prvním článku zjistíme, jak vytvořit telegramového robota a pomocí něj odesílat oznámení do telegramu.
V důsledku toho budeme mít robota, který bude kontrolovat stav posledního provedení všech úloh v Plánovači úloh systému Windows a v případě selhání vám zašle upozornění.
Ale účelem této série článků není naučit vás napsat bota pro konkrétní, úzký úkol, ale představit vám syntaxi balíčku obecně. telegram.bota příklady kódu, pomocí kterých můžete psát roboty, abyste vyřešili své vlastní problémy.
Obsah
Pokud vás zajímá analýza dat, mohla by vás zajímat moje telegram и Youtube kanály. Většina obsahu je věnována jazyku R.
Nejprve musíme vytvořit robota. To se provádí pomocí speciálního robota Oba Otec, jít do odkaz a napište robotovi /start.
Poté obdržíte zprávu se seznamem příkazů:
Zpráva od BotFathera
I can help you create and manage Telegram bots. If you're new to the Bot API, please see the manual (https://core.telegram.org/bots).
You can control me by sending these commands:
/newbot - create a new bot
/mybots - edit your bots [beta]
Edit Bots
/setname - change a bot's name
/setdescription - change bot description
/setabouttext - change bot about info
/setuserpic - change bot profile photo
/setcommands - change the list of commands
/deletebot - delete a bot
Bot Settings
/token - generate authorization token
/revoke - revoke bot access token
/setinline - toggle inline mode (https://core.telegram.org/bots/inline)
/setinlinegeo - toggle inline location requests (https://core.telegram.org/bots/inline#location-based-results)
/setinlinefeedback - change inline feedback (https://core.telegram.org/bots/inline#collecting-feedback) settings
/setjoingroups - can your bot be added to groups?
/setprivacy - toggle privacy mode (https://core.telegram.org/bots#privacy-mode) in groups
Games
/mygames - edit your games (https://core.telegram.org/bots/games) [beta]
/newgame - create a new game (https://core.telegram.org/bots/games)
/listgames - get a list of your games
/editgame - edit a game
/deletegame - delete an existing game
Chcete-li vytvořit nového robota, odešlete příkaz /newbot.
BotFather vás požádá o zadání jména a přihlašovacího jména robota.
BotFather, [25.07.20 09:39]
Alright, a new bot. How are we going to call it? Please choose a name for your bot.
Alexey Seleznev, [25.07.20 09:40]
My Test Bot
BotFather, [25.07.20 09:40]
Good. Now let's choose a username for your bot. It must end in `bot`. Like this, for example: TetrisBot or tetris_bot.
Alexey Seleznev, [25.07.20 09:40]
@my_test_bot
Můžete zadat libovolné jméno a přihlášení musí končit bot.
Pokud jste vše udělali správně, obdržíte následující zprávu:
Done! Congratulations on your new bot. You will find it at t.me/my_test_bot. You can now add a description, about section and profile picture for your bot, see /help for a list of commands. By the way, when you've finished creating your cool bot, ping our Bot Support if you want a better username for it. Just make sure the bot is fully operational before you do this.
Use this token to access the HTTP API:
123456789:abcdefghijklmnopqrstuvwxyz
For a description of the Bot API, see this page: https://core.telegram.org/bots/api
Dále budete potřebovat přijatý token API, v mém příkladu to je 123456789:abcdefghijklmnopqrstuvwxyz.
V tomto kroku jsou dokončeny přípravné práce pro vytvoření robota.
Instalace balíčku pro práci s telegramovým robotem na R
Předpokládám, že již máte nainstalovaný jazyk R a vývojové prostředí RStudio. Pokud tomu tak není, můžete se podívat na toto video tutoriál o tom, jak je nainstalovat.
Pro práci s Telegram Bot API použijeme balíček R telegram.bot.
Instalaci balíčků v R provádí funkce install.packages(), takže k instalaci balíčku, který potřebujeme, použijte příkaz install.packages("telegram.bot").
Další informace o instalaci různých balíčků viz tohle video.
Po instalaci balíčku jej musíte připojit:
library(telegram.bot)
Odesílání zpráv z R do telegramu
Bota, který jste vytvořili, najdete v Telegramu pomocí přihlašovacího jména zadaného při vytváření, v mém případě to tak je @my_test_bot.
Pošlete robotovi jakoukoli zprávu, například „Ahoj bote“. V tuto chvíli to potřebujeme, abychom získali ID vašeho chatu s robotem.
Nyní v R napíšeme následující kód.
library(telegram.bot)
# создаём экземпляр бота
bot <- Bot(token = "123456789:abcdefghijklmnopqrstuvwxyz")
# Запрашиваем информацию о боте
print(bot$getMe())
# Получаем обновления бота, т.е. список отправленных ему сообщений
updates <- bot$getUpdates()
# Запрашиваем идентификатор чата
# Примечание: перед запросом обновлений вы должны отправить боту сообщение
chat_id <- updates[[1L]]$from_chat_id()
Nejprve vytvoříme instanci našeho bota s funkcí Bot(), jako argument mu musíte předat dříve přijatý token.
Ukládání tokenu v kódu je považováno za špatný postup, takže jej můžete uložit do proměnné prostředí a číst jej z ní. Standardně v balíčku telegram.bot implementována podpora pro proměnné prostředí s následujícím názvem: R_TELEGRAM_BOT_ИМЯ_ВАШЕГО_БОТА... Namísto ИМЯ_ВАШЕГО_БОТА nahraďte názvem, který jste nastavili při vytváření, v mém případě to bude proměnná R_TELEGRAM_BOT_My Test Bot.
Proměnnou prostředí můžete vytvořit několika způsoby, budu mluvit o nejuniverzálnějším a multiplatformním. Vytvořte ve svém domovském adresáři (najdete jej příkazem path.expand("~")) textový soubor s názvem .Renviron. Můžete to udělat také pomocí příkazu file.edit(path.expand(file.path("~", ".Renviron"))).
S funkcí pak můžete použít token uložený v proměnné prostředí bot_token(), tj. takhle:
bot <- Bot(token = bot_token("My Test Bot"))
metoda getUpdates()nám umožňuje získávat aktualizace botů, tzn. zprávy, které mu byly zaslány. Metoda from_chat_id(), umožňuje získat ID chatu, ze kterého byla zpráva odeslána. Tento identifikátor potřebujeme k odesílání zpráv od robota.
Kromě ID chatu z objektu přijatého metodou getUpdates() získáte i další užitečné informace. Například informace o uživateli, který zprávu odeslal.
Takže v této fázi již máme vše, co je potřeba k odeslání zprávy od robota do telegramu. Použijme metodu sendMessage(), kterému musíte předat ID chatu, text zprávy a typ označení textu zprávy. Typ označení může být Markdown nebo HTML a nastavuje se argumentem parse_mode.
# Отправка сообщения
bot$sendMessage(chat_id,
text = "Привет, *жирный текст* _курсив_",
parse_mode = "Markdown"
)
Základy formátování Markdown:
Tučné písmo je označeno *:
příklad: *жирный шритф*
výsledek: tučné písmo
Kurzíva je uvedena podtržítky:
příklad: _курсив_
výsledek: kurzíva
Písmo s pevnou mezerou, které se obvykle používá ke zvýraznění programového kódu, je určeno pomocí apostrofů - `:
příklad: `jednoprostorové písmo`
výsledek: моноширинный шрифт
Základy formátování značek HTML:
V HTML zalomíte část textu, kterou chcete zvýraznit, do značek, příklad <тег>текст</тег>.
<tag> — úvodní značka
- uzavírací značka
HTML značkovací značky
<b> - tučné písmo
příklad: <b>жирный шрифт</b>
výsledek tučné písmo
<i> - kurzíva
příklad: <i>курсив</i>
výsledek: kurzíva
— моноширинный шрифт
příklad: моноширинный шрифт
výsledek: моноширинный шрифт
Kromě textu můžete odesílat další obsah pomocí speciálních metod:
Tito. například pomocí metody sendPhoto() můžete poslat výkres uložený jako obrázek, který jste vytvořili s balíčkem ggplot2.
Kontrola Plánovače úloh systému Windows a odesílání upozornění na úlohy, které se zhroutily
Chcete-li pracovat s Plánovačem úloh systému Windows, musíte balíček nainstalovat taskscheduleRa pro usnadnění práce s daty si balíček nainstalujte dplyr.
# Установка пакетов
install.packages(c('taskscheduleR', 'dplyr'))
# Подключение пакетов
library(taskscheduleR)
library(dplyr)
Dále pomocí funkce taskscheduler_ls() požadujeme informace o úkolech od našeho plánovače. Pomocí funkce filter() z balíčku dplyr odstraníme ze seznamu úloh ty, které byly úspěšně dokončeny a mají stav posledního výsledku 0, a ty, které ještě nebyly nikdy spuštěny a mají stav 267011, zakázané úlohy a úlohy, které právě běží.
V objektu task nyní máme seznam úkolů, jejichž práce skončila chybou, musíme tento seznam odeslat do Telegramu.
Pokud zvážíme každý příkaz podrobněji, pak:
filter() — filtruje seznam úkolů podle výše popsaných podmínek
select() - ponechá v tabulce pouze jedno pole s názvem úkolů
unique() - odstraňuje duplicitní jména
unlist() - převede vybraný sloupec tabulky do vektoru
paste0() - spojí názvy úkolů do jednoho řádku, a jako oddělovač vloží znak nového řádku, tzn. n.
Zbývá nám pouze poslat tento výsledek do telegramu.
bot$sendMessage(chat_id,
text = task,
parse_mode = "Markdown"
)
Takže v tuto chvíli vypadá kód bota takto:
Kód bota, který kontroluje úlohu
# Подключение пакета
library(telegram.bot)
library(taskscheduleR)
library(dplyr)
# инициализируем бота
bot <- Bot(token = "123456789:abcdefghijklmnopqrstuvwxyz")
# идентификатор чата
chat_id <- 123456789
# запрашиваем список задач
task <- taskscheduler_ls() %>%
filter(! `Last Result` %in% c("0", "267011") &
`Scheduled Task State` == "Enabled" &
Status != "Running") %>%
select(TaskName) %>%
unique() %>%
unlist() %>%
paste0(., collapse = "n")
# если есть проблемные задачи отправляем сообщение
if ( task != "" ) {
bot$sendMessage(chat_id,
text = task,
parse_mode = "Markdown"
)
}
Při použití výše uvedeného příkladu nahraďte kód svým tokenem bota a ID chatu.
Můžete přidat podmínky filtrování úloh, například kontrolovat pouze ty úlohy, které jste vytvořili, s výjimkou systémových.
Můžete také vložit různá nastavení do samostatného konfiguračního souboru a uložit do něj ID chatu a token. Konfiguraci si můžete přečíst například pomocí balíčku configr.
Příklad ini config
[telegram_bot]
;настройки телеграм бота и чата, в который будут приходить уведомления
chat_id=12345678
bot_token=123456789:abcdefghijklmnopqrstuvwxyz"
Proces konfigurace plánovaného spouštění skriptů je zde podrobněji popsán článek. Zde popíšu pouze kroky, které je k tomu nutné dodržet. Pokud vám některý z kroků není jasný, podívejte se na článek, na který jsem uvedl odkaz.
Řekněme, že uložíme kód našeho bota do souboru check_bot.R. Chcete-li naplánovat pravidelné spouštění tohoto souboru, postupujte takto:
Do systémové proměnné Path napište cestu ke složce, ve které je R nainstalován, ve Windows bude cesta vypadat nějak takto: C:Program FilesRR-4.0.2bin.
Vytvořte spustitelný soubor bat pouze s jedním řádkem R CMD BATCH C:rscriptscheck_botcheck_bot.R. Nahradit C:rscriptscheck_botcheck_bot.R na úplnou cestu k vašemu souboru R.
Dále pomocí Plánovače úloh systému Windows nastavte plán spouštění, například každou půlhodinu.
Závěr
V tomto článku jsme přišli na to, jak vytvořit bota a použít jej k odesílání různých upozornění na telegram.
Popsal jsem úkol sledování Plánovače úloh systému Windows, ale materiál v tomto článku můžete použít k odeslání jakéhokoli oznámení, od předpovědi počasí až po kurzy akcií na burze, protože. R umožňuje připojení k obrovskému množství datových zdrojů.
V příštím článku vymyslíme, jak botovi přidat příkazy a klávesnici, aby mohl nejen posílat upozornění, ale také provádět složitější akce.