И так, дорогие друзья, сегодня будем писать простого бота автоотвечтика для соцсети ВКонтакте на PHP. Цель статьи:научить бота отвечать на сообщение, в котором есть слово "привет". 1) Нам нужен локальный сервер типо денвера или open server, или если у вас есть сервак, можете ставить туда, особо разницы нет. 2) Создали домен в локальном сервере, проверили, если все ок, продолжаем. 3) Создаем в этой папке файл core.php .Это будет как бы ядро, основа бота с основным функционалом. В файл помещаем следующий код: <? $db = mysql_connect("localhost", "stream", "stream") or die("Ошибка"); тут надо вписать данные для входа в базу вот так - хост , логин, пароль mysql_select_db("stream", $db); //тут не трогать // тут мы подключаемся к базе данных. $token = ''; // тут нам нужно указать токен. как получить напишу ниже. $request = file_get_contents("https://api.vk.com/method/messages.get?out=0&offset=0&filtres=0&last_message_id=0&count=10&v=5.34&access_token=".$token.""); //отправляем запрос на сервер вконтакта и получаем ответ echo $request; // тут мы выводим ответ $result = json_decode($request); // в ответе мы получили json , нам нужно его декодировать for($i=0;$i<=10;$i++) { // тут мы создаем цикл. больше 10 ставить не надо, слишком долго грузить будет $message = $result->response->items[$i]->body; $user_id = $result->response->items[$i]->user_id; $id = $result->response->items[$i]->id; $chat_id = $result->response->items[$i]->chat_id; //в данном куске кода мы получаем тело сообщения, ид пользователя, ид сообщения и ид чата, если написали в чате $word = '/((П|п)ривет)/i'; if(preg_match($word, $message) == TRUE) { //ищем слово привет в нашем сообщениие $text = array('Привет', 'Хай', 'Хаюшки', 'Ку'); //набор ответов $rand = rand(0,3); $text = $text[$rand]; //рандомно берем ответ $send = send($text,$user_id,$chat_id,$token,$id); //отправляем ответ через функцию ниже } } // собственно функция отправки сообщения function send($text,$user_id,$chat_id,$token,$id) { $query = mysql_query("SELECT * FROM `message` WHERE `message` = '".$id."'"); $message = mysql_fetch_assoc($query); //делаем запрос в базу, если раньше не отвечали на сообщение, то ответим if(empty($message['id'])) { //отправляем сообщение if(empty($chat_id)) { //условие, если сообщение не в чате, то отправим его пользователю $request = file_get_contents("https://api.vk.com/method/messages.send?user_id=".urlencode($user_id)."&message=".urlencode($text)."&access_token=".$token.""); } else { //условие, если сообщение не от пользователя лично, то отправим его в чат $request = file_get_contents("https://api.vk.com/method/messages.send?chat_id=".urlencode($chat_id)."&message=".urlencode($text)."&access_token=".$token.""); } $query = mysql_query("INSERT INTO `message` (`message`) VALUES ('".$id."')"); // пишем в базу что отправили данное сообщение } } ?> Код <? $db = mysql_connect("localhost", "stream", "stream") or die("Ошибка"); тут надо вписать данные для входа в базу вот так - хост , логин, пароль mysql_select_db("stream", $db); //тут не трогать // тут мы подключаемся к базе данных. $token = ''; // тут нам нужно указать токен. как получить напишу ниже. $request = file_get_contents("https://api.vk.com/method/messages.get?out=0&offset=0&filtres=0&last_message_id=0&count=10&v=5.34&access_token=".$token.""); //отправляем запрос на сервер вконтакта и получаем ответ echo $request; // тут мы выводим ответ $result = json_decode($request); // в ответе мы получили json , нам нужно его декодировать for($i=0;$i<=10;$i++) { // тут мы создаем цикл. больше 10 ставить не надо, слишком долго грузить будет $message = $result->response->items[$i]->body; $user_id = $result->response->items[$i]->user_id; $id = $result->response->items[$i]->id; $chat_id = $result->response->items[$i]->chat_id; //в данном куске кода мы получаем тело сообщения, ид пользователя, ид сообщения и ид чата, если написали в чате $word = '/((П|п)ривет)/i'; if(preg_match($word, $message) == TRUE) { //ищем слово привет в нашем сообщениие $text = array('Привет', 'Хай', 'Хаюшки', 'Ку'); //набор ответов $rand = rand(0,3); $text = $text[$rand]; //рандомно берем ответ $send = send($text,$user_id,$chat_id,$token,$id); //отправляем ответ через функцию ниже } } // собственно функция отправки сообщения function send($text,$user_id,$chat_id,$token,$id) { $query = mysql_query("SELECT * FROM `message` WHERE `message` = '".$id."'"); $message = mysql_fetch_assoc($query); //делаем запрос в базу, если раньше не отвечали на сообщение, то ответим if(empty($message['id'])) { //отправляем сообщение if(empty($chat_id)) { //условие, если сообщение не в чате, то отправим его пользователю $request = file_get_contents("https://api.vk.com/method/messages.send?user_id=".urlencode($user_id)."&message=".urlencode($text)."&access_token=".$token.""); } else { //условие, если сообщение не от пользователя лично, то отправим его в чат $request = file_get_contents("https://api.vk.com/method/messages.send?chat_id=".urlencode($chat_id)."&message=".urlencode($text)."&access_token=".$token.""); } $query = mysql_query("INSERT INTO `message` (`message`) VALUES ('".$id."')"); // пишем в базу что отправили данное сообщение } } ?> С данным куском кода закончили. Далее подключаем базу Создаем файл stream.sql и помещаем туда такой код SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO"; SET time_zone = "+00:00"; /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; /*!40101 SET NAMES utf8 */; CREATE TABLE IF NOT EXISTS `message` ( `id` int(16) NOT NULL AUTO_INCREMENT, `message` text NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=316 ; INSERT INTO `message` (`id`, `message`) VALUES (1, '1'); /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; Код SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO"; SET time_zone = "+00:00"; /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; /*!40101 SET NAMES utf8 */; CREATE TABLE IF NOT EXISTS `message` ( `id` int(16) NOT NULL AUTO_INCREMENT, `message` text NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=316 ; INSERT INTO `message` (`id`, `message`) VALUES (1, '1'); /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; Это все дело надо импортировать в базу. Если все импортировалось, тогда переходим дальше. Не забудьте правильно вписать данные для входа в бд выше. Теперь если открыть в браузере ссылку типа http://вашдомен.рф/core.php , произойдет один цикл работы бота. Нам нужно как то его обновлять. Есть несколько вариантов. 1) Создать файл index.php и вписать туда такое <html> <head> <meta charset="utf-8"> <meta http-equiv="refresh" content="10"> <!--Вместо 10 писать через сколько секунд страница сделает перезагрузку--> </head> <body> <?PHP $ch = curl_init('http://domain/core.php'); curl_exec($ch); // отправляем запрос curl curl_close($ch); ?> </body> </html> HTML <html> <head> <meta charset="utf-8"> <meta http-equiv="refresh" content="10"> <!--Вместо 10 писать через сколько секунд страница сделает перезагрузку--> </head> <body> <?PHP $ch = curl_init('http://domain/core.php'); curl_exec($ch); // отправляем запрос curl curl_close($ch); ?> </body> </html> 2 способ - CRON . Если у вас сервер, можете через cron задать выполнение файла core.php раз в 5 секунд допустим. 3 способ - делфи. кидаем на форму браузер и через него уже открываем файл index.php. есть еще другой способ, но сложнее немного. Теперь запускаем нашего бота и пишем ему сообщение, в котором есть "привет". Если ответил тогда все супер, я вас поздравляю, вы написали своего личного бота для вк.