Чтобы настроить автоматическую публикацию материалов из MODX в VK.com, нужно использовать API ВКонтакте и создать скрипт, который будет отправлять запросы к VK API с данными о постах. Вот пошаговая инструкция с примером кода:
Создайте приложение ВКонтакте:
Настройте права доступа:
wall
для публикации на стене и offline
для сохранения токена на длительное время.Вам нужно создать PHP-скрипт, который будет использовать VK API для публикации постов. Вот пример:
// Путь к папке telegram_bot
$basePath = MODX_BASE_PATH . 'telegram_bot/'; $newsIdFile = $basePath . 'news_id_vk.txt'; $logFile = $basePath . 'log_vk.txt';
// Функция для логирования ошибок
function logError($message) { global $logFile; file_put_contents($logFile, date('Y-m-d…
Чтобы настроить автоматическую публикацию материалов из MODX в VK.com, нужно использовать API ВКонтакте и создать скрипт, который будет отправлять запросы к VK API с данными о постах. Вот пошаговая инструкция с примером кода:
Создайте приложение ВКонтакте:
Настройте права доступа:
wall
для публикации на стене и offline
для сохранения токена на длительное время.Вам нужно создать PHP-скрипт, который будет использовать VK API для публикации постов. Вот пример:
// Путь к папке telegram_bot
$basePath = MODX_BASE_PATH . 'telegram_bot/'; $newsIdFile = $basePath . 'news_id_vk.txt'; $logFile = $basePath . 'log_vk.txt';
// Функция для логирования ошибок
function logError($message) { global $logFile; file_put_contents($logFile, date('Y-m-d H:i:s') . " - $message\n", FILE_APPEND); }
// Получаем ресурс с ID 158, в котором хранится API ключ VK
$apiKeyResource = $modx->getObject('modResource', 158);
if (!$apiKeyResource) { logError("Ошибка: Не удалось получить ресурс с ID 158."); exit; }
$vkApiKey = $apiKeyResource->getTVValue('VkAPI');
if (!$vkApiKey) { logError("Ошибка: API ключ VK не найден в TV поле 'VkAPI'."); exit; }
// Получаем список ID уже опубликованных новостей
$publishedIds = file_exists($newsIdFile) ? file($newsIdFile, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES) : []; echo "ID уже опубликованных новостей: " . implode(', ', $publishedIds) . "\n";
// Шаг 1: Получаем ID родителей (родители — каталоги с новостями)
$parentQuery = $modx->newQuery('modResource');
$parentQuery->where([ 'parent' => 60, 'isfolder' => 1, ]);
$parentQuery->select('id');
$parentCollection = $modx->getCollection('modResource', $parentQuery); $parentIds = [];
foreach ($parentCollection as $parentResource)
{ $parentIds[] = $parentResource->get('id'); }
echo "Найденные родительские ID: " . implode(', ', $parentIds) . "\n"; if (empty($parentIds))
{ logError("Ошибка: Не найдены родители с parent = 60 и isfolder = 1."); exit; }
// Шаг 2: Получаем количество доступных новостей
$query = $modx->newQuery('modResource');
$query->where([ 'published' => 1, 'deleted' => 0, 'parent:IN' => $parentIds, 'template:IN' => [28, 33], 'id:NOT IN' => $publishedIds, ]); $query->select('COUNT(id) as count');
// Вывод SQL-запроса для отладки
$sql = $query->toSQL(); echo "SQL запрос: {$sql}\n"; $totalNews = $modx->getValue($query->prepare());
echo "Количество доступных новостей для публикации: {$totalNews}\n"; if ($totalNews == 0) { logError("Ошибка: Нет новостей для публикации."); exit; }
// Шаг 3: Получаем случайную новость для публикации
$query->select('id, longtitle, introtext');
$query->sortby('RAND()');
$query->limit(1);
$news = $modx->getObject('modResource', $query);
if (!$news) { logError("Ошибка: Нет новостей для публикации."); exit; } $newsId = $news->get('id');
$newsTitle = $news->get('longtitle'); $newsIntro = $news->get('introtext'); $newsUrl = $modx->makeUrl($newsId, '', '', 'full');
// Шаг 4: Отправляем пост в VK
$ownerId = '-YOUR_GROUP_ID';
// ID группы VK с минусом (например, -12345678)
$message = "$newsTitle\n\n$newsIntro\nПодробнее: $newsUrl";
$apiUrl = 'https://api.vk.com/method/wall.post';
$params = [ 'owner_id' => $ownerId, 'message' => $message, 'access_token' => $vkApiKey, 'v' => '5.131', ];
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $apiUrl);
curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($params));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);
// Обрабатываем ответ VK API
$responseData = json_decode($response, true);
if (isset($responseData['error']))
{ logError("Ошибка при публикации в VK: " . $responseData['error']['error_msg']); exit; }
else { echo "Публикация успешно выполнена, ID поста: " . $responseData['response']['post_id'] . "\n";
// Шаг 5: Сохраняем ID опубликованной новости
file_put_contents($newsIdFile, $newsId . "\n", FILE_APPEND); } ?>
VkAPI
ресурса с ID 158.news_id_vk.txt
, где хранятся ID уже опубликованных новостей.log_vk.txt
.news_id_vk.txt
, чтобы избежать повторной публикации.news_id_vk.txt
и log_vk.txt
должны находиться в директории telegram_bot/
и быть доступны для записи.Лайков: 0 Дизлайков: 0
Контент-мейкеры: Кто они и какую роль играют в современном медиапространстве
Список социальных сетей и сайтов в России
Кто такой SMM специалист и почему он важен для компании?
Как выбрать и проверить SMM специалиста: навыки, поиск, собеседование и отличия
Как анализировать эффективность SMM кампаний
Как анализировать SMM кампании в VK.com, Яндекс.Директе и Telegram с использованием Яндекс.Метрики
SMM стратегия для стоматологической клиники в Москве с использованием VK.com, Яндекс.Директ, Telegram, Дзен, RuTube, VK Видео и «Видео ОК»
Как создать эффективную SMM стратегию: ключевые шаги и примеры компаний-лидеров
SMM стратегия для стоматологической клиники в Москве с использованием VK.com, Яндекс.Директ, Telegram, Дзен, RuTube, VK Видео и «Видео ОК»