# 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: token: "" rsslist: - name: "" url: "https://" - name: "" url: "https://" ``` где - `dbpath` - путь до файла БД - `telegram` - блок описания парабетров для telegram-бота - `senddebug` - выводить ли debug-информацию при отправке в телеграм - \ - идентификатор канала, в который будет присылаться информация. Получить можно например из робота [Json Dump Bot](https://t.me/JsonDumpBot), переслав ему любое сообщение из требующегося канала и взяв идентификатор (вместе с -) из параметра `forward_from_chat` - \ - токен бота, от имени которого будут присылаться сообщения и которого необходимо добавить в канал администратором (достаточно оставить ему права отсылать сообщения в канал). Бота заводим, как обычно, через [BotFather](https://t.me/BotFather) - `rsslist` - блок описания лент, с которых будет собираться информация - \, \ - наименования лент. Используются как идентификаторы в БД и в логах для вывода информации, откуда инфа, а также при отправке в канал в заголовке - \, \ - веб-адреса 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`