1 changed files with 103 additions and 1 deletions
@ -1 +1,103 @@
@@ -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