You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Andrey Ivanov (NetMoose) 2e0f72a68e Fix textblock about incorrect symbols (html) 3 years ago
.gitignore Init commit 4 years ago
LICENSE Init commit 4 years ago
README.md Add readme 4 years ago
go.mod Init commit 4 years ago
go.sum Init commit 4 years ago
main.go Split project 4 years ago
process_rss.go Split project 4 years ago
send.go Fix textblock about incorrect symbols (html) 3 years ago

README.md

RSSCollector

О проекте

Данный проект предназначен для сбора информации из RSS о публикациях на сайтах. Найденные новые публикации пересылаются в канал в Telegram.

Какие технологии используются

Для сборки проекта необходимы:

  1. Компилятор GO
  2. Дополнительный модуль обработки параметров командной строки https://github.com/jessevdk/go-flags
  3. Дополнительный модуль для работы с Telegram Bot API https://github.com/go-telegram-bot-api/telegram-bot-api
  4. Встраиваемая БД 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