Автопостинг в блоге
Следующим шагом, который хотелось бы в блоге иметь - это автоматическое оповещение о новых постах в телеграме, VK и Facebook.
При этом я сознательно не стал искать готового решения, поскольку решил сделать во-первых именно так, как я хочу, а во-вторых потренироваться в программировании на любимом Go.
Как видится процесс
- Встраиваемся в процесс деплоя, описанный тут в блоге. То есть необходимо добавить ещё один хэндлер в плейбуке, который будет обрабатывать файл index.xml - сгенерированный, в процессе деплоя блога, rss, неким приложением.
- Необходим некий процесс инита, чтобы напустить аппликуху на файлик, которая его перемолотит и просто сложит в некое хранилище, никуда ничего не отсылая, для создания некоего текущего положения от которого начнется автопост. Дальнейшие запуски будут все новые посты отсылать в соцсеточки и телеграмчики.
- В телеграм отсылать заголовок поста, краткое описание и ссылку
- В VK и Фейсбук отсылать только ссылку. Там этого более чем достаточно, все остальные сведения они соберут по ссылке сами.
- Разработка на Go. Публичный репозиторий на гитхабе. Конфиг в yaml, но при этом иметь возможность и через параметры командной строки тоже передавать команды и параметры через переменные среды.
- Если получится, задействовать систему экшенов гитхаба для автоматической сборки релизов под Линукс (под винду не вижу смысла заморачиваться)
Что реализовано на текущий момент
Сделан репозиторий на гихаб пока без Redme, но в дальнейшем, как руки дойдут, опишу. Сейчас процесс разработки в полном разгаре, не до того.
Пишу на go 1.17 с применением библиотек:
- go-telegram-bot-api для работы с API телеграмма
- vksdk для работы с API VK
- boltdb как локальное хранилище состояния уже отосланной информации в соцсеточки, чтобы исключить дублирование отправки
Стоит ли делать постинг для Фейсбука, в свете текущей ситуации, пока не решил. Посмотрим как будет развиваться вот это вот всё.
В параметры командной строки вынес:
-f, --fileparse
обязательный параметр, для указания файла rss
-i, --initdb
необязательный параметр для запуска процесса инициализации первоначального состояния
-c, --configpath
необязательный параметр для указания, где искать конфиг приложения. Если не указан, то ищется в /etc/ssender/config.yml
Файл конфига должен выглядеть примерно так:
dbpath: "/var/cache/ssender/ssender.db"
telegram:
send: true
senddebug: false
token: "<TOKEN>"
chatid: -1001111111111111122
vk:
send: true
token: "<TOKEN>"
ownerid: 7777777
facebook:
send: false
token: ""
Где общие параметры:
- dbpath - где хранить базу boltdb
- telegram - блок описания параметров для telegram
- vk - то же самое для vk
- facebook - то же самое для Facebook
- send - посылать или нет в соцсеточки
- token - токен для доступа к постингу в соцсеть
Параметры чисто для телеграм
- senddebug - будут ли в выводе дебаг-сообщения библиотеки при отправке.
- chatid - идентификатор канала, в который будет отсылаться. Можно найти в параметре forward_from_chat, если переслать какое-нибудь сообщение боту @JsonDumpBot в телеграмме.
Параметры чисто для VK
- ownerid - идентификатор пользователя, от имени и на стену которого будет пост
Первый запуск имеет смысл сделать с параметром -i, дальнейшие без него.
Сборка бинарника проста:
go build -o ssender main.go
В процессе попросит установить библиотеки в виде:
go get github.com....
Нужно выполнить эти строки для установки требуемых библиотек.
Встраиваем в деплой сайта
Плейбук изменяется следующим образом:
---
- name: Clone a private repository for site structure
hosts: local
become: no
tasks:
- name: Clone site
git:
repo: git@github.com:NetMoose/netmoose.ru.git
version: master
dest: /home/netmoose/netmoose.ru
accept_hostkey: yes
notify:
- Execute HUGO
- Execute ssender
handlers:
- name: Execute HUGO
shell: /usr/local/bin/hugo -d /var/www/html
args:
chdir: /home/netmoose/netmoose.ru
- name: Execute ssender
shell: /usr/local/bin/ssender -f /var/www/html/index.xml
То есть добавился ещё один хендлер, который отработает, если будут изменения в репозитории сайта.