Прежде чем перейти к статье, хочу вам представить, экономическую онлайн игру Brave Knights, в которой вы можете играть и зарабатывать. Регистируйтесь, играйте и зарабатывайте!
Всем привет! В этой статье расскажу свой путь по написанию bot-а(скрипта) для репоста постов из ВК на другие платформы.
Ознакомиться с проектом можете на Github, по ссылке.
Если кратко (цель проекта)
Index.php - при появлении новой записи на стене группы ВК - записывает их в БД
toTG.php\toFB.php\toOK.php - проверяют в БД наличие неопубликованных записей и если записи есть - публикуют их и делает отметку в БД.
Предыстория
Все началось лет 10 назад, когда студентом пытался на найти квартиру через VK. Но паблика недвижимости для моего города - не нашлось. Я подумал - это ниша и создал группу для поиска недвижимости. На текущий момент в группе около 10.000 подписчиков.
Прошло много времени, я начал работать в IT как QA, постиг много азов и решил, пора расширятся на другие платформы, но было лень (а лень двигатель прогресса) публиковать все новости в других соц.сетях и меседжерах вручную и я решил это немного автоматизировать. Что вышло - читайте ниже.
В этой статье мы рассмотрим пример для публикации записей из VK на различных платформах, таких как Telegram, Facebook и Одноклассники. Мы будем использовать Docker, официальные SDK и API.
Подготовка окружения
Подключаемся к серверу по SSH
Обновляем все на сервере
sudo apt update
sudo apt upgrade
Устанавливаем Docker
Установите необходимые пакеты для поддержки HTTPS:
sudo apt install apt-transport-https ca-certificates curl software-properties-common
Добавляем официальный ключ Docker GPG:
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
Добавляем официальный репозиторий Docker:
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
Обновляем индексы пакетов еще раз:
sudo apt update
И наконец ставим Docker:
sudo apt install docker-ce docker-ce-cli containerd.io
Проверяем, что Docker успешно установлен, запустив простую команду:
sudo docker run hello-world
Устанавливаем Git
sudo apt install git
После завершения установки проверяем, что Git установлен правильно, выполнив команду:
git --version
Копируем проект к себе на сервер
Git clone git@github.com:Antoha-94/flat_polotsk_novopolotsk
Выполняем инструкцию из файла README.md
Краткая выдержка:
Редактируем под себя файл .env(делаем его из примера: .env.example )
Редактируем файлы конфига nginx
Выполняем:
docker compose exec php bash
Ставим в контейнере PHP - composer, выполнив
composer install
Билдуем контейнеры Docker
docker-compose up -d --build
Настраиваем соц.сети\меседжеры
Из файла config.example.ini делаем свой файл config.ini - это файл с подключениями к БД и нашими токенами от VK, Telegram, Facebook и odnoklassniki
Нам нужно настроить доступ к API каждой социальной сети\меседжера\БД. Для этого нам понадобится указать в файлике config.ini следующие данные:
[Database] - указываем подключения к БД
servername - ip по которому подключаемся в базе
username - имя пользователя
password - пароль
dbname - название БД
[VK] - переходим в настройки группы(управление) -> работа с API -> Callback API и заполняем инфу о сервере, секретный ключ и берем значение " Строка, которую должен вернуть сервер". Все записываем в config.ini файл.
confirmation_token: значение указанное в "Строка, которую должен вернуть сервер"
token: значение указанное в " Секретный ключ:"
post_type: в моем случае "post"
[Telegram] - создает своего бота через BotFather, добавляем его в канал(предполагается что он уже создан) telegram куда будем репостить посты из ВК. Вносим в config.ini следущее:
api_key: Ключ бота Telegram.
chat_id: Идентификатор чата или канала, куда мы будем отправлять сообщения.
[Facebook] - регистрируемся в кабинете разработчика Facebook: https://developers.facebook.com/async/registration и создаем приложение на странице: https://developers.facebook.com/apps
В config.ini вносим:
app_id: Идентификатор приложения Facebook.
app_secret: Секретный ключ приложения Facebook.
page_id: Идентификатор страницы Facebook, на которую мы будем репостить записи.
user_access_token: Токен доступа пользователя с необходимыми разрешениями.
[OK] (Одноклассники) - создаем группу куда будем репостить посты из ВК. Регистрируемся в https://ok.ru/devaccess и создаем своем приложение (подробнее здесь: https://apiok.ru/dev/app/create)
В config.ini вносим:
access_token: Вечный access_token в приложении
private_key: Закрытый ключ приложения.
public_key: Публичный ключ приложения.
session_key: Сессионный ключ в приложении.
group_id: Идентификатор группы Одноклассники, на которую мы будем репостить записи.
7. Размечаем таблицу fromvk в БД, выполнив в PHPmyAdmin SQL:
CREATE TABLE fromvk ( id int(11) NOT NULL, text text DEFAULT NULL, photo text DEFAULT NULL, signer_id text DEFAULT NULL, IsRepostToTelegram tinyint(1) NOT NULL DEFAULT 0, IsRepostToInstagram tinyint(1) NOT NULL DEFAULT 0, IsRepostToFacebook tinyint(1) NOT NULL DEFAULT 0, IsRepostToViber tinyint(1) DEFAULT 0, IsRepostToOK tinyint(1) DEFAULT 0 ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
Настраиваем расписание в Сrone
Открываем файл Crone c расписанием:
crontab -e
Настраиваем как часто будет происходить проверка в БД на наличие неперерепощеных записей в telegram, facebook, ok. Рекомендую ставить одинаковое расписание для всех 3 фалов. В примере ниже - проверка каждую минуту + логирование в файл cron.log
* * * * * cd /root/simple-docker-php-main && docker compose exec php php toTG.php >> /root/simple-docker-php-main/cron.log 2>&1
* * * * * cd /root/simple-docker-php-main && docker compose exec php php toFB.php >> /root/simple-docker-php-main/cron.log 2>&1
* * * * * cd /root/simple-docker-php-main && docker compose exec php php toOK.php >> /root/simple-docker-php-main/cron.log 2>&1
Тестируем, что все работает
Публикуем запись в группе ВК.
Ждем не более минуты, пока отработает расписание Crone
Проверяем, что записи появились в соц.сетях\меседжерах
Жду ваших пул реквестов с улучшениями, код пока что сыроват, но работает! :-)