ProHoster > blog > administratie > Een telegrambot schrijven in R (deel 1): Een bot maken en deze gebruiken om berichten in telegram te verzenden
Een telegrambot schrijven in R (deel 1): Een bot maken en deze gebruiken om berichten in telegram te verzenden
Het Telegram-publiek groeit elke dag exponentieel, dit wordt mogelijk gemaakt door het gemak van de messenger, de aanwezigheid van kanalen, chats en natuurlijk de mogelijkheid om bots te maken.
Bots kunnen voor totaal verschillende doeleinden worden gebruikt, van het automatiseren van de communicatie met uw klanten tot het beheren van uw eigen taken.
In wezen kunt u Telegram gebruiken om alle bewerkingen via een bot uit te voeren: gegevens verzenden of opvragen, taken uitvoeren op de server, informatie verzamelen in een database, e-mails verzenden, enzovoort.
Ik ben van plan een serie artikelen te schrijven over hoe ik ermee kan werken Telegram-bot-APIen schrijf bots die aan uw behoeften voldoen.
In dit eerste artikel zullen we uitzoeken hoe we een telegrambot kunnen maken en deze kunnen gebruiken om meldingen in telegram te verzenden.
Als gevolg hiervan zullen we een bot hebben die de status van de laatste uitvoering van alle taken in de Windows Taakplanner controleert en u meldingen stuurt als een van deze taken mislukt.
Maar het doel van deze serie artikelen is niet om u te leren hoe u een bot schrijft voor een specifieke, beperkte taak, maar om u in het algemeen kennis te laten maken met de syntaxis van het pakket. telegram.boten codevoorbeelden waarmee je bots kunt schrijven om je eigen problemen op te lossen.
Inhoud
Als u geΓ―nteresseerd bent in data-analyse, bent u wellicht geΓ―nteresseerd in mijn telegram ΠΈ youtube kanalen. Het grootste deel van de inhoud is gewijd aan de R-taal.
Eerst moeten we een bot maken. Dit gebeurt met behulp van een speciale bot BotVader, ga naar link en schrijf naar de bot /start.
Hierna ontvangt u een bericht met een lijst met opdrachten:
Bericht van BotFather
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
Om een ββnieuwe bot te maken, verzendt u de opdracht /newbot.
BotFather zal u vragen om de naam van de bot in te voeren en in te loggen.
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
U kunt elke naam invoeren, maar de login moet eindigen op bot.
Als je alles goed hebt gedaan, krijg je het volgende bericht:
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
Vervolgens heb je het ontvangen API-token nodig, in mijn voorbeeld is dat het geval 123456789:abcdefghijklmnopqrstuvwxyz.
Bij deze stap zijn de voorbereidende werkzaamheden voor het maken van de bot voltooid.
Een pakket installeren voor het werken met een telegrambot in R
Ik neem aan dat je de R-taal en de RStudio-ontwikkelomgeving al hebt geΓ―nstalleerd. Mocht dit niet het geval zijn, dan kun je hiernaar kijken hoe dan ook over hoe u ze kunt installeren.
Om met de Telegram Bot API te werken, zullen we het R-pakket gebruiken telegram.bot.
Het installeren van pakketten in R gebeurt met behulp van de functie install.packages(), dus gebruik de opdracht om het pakket te installeren dat we nodig hebben install.packages("telegram.bot").
U kunt meer leren over het installeren van verschillende pakketten op deze video.
Nadat u het pakket hebt geΓ―nstalleerd, moet u het aansluiten:
library(telegram.bot)
Berichten verzenden van R naar Telegram
De bot die je hebt gemaakt, kan in Telegram worden gevonden met de login die is opgegeven tijdens het maken, in mijn geval is dat zo @my_test_bot.
Stuur de bot een bericht, zoals 'Hey bot'. Op dit moment hebben we dit nodig om de ID van je chat met de bot te krijgen.
In eerste instantie maken we een exemplaar van onze bot met de functie Bot(), moet het eerder ontvangen token als argument worden doorgegeven.
Het wordt niet als beste praktijk beschouwd om het token in code op te slaan, dus u kunt het in een omgevingsvariabele opslaan en daaruit lezen. Standaard in pakket telegram.bot Ondersteuning voor omgevingsvariabelen met de volgende namen is geΓ―mplementeerd: R_TELEGRAM_BOT_ΠΠΠ―_ΠΠΠ¨ΠΠΠ_ΠΠΠ’Π. In plaats van ΠΠΠ―_ΠΠΠ¨ΠΠΠ_ΠΠΠ’Π vervang de naam die u hebt opgegeven bij het maken, in mijn geval zal het een variabele zijn R_TELEGRAM_BOT_My Test Bot.
Er zijn verschillende manieren om een ββomgevingsvariabele te maken; ik zal je vertellen over de meest universele en platformonafhankelijke variabele. Maak het aan in uw thuismap (u kunt het vinden met behulp van de opdracht path.expand("~")) tekstbestand met de naam .Reviron. U kunt dit ook doen met behulp van het commando file.edit(path.expand(file.path("~", ".Renviron"))).
Vervolgens kunt u het token gebruiken dat is opgeslagen in de omgevingsvariabele met behulp van de functie bot_token(), d.w.z. soortgelijk:
bot <- Bot(token = bot_token("My Test Bot"))
werkwijze getUpdates()stelt ons in staat bot-updates te krijgen, d.w.z. berichten die naar hem zijn verzonden. Methode from_chat_id(), kunt u de ID opvragen van de chat waaruit het bericht is verzonden. We hebben dit ID nodig om berichten van de bot te verzenden.
Naast de chat-ID van het object dat door de methode is verkregen getUpdates() je ontvangt ook nog wat andere nuttige informatie. Bijvoorbeeld informatie over de gebruiker die het bericht heeft verzonden.
In dit stadium hebben we dus al alles wat we nodig hebben om een ββbericht van een bot naar Telegram te sturen. Laten we de methode gebruiken sendMessage(), waarin u de chat-ID, berichttekst en berichttekstopmaaktype moet doorgeven. Het opmaaktype kan Markdown of HTML zijn en wordt ingesteld door het argument parse_mode.
Cursief wordt aangegeven met onderstrepingstekens:
voorbeeld: _ΠΊΡΡΡΠΈΠ²_
resultaat: cursief
Het monospace-lettertype, dat meestal wordt gebruikt om programmacode te markeren, wordt gespecificeerd met behulp van apostrofs - `:
voorbeeld: `monospace-lettertype`
resultaat: ΠΌΠΎΠ½ΠΎΡΠΈΡΠΈΠ½Π½ΡΠΉ ΡΡΠΈΡΡ
Basisprincipes van het opmaken van HTML-opmaak:
In HTML plaats je bijvoorbeeld het deel van de tekst dat gemarkeerd moet worden in tags <ΡΠ΅Π³>ΡΠ΅ΠΊΡΡ</ΡΠ΅Π³>.
<tag> - openingstag
- sluitlabel
HTML-opmaaktags
<b> - dikgedrukt lettertype
voorbeeld: <b>ΠΆΠΈΡΠ½ΡΠΉ ΡΡΠΈΡΡ</b>
resultaat dikgedrukt lettertype
<i> - cursief
voorbeeld: <i>ΠΊΡΡΡΠΈΠ²</i>
resultaat: cursief
β ΠΌΠΎΠ½ΠΎΡΠΈΡΠΈΠ½Π½ΡΠΉ ΡΡΠΈΡΡ
voorbeeld: ΠΌΠΎΠ½ΠΎΡΠΈΡΠΈΠ½Π½ΡΠΉ ΡΡΠΈΡΡ
resultaat: ΠΌΠΎΠ½ΠΎΡΠΈΡΠΈΠ½Π½ΡΠΉ ΡΡΠΈΡΡ
Naast tekst kunt u ook andere inhoud verzenden via speciale methoden:
Die. bijvoorbeeld met behulp van de methode sendPhoto() u kunt een grafiek verzenden die is opgeslagen als een afbeelding die u met het pakket hebt gemaakt ggplot2.
De Windows Taakplanner controleren en meldingen verzenden over taken die abnormaal zijn beΓ«indigd
Om met Windows Task Scheduler te kunnen werken, moet u het pakket installeren taskscheduleRen voor het gemak van het werken met gegevens installeert u het pakket dplyr.
Gebruik vervolgens de functie taskscheduler_ls() wij vragen informatie over taken op bij onze planner. De functie gebruiken filter() uit het pakket dplyr We verwijderen uit de lijst met taken de taken die met succes zijn voltooid en een laatste resultaatstatus van 0 hebben, en de taken die nog nooit zijn gelanceerd en de status 267011 hebben, de uitgeschakelde taken en de taken die momenteel worden uitgevoerd.
Wanneer u het bovenstaande voorbeeld gebruikt, vervangt u uw bottoken en uw chat-ID door de code.
U kunt voorwaarden toevoegen voor het filteren van taken, door bijvoorbeeld alleen de taken te controleren die u hebt gemaakt, met uitzondering van systeemtaken.
Je kunt ook verschillende instellingen in een apart configuratiebestand zetten en daarin het chat-ID en token opslaan. U kunt de configuratie bijvoorbeeld lezen met behulp van het pakket configr.
Een schema instellen voor het uitvoeren van taakscans
Het proces van het volgens schema opzetten van de lancering van scripts wordt hierin gedetailleerder beschreven ΡΡΠ°ΡΡΠ΅. Ik beschrijf hier alleen de stappen die hiervoor gevolgd moeten worden. Als een van de stappen u niet duidelijk is, raadpleeg dan het artikel waarnaar ik een link heb verstrekt.
Laten we aannemen dat we onze botcode in een bestand hebben opgeslagen check_bot.R. Volg deze stappen om te plannen dat dit bestand regelmatig wordt uitgevoerd:
Schrijf het pad naar de map waarin R is geΓ―nstalleerd in de systeemvariabele Path; in Windows zal het pad er ongeveer zo uitzien: C:Program FilesRR-4.0.2bin.
Gebruik vervolgens Windows Task Scheduler om een ββstartschema in te stellen, bijvoorbeeld elk half uur.
Conclusie
In dit artikel hebben we ontdekt hoe we een bot kunnen maken en deze kunnen gebruiken om verschillende meldingen in Telegram te verzenden.
Ik heb de taak beschreven van het monitoren van de Windows Task Scheduler, maar je kunt het materiaal in dit artikel gebruiken om eventuele meldingen te verzenden, van de weersvoorspelling tot aandelenkoersen op de beurs, omdat Met R kunt u verbinding maken met een groot aantal gegevensbronnen.
In het volgende artikel zullen we uitzoeken hoe we opdrachten en een toetsenbord aan de bot kunnen toevoegen, zodat deze niet alleen meldingen kan verzenden, maar ook complexere acties kan uitvoeren.