MODx Revolution. Автопостинг в группу ВК статей с сайта.

Что будем делать: настроим MODx на отправку сообщений в группу в ВК.

Наметим план и сразу к делу:

  1. Создаем приложение
  2. Получаем токен
  3. Создаем плагин

1.Создаем приложение

Делаем под тем аккаунтом, к которому будет привязываться постинг.

Идем сюда vk.com/dev, жмём создать приложение.

Название - какое угодно, оно нигде использоваться нами не будет.
Тип - выбираем Standalone-приложение

Жмем "Подключить приложение" и вводим смс-код активации. Идем в Настройки и копируем ID приложения.

2. Получаем access_token

access_token - значение которое нужно получить, чтобы при работе с API ему было понятно кто с ним работает. Тут внимание, его нигде не сохраянем в сети, только на своем сайте, а то есть риск остаться без аккаунта.

Открываем новую вкладку в браузере, вставляем в адресную строку:

https://oauth.vk.com/authorize?client_id=<ИД вашего приложения>&scope=friends,wall,groups,offline&redirect_uri=https://oauth.vk.com/blank.html&response_type=token

client_id - ID приложения, которое было создано на предыдущем шаге.

scope - список прав, которые даются приложению от нашего пользователя. Полный список vk.com/dev/permissions

Разрешаем приложению доступ, далее смотрим в адресную строку браузера, там будет токен < ВАШ ТОКЕН >

https://oauth.vk.com/blank.html#access_token=< ВАШ ТОКЕН >&expires_in=0&user_id=< USER ID >

3. Создаем новый плагин в MODx

Перед тем как создавать плагин, зайдем возьмем класс VK, написанный vladkens.

Создаем новый плагин, обзываем его как хотите. Привязываем на событие OnDocPublished. Смотрим на код ниже, редактируем его под себя.

if ($modx->event->name == 'OnDocPublished') 
{

    $api_id = ''; // Вставляем наш ID приложения
    $secret_key = ''; // Секретный код приложения из настроек
    $access_token = ''; // Токен который получили на втором шаге
    
    // Подключаем API для работы
    define('MODX_API_MODE', true);
    require_once($_SERVER['DOCUMENT_ROOT'].'/index.php');
    $modx=new modX();
    $modx->initialize('web');

    ini_set('default_charset', 'utf-8');
    error_reporting(E_ALL);
    
    // Подключаем компонент для работы 
    require_once $_SERVER['DOCUMENT_ROOT'].'/путь_до_файла/VK.php';
    require_once $_SERVER['DOCUMENT_ROOT'].'/путь_до_файла/VKException.php';

    // Делаем конфиг
    $vk_config = array(
        'app_id'        => $api_id,
        'api_secret'    => $secret_key,
        'access_token'     => $access_token,
    );
    
    // ID группы куда нужно постить
    // Обязательно перед ID ставится "-" (минус) !!!!
    // Пример ниже
    $user_id = "-12345678";
   
    // Инициализируем класс
    $vk = new VK\VK($vk_config['app_id'], $vk_config['api_secret'], $vk_config['access_token']);

    // Берем заголовок и аннотацию из документа
    $pagetitle = $resource->get('pagetitle');
    $introtext = $resource->get('introtext');
    
    // Крафтим месседж
    $message = $pagetitle."\n\n".$introtext;
    
    // Крафтим url до документа
    $docId = intval($resource->get('id'));
    $url = $modx->makeUrl($docId,'web','','full');

    // Формируем минимально необходимый массив для месседжа
    $params = array(
        "owner_id" => $user_id,
        "message" => $message,
        "attachments" => $url
    );
    
    // Отправляем на сайт 
    $post = $vk->api("wall.post", $params);
}

На этом все, обновляемся и пляшем :) Инфа была собрана по крупицам и оттестирована на этом сайте, собственно этот код так и работает, за исключением проверки на тип создаваемого документа, ибо у нас это может быть и сообщение, заметка, статья, работа в портфолио и т.д. Как сделать проверку, сами догадаетесь, тут ничего сложного нету. Подсказка: по ID контейнерам-родителей элемента.

Комментарии (1)
  • AX 10 августа 2018, 08:32 # 0
    Добрый день!
    Не работает плагин почему-то… Ошибок в логах нет.
    1. Написать комментарий