1 changed files with 103 additions and 1 deletions
@ -1 +1,103 @@ |
|||||||
# RSSCollector |
# RSSCollector |
||||||
|
|
||||||
|
## О проекте |
||||||
|
Данный проект предназначен для сбора информации из RSS о публикациях на сайтах. Найденные новые публикации пересылаются в канал в Telegram. |
||||||
|
|
||||||
|
## Какие технологии используются |
||||||
|
|
||||||
|
Для сборки проекта необходимы: |
||||||
|
|
||||||
|
1. Компилятор [GO](https://go.dev/dl/) |
||||||
|
2. Дополнительный модуль обработки параметров командной строки https://github.com/jessevdk/go-flags |
||||||
|
3. Дополнительный модуль для работы с Telegram Bot API https://github.com/go-telegram-bot-api/telegram-bot-api |
||||||
|
4. Встраиваемая [БД BoltDB](https://github.com/boltdb/bolt) |
||||||
|
|
||||||
|
## Конфигурация |
||||||
|
|
||||||
|
По-умолчанию конфигурационный файл ищется в том же каталоге, где запускается исполняемый файл, с именем `config.yml`. |
||||||
|
|
||||||
|
Формат данного файла - YAML |
||||||
|
|
||||||
|
Выглядит конфиг так: |
||||||
|
|
||||||
|
```yaml |
||||||
|
dbpath: "/var/cache/rsscollector/rss.db" |
||||||
|
telegram: |
||||||
|
senddebug: true |
||||||
|
chatid: <CHATID> |
||||||
|
token: "<TOKEN>" |
||||||
|
rsslist: |
||||||
|
- name: "<RSS1>" |
||||||
|
url: "https://<URL1>" |
||||||
|
- name: "<RSS2>" |
||||||
|
url: "https://<URL2>" |
||||||
|
|
||||||
|
``` |
||||||
|
|
||||||
|
где |
||||||
|
|
||||||
|
- `dbpath` - путь до файла БД |
||||||
|
- `telegram` - блок описания парабетров для telegram-бота |
||||||
|
- `senddebug` - выводить ли debug-информацию при отправке в телеграм |
||||||
|
- \<CHATID\> - идентификатор канала, в который будет присылаться информация. Получить можно например из робота [Json Dump Bot](https://t.me/JsonDumpBot), переслав ему любое сообщение из требующегося канала и взяв идентификатор (вместе с -) из параметра `forward_from_chat` |
||||||
|
- \<TOKEN\> - токен бота, от имени которого будут присылаться сообщения и которого необходимо добавить в канал администратором (достаточно оставить ему права отсылать сообщения в канал). Бота заводим, как обычно, через [BotFather](https://t.me/BotFather) |
||||||
|
- `rsslist` - блок описания лент, с которых будет собираться информация |
||||||
|
- \<RSS1\>, \<RSS2\> - наименования лент. Используются как идентификаторы в БД и в логах для вывода информации, откуда инфа, а также при отправке в канал в заголовке |
||||||
|
- \<URL1\>, \<URL2\> - веб-адреса RSS-лент |
||||||
|
|
||||||
|
## Сборка |
||||||
|
|
||||||
|
`go build -o rsscollector` в каталоге проекта. Перед этим имеет смысл получить все зависимости, перечисленные в `go.mod` |
||||||
|
|
||||||
|
## Запуск |
||||||
|
|
||||||
|
При запуске проверяется один параметр командной строки: |
||||||
|
|
||||||
|
`-c` или `--configpath` - в нем необходимо указать, где находится конфиг. Как было уже сказано выше - это необязательно и конфиг можно разместить прямо в каталоге запуска. |
||||||
|
|
||||||
|
RSS - ленты парсятся по-очереди, новые сообщения отсылаются в канал и записываются в БД, чтобы при следующем запуске не отсылались. Соответственно, при первом запуске надо быть готовым, что в канал прилетит очень много сообщений. |
||||||
|
|
||||||
|
Я использую для запуска данного бинарника systemd и его возможности для запуска сервисов по расписанию. |
||||||
|
|
||||||
|
Для этого в /etc/systemd/system созданы два файла: |
||||||
|
|
||||||
|
- rsscollector.service |
||||||
|
- rsscollector.timer |
||||||
|
|
||||||
|
rsscollector.service: |
||||||
|
|
||||||
|
```ini |
||||||
|
[Unit] |
||||||
|
Description=Collect RSS from sites and send to telegram |
||||||
|
Wants=rsscollector.timer |
||||||
|
|
||||||
|
[Service] |
||||||
|
Type=oneshot |
||||||
|
ExecStart=/usr/local/bin/rsscollector -c /etc/rsscollector/config.yml |
||||||
|
User=root |
||||||
|
Group=root |
||||||
|
|
||||||
|
[Install] |
||||||
|
WantedBy=multi-user.target |
||||||
|
``` |
||||||
|
|
||||||
|
rsscollector.timer |
||||||
|
|
||||||
|
```ini |
||||||
|
[Unit] |
||||||
|
Description=Collect RSS from sites and send to telegram |
||||||
|
Requires=rsscollector.service |
||||||
|
|
||||||
|
[Timer] |
||||||
|
Unit=rsscollector.service |
||||||
|
OnCalendar=*:0 |
||||||
|
|
||||||
|
[Install] |
||||||
|
WantedBy=timers.target |
||||||
|
|
||||||
|
``` |
||||||
|
|
||||||
|
После создания файлов необходимо включить выполнение `rsscollector.timer` командой: |
||||||
|
`systemctl enable rsscollector.timer` |
||||||
|
|
||||||
|
В начале каждого часа будет вызываться на выполнение `rsscollector.service` |
||||||
Loading…
Reference in new issue