Репост постов со стены группы VK в telegram, facebook, odnoklassniki

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

Прежде чем перейти к статье, хочу вам представить, экономическую онлайн игру 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

Краткая выдержка:

  1. Редактируем под себя файл .env(делаем его из примера: .env.example )

  2. Редактируем файлы конфига nginx

  3. Выполняем:

docker compose exec php bash
  1. Ставим в контейнере PHP - composer, выполнив

 composer install
  1. Билдуем контейнеры 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

Тестируем, что все работает

  1. Публикуем запись в группе ВК.

  2. Ждем не более минуты, пока отработает расписание Crone

  3. Проверяем, что записи появились в соц.сетях\меседжерах

Жду ваших пул реквестов с улучшениями, код пока что сыроват, но работает! :-)

Источник: https://habr.com/ru/articles/747316/


Интересные статьи

Интересные статьи

Способ управление Synology Surveillance Station, находящегося внутри локальной сети без прямого доступа к Интернет, через Telegram-бота.
В середине мая 2021 года эксперты из SOLAR JSOC вместе с Национальным координационным центром по компьютерным инцидентам (НКЦКИ) выпустили отчет о серии целенаправленных атак, выявленных в 2...
Группы доступности AlwaysOn — мощное решение, дающее возможность для администраторов баз данных, реализовать очень высокий уровень доступности (HA, high availability) с п...
Привет жителям Хабра. В попытках изучения PHP и долгих раздумьях, пришла в голову мысль, для практики написать какого-нибудь бота на PHP, без использования фрэймворков. Выбор пал на бота, к...
Команда Хабра почти в полном составе Мы можем только догадываться, как всё выглядело снаружи, но изнутри Хабра 2019-й показался чертовски насыщенным. Мы по чуть-чуть меняли подход то тут, то...