Создание бота Вк на языке PHP — уроки API Вк
Боты стали новой эпохой в соц сетях и мессенджерах. Мы расскажем как создать настоящего бота на PHP, используя API социальной сети Вконтакте.
Для создание ботов в социальной сети Вконтакте нужно несколько вещей:
- Специальный
standalone token
; - Токен вашей группы;
- Сам скрипт с ботом;
- Группа с подключенным сервером и API.
Получение токена
Первым делом необходимо получить standalone token
вместе с токеном вашей группы. Для этого переходим в раздел для разработчиков и в «Мои приложения«. Здесь создаем новое приложение. Название приложения можете выбрать любым, главное чтобы оно было Standalone-приложение.
Включите Open API после создания приложения. В него пропишите сайт, с которым будет связано ваше приложение, а также базовый домен.
После этого необходимо перейти по этой ссылке. Также вы её видите ниже:
https://oauth.vk.com/authorize?client_id=6678654&display=page&redirect_uri=https://oauth.vk.com/blank.html&scope=friends,photos,audio,video,status,messages,wall,groups,offline,stats,email&response_type=token&v=5.63
Единственное, вам необходимо изменить client_id
и установить чтобы оно было равным ID вашего приложения.
Далее вы нажимаете на кнопку Разрешить и после этого получаете токен, который будет записан в ссылке. Копируете токен от знака равенства (=
) и до амперсанда (&
).
После этого создайте новую группу или воспользуйтесь вашей существующей группой. Зайдите в настройке, после чего в Ключи доступа и нажмите Создать ключ. Установите все права для ключа и после этого вы сможете получить токен вашей группы, который вам пригодиться для создания бота.
Создание самого бота
Для создания бота нам понадобиться три файла:
config
— файл служащий исключительно для нас. В нем мы запишем различные настройки и данные, которые сможем в дальнейшем использовать в других файлах;photos
— файл для обработки альбома. В этом файле мы будем обрабатывать альбом, получать из него все изображение и записывать их в новый txt файл в специальном формате, который в дальнейшем будем передавать в качестве прикрепленного изображения к сообщению;bot
— основной файл с ботом. Здесь мы прописываем обработку данных от пользователя, а также передачу сообщений от бота к пользователю Вконтакте.
Ниже представлены эти три файла. Они полностью готовы и с рабочим кодом. Детальное описание всего что в них происходит вы можете получить из видео.
Скрипт config:
$album = 'https://vk.com/album-113958919_252151167';
$res = parse_url($album);
$path = substr($res['path'], 6);
$arr = explode('_', $path);
$owner_id = $arr[0];
$album_id = $arr[1];
$standalone = "ваш standalone токен приложения";
$group_token = 'ваш токен группы';
$conf = [
'standalone' => $standalone,
'group_token' => $group_token,
'contorm_token' => 'eae5d4a2',
'mess' => 'Фото в студио',
'not_command' => 'Ничего не понял!',
'owner_id' => $owner_id,
'album_id' => $album_id,
'group_id' => '170785666',
'apiurl' => 'https://api.vk.com/method/',
'path' => substr($_SERVER['PHP_SELF'], 0, -2),
'photos' => 'photos.txt',
'temp_link' => 'temp_album.txt',
'random_id' => mt_rand(0000000000, 999999999999),
'v' => '5.50'
];
Скрипт photos:
unlink($conf["photos"]);
$query = file_get_contents($conf['apiurl'].'photos.get?owner_id='.$conf['owner_id'].'&album_id='.$conf['album_id'].'&v='.$conf['v'].'&access_token='.$conf['standalone']);
$res = json_decode($query, true);
foreach($res as $v) {
foreach($v['items'] as $q) {
$result = 'photo'.$q['owner_id'].'_'.$q['id'];
file_put_contents($conf['photos'], $result."\n", FILE_APPEND | LOCK_EX);
}
}
Скрипт bot:
require "config.php";
$data = json_decode(file_get_contents('php://input'));
$u_id = $data->object->user_id;
$mess = $data->object->body;
$user_info = json_decode(file_get_contents($conf['apiurl'].'users.get?user_id='.$u_id.'&v='.$conf['v'].'&access_token='.$conf['standalone']));
$user_name = $user_info->response[0]->first_name;
$temp_link = file($conf['temp_link']);
if($temp_link[0] != $album) {
file_put_contents($conf['temp_link'], $album);
require "photos.php";
return true;
}
switch($data->type) {
case 'confirmation':
echo $conf['contorm_token'];
break;
case "message_new":
if($mess == $conf['mess']) {
$file = file_get_contents($conf['photos']);
$photos_all = explode("\n", $file);
$myCurl = curl_init();
curl_setopt_array($myCurl, array(
CURLOPT_URL => $conf['apiurl'].'messages.send?user_id='.$u_id.'&group_id='.$conf['group_id'].'&attachment='.$photos_all[mt_rand(0, count($photos_all) - 1)].'&message='.urlencode('Держи свое фото').'&v='.$conf['v'].'&access_token='.$conf['standalone'],
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => http_build_query(array())
));
$response = curl_exec($myCurl);
curl_close($myCurl);
} else {
$myCurl = curl_init();
curl_setopt_array($myCurl, array(
CURLOPT_URL => $conf['apiurl'].'messages.send?user_id='.$u_id.'&group_id='.$conf['group_id'].'&message='.urlencode($conf['not_command']).'&v='.$conf['v'].'&access_token='.$conf['standalone'],
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => http_build_query(array())
));
$response = curl_exec($myCurl);
curl_close($myCurl);
}
echo 'ok';
break;
}
Детальное описание создания бота на языке PHP под систему Вконтакте:
Последнее что необходимо будет сделать, так это прописать URL адрес скрипта bot.php в группе, в настройках API:
После этого можете написать сообщение в группу и бот будет вам отвечать. Напишите «Фото в студио» и бот пришлет вам случайную фотографию из альбома.