Ведение Telegram-канала с помощью GitHub Actions
Наверное каждому разработчику хотя бы раз в жизни приходила идея что-нибудь автоматизировать. Ведь если есть возможность избавиться от рутины, то грех ей не воспользоваться.
Для меня эта идея стала основой многих собственных разработок, начиная с программ для решения Судоку, подсчёта времени нахождения за компьютером, имитации работы пользователя ПК с помощью самописных скриптов (всё это ещё в давние времена), и заканчивая более сложными проектами.
И вот, среди прочих родилась простая идея: «А почему бы не автоматизировать отслеживание новых выпусков ИТ-подкастов с помощью Telegram-бота и GitHub Actions? Чтобы просто подписаться на telegram-канал и получать актуальные выпуски подкастов по мере их выхода.
Конечно, можно скачать специализированные приложения, типа «Poket Casts», либо подписаться на RSS, но лично для меня использование Telegram-канала является самым удобным, простым и привычным.
Так был создан telegram-канал @awesome_russian_podcasts, куда в автоматическом режиме публикуются новые выпуски множества ИТ-подкастов, собранных в моём репозитории. Собственно, о процессе создания этого канала (его техническую часть) я и хочу рассказать далее.
Используемые инструменты
Для решения задачи я использовал следующие инструменты:
- GitHub Actions;
- .NET Core Console App; — для получения данных о подкастах из iTunes; — для взаимодействия с API Telegram-бота;
- Git.
Пункты 2-4 можно легко заменить, чтобы реализовать описанный сценарий на удобном вам языке программирования. Кроме того, с Telegram API можно взаимодействовать напрямую через HTTP-запросы, как и с API iTunes.
GitHub Actions
Описание функционала GitHub Actions
С появлением GitHub Actions для разработчиков открылось новое поле для исследований и экспериментов, ведь этот инструмент позволяет автоматизировать вещи, которые ранее приходилось делать вручную или с помощью сторонних не всегда простых в освоении и интеграции сервисов.
Подробная документация (только на английском языке) будет понятна даже тем, кто никогда не работал с подобными инструментами. И времени на её изучение понадобится не очень много.
Для решения своей задачи я выбрал GitHub Actions по нескольким причинам:
- Он бесплатный для публичных репозиториев;
- Позволяет запускать «события» по таймеру;
- Его легко изучить и адаптировать под новые задачи.
Идея состоит в том, что по заданному таймеру запускается Action-скрипт, сконфигурированный таким образом, что при изменении числа выпусков для каждого подкаста в репозитории, данные о новых выпусках публикуются в Telegram-канале через Telegram-бота, управляемого консольным .NET Core приложением.
Задание секретов репозитория
Сначала необходимо задать «секреты» (API-ключ Telegram-бота и id Telegram-канала, куда будут публиковаться новые выпуски) в репозитории с GitHub Action, как это указано на скриншоте:
На самом деле, id Telegram-канала вы можете указать непосредственно в Action-скрипте или в приложении, но для решения однотипных задач лучше иметь возможность изменять эти данные.
Они будут использоваться для передачи в качестве параметров командной строки в консольное .NET Core приложение.
Получение API-ключа Telegram-бота
Для взаимодействия с Telegram-ботом необходимо его создать и получить специальный API-ключ. Сделать это очень просто.
В строке поиска Telegram необходимо ввести BotFather — это официальный Telegram-бот для создания своих ботов:
Для создания нового бота нужно в чате BotFather ввести команду /newbot , на что он попросит указать название нового бота:
Вы можете дать любое название вашему боту.
Далее BotFather попросит ввести username для нового бота. По сути, это будет его уникальный идентификатор в Telegram.
Здесь есть небольшие ограничения: username должен заканчиваться на bot (без учёта регистра) и он должен быть уникальным (если такой username уже существует, то вам не удастся создать нового бота):
В итоге ваш бот будет создан, а вам отобразится API-ключ для управления им извне (первая чать API-ключа — это идентификатор бота).
P.S. Если вы забыли API-ключ, его всегда можно посмотреть, введя команду /mybots в чате BotFather, выбрать нужного бота из списка и нажать кнопку «API Token». Там же можно обновить ключ в случае его компрометации.
Далее необходимо найти в строке поиска Telegram созданного бота по его username, перейти в него и нажать кнопку «Запустить». Теперь бот готов к работе:
Получение id Telegram-канала
Чтобы Telegram-бот знал, куда ему отправлять сообщения, необходимо узнать id Telegram-канала для публикаций.
Для это необходимо добавить бота в созданный вами Telegram-канал (бота в канал можно добавить только в качестве администратора), написать какое-нибудь сообщение в этом канале, и вызвать HTTP GET-запрос: https://api.telegram.org/bot<api_key>/getUpdates , где <api_key> — это API-ключ бота, полученный ранее:
В поле id внутри chat получите необходимый id Telegram-канала.
P.S. Так как Telegram, к сожалению, всё ещё заблокирован на территории Российской Федерации, то указанный выше HTTP GET-запрос необходимо отправить через прокси. Например, можно воспользоваться браузером Opera и его встроенным прокси, как это сделал я.
Структура скрипта
Далее перейдём непосредственно к Action-скрипту.
О том, как создавать и редактировать скрипты подробно описано в документации. Разобраться в этом не составит труда. Здесь я лишь приведу свой скрипт с комментариями:
Как можно убедиться, сам Action-скрипт довольно прост. Его можно улучшить, например, добавив возможность не делать commit, если изменений не было. Но пока в этом нет необходимости. Вся полезная работа кроется в консольном .NET Core приложении «Unchase.HtmlTagsUpdater». Давайте посмотрим, что у него внутри.
.NET Core Console App
«Unchase.HtmlTagsUpdater» — это обычное консольное .NET Core приложение, в которое передаются заданные параметры командной строки. Здесь я приведу упрощенный код: без допоплнительных проверок, обработок, промежуточных частей и частей, не относящихся к задаче.
Для разбора параметров командной строки удобно использовать nuget-пакет CommandLineParser. Он позволяет поместить входные параметры приложения в заданный класс:
В основном методе Main приложения необходимо вызвать Parser.Default.ParseArguments :
Дальнейшаая обработка происходит в методах ProcessPodcasts и SendPodcastData :
Это всё, что минимально необходимо выполнить для решения поставленной задачи.
Вывод
GitHub Actions можно использовать как для работы с Telegram-каналами: публикация сообщений, модерация, интерактивное взаимодействие с участниками канала… Так и для множества других задач: CI/CD для ваших проектов, обновление статических страниц для GitHub Pages, взаимодействие с любыми сторонними сервисами по описанному сценарию и т.д.
Применений этому действительно полезному и удобному инструменту можно найти много. Я лишь постарался описать один из возможных вариантов.
Я убеждён, что каналы должны приносить пользу не только его создателям, поэтому если вам нравится слушать ИТ-подкасты, или вы в поисках новых знаний, — присоединяйтесь к каналу @awesome_russian_podcasts и добавляйте свои любимые русскоязычные ИТ-подкасты в репозиторий, чтобы и о них могли услышать другие люди.
Если же вы адепт youtub’а и просмотра видео, то и для вас есть аналогичный канал — @awesome_russian_youtube.
Спасибо, что дошли до конца. Будьте здоровы и не сходите с пути познания. Удачи!
Api id telegram как получить
- Open with Desktop
- View raw
- Copy raw contents Copy raw contents
Copy raw contents
Copy raw contents
Obtaining your API credentials
To build your version of Telegram Desktop you’re required to provide your own api_id and api_hash for the Telegram API access.
How to obtain your api_id and api_hash is described here: https://core.telegram.org/api/obtaining_api_id
If you’re building the application not for deployment, but only for test purposes you can use TEST ONLY credentials, which are very limited by the Telegram API server:
api_id: 17349 api_hash: 344583e45741c457fe1862106095a5eb
Your users will start getting internal server errors on login if you deploy an app using those api_id and api_hash.
Where to find the Telegram Api Key
I am trying to find the Api Key for Telegram but I cannot find it. Where do I find it on the website? If I use the Api Id, I get the error Incorrect Token Format in the C# Console Application.
4 Answers 4
Trending sort
Trending sort is based off of the default sorting method — by highest score — but it boosts votes that have happened recently, helping to surface more up-to-date answers.
It falls back to sorting by highest score if no posts are trending.
Switch to Trending sort
Like ihoru mentioned in his answer, you can find all of your bots relevant information in BotFather.
So navigate to @BotFather in Telegram. If you have not yet created a bot do so by entering /newbot and follow the instructions on screen. You should get your key at the end of the process.
But now let’s assume you already have a bot and can’t find the key anymore. Again, go to @BotFather but this time enter /mybots . You should see something like this:
Click/Touch whatever bot you would like your API key for, then you should see this: