Код вконтакте для php

Первый бот на PHP для ВКонтакте

Здравствуйте, хабровчане. В этой публикации я напишу о том, как сделать своего первого чат-бота для ВКонтакте. Думаю, что опытным программистам это будет не интересно, а вот тем, кто только начинает свой путь, будет интересно, так как я ещё и сам не очень далеко ушёл и понимаю проблемы начинающих. И предупреждаю сразу, что большинство скриншотов будет на английском языке.

Сперва нам нужно создать сообщество. Думаю, с этим справится каждый.

Затем мы заходим в настройки сообщества и выбираем пункт «API usage» и нажимаем на кнопку «Create token».

image

Далее нужно выбрать, собственно, чем мы сможем пользоваться с помощью этого токена. Нам нужен доступ к сообщениям сообщества, но можно выбрать все права доступа, чтобы в дальнейшем не вспонимать о создании токенов.

image

И вот мы получили заветный токен. Его, кстати, нужно сохранить в надёжное место и никому не показывать. Теперь можно приступать к коду.

image

Мы будем писать код на языке PHP, поэтому можно скачать Visual Studio code или PHPStorm. В принципе, код можно писать и в блокноте, только это будет не удобно. После кода мы перейдём к дальнейшей настройке группы.

Итак, для начала нам нужно получить информацию о входящем сообщении и перевести её из формата JSON в понятный для PHP.

В переменной data теперь к нас находится массив с сообщением, ID пользователя и ID чата.
«А что за „json_decode(file_get_contents(‘php://input’))“, — спросите вы.

file_get_contents('php://input')

Выражаясь, простым языком, мы спрашиваем у скрипта что у нас пришло на вход, то есть какой запрос отправил ВК. Ниже приведу пример такого запроса.

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

Ну а „json_decode()“ — функция, которая переводит вышеприведённый JSON в массив, с которым может работать PHP.

Теперь напишем код, который смотрит какое событие произошло, и если к нам пришло новое сообщение, то сравнивает сообщение, с теми, на которые у нас есть ответ и смотрит ID чата.

type) < case 'confirmation': echo $confirmation_token; break; case 'message_new': $message_text = $data ->object -> text; $message_text = $data -> object -> peer_id; if ($message_text == "привет") < // что-то происходит >if ($message_text == "пока") < // что-то происходит >echo 'ok'; break; > ?> 

Теперь нам нужно как-то отвечать на эти сообщения. Для этого напишем простую функцию.

 $text, 'peer_id' => $peer_id, 'access_token' => "TOKEN", 'v' => '5.87' ); $get_params = http_build_query($request_params); file_get_contents('https://api.vk.com/method/messages.send?'. $get_params); > ?> 

Что же тут происходит? Здесь мы строим запрос к API VK (документацию рекомендую почитать) с текстом сообщения, ID чата и токеном, который мы создали ранее, и отправляем его на сервер ВК.

Теперь соединим эти куски кода и напишем реакции бота на то или иное сообщение.

 $text, 'peer_id' => $peer_id, 'access_token' => "TOKEN", 'v' => '5.87' ); $get_params = http_build_query($request_params); file_get_contents('https://api.vk.com/method/messages.send?'. $get_params); > $data = json_decode(file_get_contents('php://input')); switch ($data->type) < case 'confirmation': echo $confirmation_token; break; case 'message_new': $message_text = $data ->object -> text; $chat_id = $data -> object -> peer_id; if ($message_text == "привет") < vk_msg_send($chat_id, "Привет, я бот, который говорит две фразы."); >if ($message_text == "пока") < vk_msg_send($chat_id, "Пока. Если захочешь с кем-то поговорить, то у тебя есть бот, который говорит две фразы."); >echo 'ok'; break; > ?> 

«Хорошо, а зачем нам писать ‘ok’ после отправки сообщения?»

Так как мы будем использовать метод получения обновлений с названием Call Back API, то есть сам ВКонтакте нам будет говорить о новых сообщениях, то нам нужно сказать, что мы его услышали, иначе он будет нам повторять несколько раз.

Теперь перейдём к настройке группы.

Заходим в настройки и выбираем версию API 5.87 (можно, конечно, и более новые версии, но лучше иметь единство версий API).

image

Из этого же раздела берём строку, которую должен вернуть сервер, и подставляем её в переменную confirmation_token.

После этого заполняем адрес сервера. Для этого нужно иметь домен и хостинг. По адресу, который Вы укажите, должен быть как раз файл с ботом. Надеюсь, с этим читатель справится сам.

Потом выбираем о каких событиях в сообществе нам будет сообщать ВКонтакте. Нам нужны только входящие сообщения.

image

Далее подтверждаем адрес сервера, и наш первый бот готов к использованию.

image

Так как это моя первая публикация на Хабре, я хочу получить замечания по статье и дальше только совершенствоваться.

Источник

Saved searches

Use saved searches to filter your results more quickly

You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session.

Vkontakte standalone php api

License

fdcore/vk.api

This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?

Sign In Required

Please sign in to use Codespaces.

Launching GitHub Desktop

If nothing happens, download GitHub Desktop and try again.

Launching GitHub Desktop

If nothing happens, download GitHub Desktop and try again.

Launching Xcode

If nothing happens, download Xcode and try again.

Launching Visual Studio Code

Your codespace will open once ready.

There was a problem preparing your codespace, please try again.

Latest commit

Git stats

Files

Failed to load latest commit information.

README.md

Work with Vkontakte API for StandAlone application on php.

To work with api you need to perform several actions:

  1. Create «Standalone-app»https://vk.com/editapp?act=create
  2. Get access_token (see below)
  3. Set client_id and secret_key application.
composer require fdcore/vk.api 
 include 'vendor/autoload.php'; use fdcore\vkapi\Vk; $v = new Vk(); ?>

Execute method get_code_token for get link. Go to link and get access app, after you redirected on blank page with access_token on hash url.

include_once 'vk.php'; $v = new Vk(array( 'client_id' => 12345, // (required) app id 'secret_key' => 'XXXXXX', // (required) get on https://vk.com/editapp?id=12345§ion=options 'user_id' => 12345, // your user id on vk.com 'scope' => 'wall', // scope access 'v' => '5.35' // vk api version )); $url = $v->get_code_token(); echo $url;

Variable $url it will contain a link for redirect to which you will be asked to log in and provide the right application, and then you are thrown on a blank page and the URL is access_token=your token.

To receive necessary permissions during authorization, when the authorization window opens you need to pass scope parameter containing names of the required permissions separated by space or comma.

$config['secret_key'] = 'your secret key'; $config['client_id'] = 12345; // app client id $config['user_id'] = 12345; // id current user (required $config['access_token'] = 'your access token'; $config['scope'] = 'wall,photos,video'; // scope for get access token $v = new Vk($config); // example post to user wall // Method info https://vk.com/dev/wall.post $response = $v->api('wall.post', array( 'message' => 'I testing API form https://github.com/fdcore/vk.api' )); // or $response = $v->wall->post(array( 'message' => 'I testing API form https://github.com/fdcore/vk.api' ));
  • Upload video $v->upload_video()
  • Upload photo to wall $v->upload_photo()
  • Upload documents $v->upload_doc()

For upload photo, use method upload_photo().

  • $gid — (Intager) (default is 0) id community, for upload photo.
  • $files — (Array) path to file (example array(‘bear.jpg’, ‘vodka.jpg’))
  • $return_ids — (Bool) (default is false) return files id’s or complete strings for attach (example photo12345_6789) (photo — type, 12345 — user, 6789 — photo id)
// upload photo on server $attachments = $v->upload_photo(0, array('bear.jpg', 'vodka.jpg'), false); // публикация на стене $response = $v->wall->post(array( 'message'=>'my cool photo', 'attachments' => implode(',', $attachments) ) );
// embed from YouTube without upload $attach_video = $v->upload_video(array( 'link'=>'https://youtu.be/exAmqVtYbis', 'title' => 'Hatsune Miku Project Diva 2nd Opening Full HD', 'description' => "First Song: \"Kocchi Muite baby\" by ryo and kz", 'wallpost' => 1 )); // upload video on VK.com $attach_name = $v->upload_video( array('name' => 'Test video', 'description' => 'My description', 'wallpost' => 1, 'group_id' => 0 ), 'video.mp4'); // video.mp4 - full path to video file on server
$attach_doc_file = $v->upload_doc(0, 'funny.gif'); if ( is_string($attach_doc_file) ) echo $attach_doc_file;

Источник

Читайте также:  Python javascript object to json
Оцените статью