Бот ВКонтакте на PHP: инструкция по созданию

Эта инструкция описывает создание бота ВКонтакте на PHP, отправляющего случайные фотографии из заданного альбома. Для работы необходим удалённый сервер, поскольку локальный не подходит для взаимодействия с API ВКонтакте.

Подготовка проекта

Создайте на удалённом сервере директорию (например, rbk) и три файла в ней: config.php, bot.php и photos.php.

  • config.php: Файл настроек бота.
  • bot.php: Файл обработки запросов к боту.
  • photos.php: Файл обработки фотографий.

Настройка config.php

Этот файл содержит основные настройки бота, включая данные доступа к API ВКонтакте и информацию об альбоме с фотографиями. ID владельца и ID альбома извлекаются из URL альбома. Пример использования parse_url и substr:

<?php
$album = "https://vk.com/album-12345678_987654321"; // URL вашего альбома

$res = parse_url($album);
$paz = substr($res['path'], 1, -6); // Удаляем первые 6 символов

$arr = explode('_', $paz);

$owner_id = $arr[0];
$album_id = $arr[1];

// Настройки
$standalone_token = ""; // Access token приложения
$group_token = "";     // Access token группы
$callback_api = ""; // Callback API группы
$message = "Фото в студии"; // Текст запроса на фото
$not_command = "Ничего не понял"; // Текст ответа на неизвестный запрос
$api_url = "https://api.vk.com/method/";
$version = "5.131";
$photos_file = "photos.txt"; // Путь к файлу с фотографиями
$random_id = ""; // Случайный ID для обработки запросов
?>

Получение ключей доступа

Для работы с Callback API:

  1. Зайдите в раздел «Разработчики» ВКонтакте.
  2. Создайте приложение (тип «Standalone»).
  3. Включите «Open API» и укажите адрес вашего сайта (например, https://etiprotiv.com).
  4. Получите access_token приложения по сгенерированной ссылке (она содержит client_id). Вставьте этот токен в $standalone_token в config.php.
  5. Создайте группу ВКонтакте и получите её access_token. Вставьте его в $group_token в config.php. Запомните $group_token и строку $callback_api (из настроек Callback API группы).

Настройка photos.php

Этот скрипт создаёт photos.txt, содержащий информацию о фотографиях из указанного альбома в формате «photo_owner_id_photo_id».

<?php
require_once 'config.php';

// Удаляем существующий файл
unlink($photos_file);

$url = $api_url . "photos.get?owner_id=" . $owner_id . "&album_id=" . $album_id . "&count=1000&access_token=" . $group_token . "&v=" . $version; // Запрос на получение данных

$json = file_get_contents($url);
$arr = json_decode($json, true);

foreach ($arr['response']['items'] as $item) {
    $res .= "photo_" . $item['owner_id'] . "_" . $item['id'] . "\n";
}

file_put_contents($photos_file, $res, FILE_APPEND | LOCK_EX);

?>

Настройка bot.php

bot.php обрабатывает входящие сообщения и отправляет ответы. Он использует cURL для запросов к API ВКонтакте.

<?php
require_once 'config.php';

$data = json_decode(file_get_contents('php://input'), true);
$type = $data['type'];

switch ($type) {
    case 'confirmation':
        echo $callback_api;
        break;

    case 'message_new':
        $message_id = $data['object']['message']['id'];
        $user_id = $data['object']['message']['from_id'];
        $message_text = $data['object']['message']['text'];

        $user_info_url = $api_url . "users.get?user_ids=" . $user_id . "&access_token=" . $group_token . "&v=" . $version;
        $user_info_json = file_get_contents($user_info_url);
        $user_info = json_decode($user_info_json, true)['response'][0]['first_name'];

        if ($message_text == $message) {
            $photos = file($photos_file);
            $photo = $photos[array_rand($photos)];

            $url = $api_url . "messages.send?user_id=" . $user_id . "&access_token=" . $group_token . "&message=" . urlencode("Держи свое фото!") . "&attachment=" . urlencode($photo) . "&v=" . $version . "&random_id=" . rand();
            $curl = curl_init($url);
            curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
            curl_exec($curl);
        } elseif ($message_text != $message) {
            $url = $api_url . "messages.send?user_id=" . $user_id . "&access_token=" . $group_token . "&message=" . urlencode($not_command) . "&v=" . $version . "&random_id=" . rand();
            $curl = curl_init($url);
            curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
            curl_exec($curl);
        }
        break;
}
echo "ok";
?>

Запуск бота

Настройте Callback API вашей группы ВКонтакте, указав URL вашего скрипта bot.php. Ваш бот начнёт обрабатывать входящие сообщения.

Инструкция описывает создание простого бота ВКонтакте на PHP. Функционал можно расширить, добавив обработку различных команд. Рекомендуется ознакомиться с документацией VK API.

Что будем искать? Например,программа