|
|
3 years ago | |
|---|---|---|
| .gitignore | 4 years ago | |
| LICENSE | 4 years ago | |
| README.md | 4 years ago | |
| go.mod | 4 years ago | |
| go.sum | 4 years ago | |
| main.go | 4 years ago | |
| process_rss.go | 4 years ago | |
| send.go | 3 years ago | |
README.md
RSSCollector
О проекте
Данный проект предназначен для сбора информации из RSS о публикациях на сайтах. Найденные новые публикации пересылаются в канал в Telegram.
Какие технологии используются
Для сборки проекта необходимы:
- Компилятор GO
- Дополнительный модуль обработки параметров командной строки https://github.com/jessevdk/go-flags
- Дополнительный модуль для работы с Telegram Bot API https://github.com/go-telegram-bot-api/telegram-bot-api
- Встраиваемая БД BoltDB
Конфигурация
По-умолчанию конфигурационный файл ищется в том же каталоге, где запускается исполняемый файл, с именем config.yml.
Формат данного файла - 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, переслав ему любое сообщение из требующегося канала и взяв идентификатор (вместе с -) из параметра
forward_from_chat - <TOKEN> - токен бота, от имени которого будут присылаться сообщения и которого необходимо добавить в канал администратором (достаточно оставить ему права отсылать сообщения в канал). Бота заводим, как обычно, через 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:
[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
[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