Всегда есть необходимость что-то автоматизировать, будь то простой бэкап сайта или отправка сообщения пользователю. Социальные сети не являются исключением. Речь в данной статье пойдёт о том, как автоматически размещать сообщения в определённые группы Вконтакте (ВК), при этом используя стандартные функции API ВК и PHP.
API VK и PHP — Автопостинг сообщений в группах.
В данной статье речь пойдёт о том как реализовать запуск скрипта на PHP, который будет использовать API VK, для написания сообщений в группы ВК. Так же расскажу как всё это дело можно запустить, протестировать и автоматизировать. Что нам понадобиться:
- хостинг с возможностью использовать PHP;
- планировщик заданий, в моём случае cron;
- создать Standalone-приложение в ВК (нужен код подтверждения по СМС);
- и токен, для использования API VK.
Так же вы можете использовать локальный хост, например развёрнутый при помощи OpenServer.
Создаём Standalone-приложение в ВК и получаем ID.
Для начала нам необходимо создать наше Standalone-приложение в ВК. Для этого переходим на страницу создания приложения. Вбиваем название приложения, выбираем платформу «Standalone-приложение» и нажимаем кнопку «Подключить приложение».Дальше ВК нас попросит подтвердить создание приложения и предложить выслать СМС. После подтверждения вас перекинут на страницу с информацией о приложении, нас интересует вкладка «Настройки», там мы можем получить «ID приложения».
Всё, что необходимо от приложения, мы получили, не каких дополнительных настроек производить не нужно.
Получаем токен для использования API VK.
Теперь нам необходимо получить токен, он же «access_token». Токен — это набор различных цифр и латинских букв, которую мы будем передаете на сервер вместе с запросом.
Для того, что бы его получить, нам необходимо в браузере вбить следующую строку:
1 |
https://oauth.vk.com/authorize?client_id=5490057&display=page&redirect_uri=https://oauth.vk.com/blank.html&scope=groups,offline&response_type=token&v=5.52 |
Где «client_id=5490057« необходимо указать ваш номер «ID приложения», который мы получали ранее. Так же необходимо указать значение «scope=groups,offline«, в данной переменной указывается какие права мы даём приложению, groups — доступ к группам, offline — срок действия токена, в нашем случае бессрочный.
После того как мы перейдём по ссылке выскочит такое окно:Нажимаем разрешить и попадаем на страницу где мы можем получить наш токен.Если быть точнее нам необходима часть строки ссылки в браузере, которая нам вернулась. К примеру мы получаем ссылку вида:
1 |
https://oauth.vk.com/blank.html#access_token=68f5660720767e2659e96470bfd4be242e6d54d0d6062a1ee545214db91d33e8a8d35f91a8b62adfcf7ff&expires_in=0&user_id=433336 |
Вот все символы, что идут между «…access_token=» и до «&expires_in…» и есть наш ключ доступа, он же токен. Наш токен будет таким:
1 |
68f5660720767e2659e96470bfd4be242e6d54d0d6062a1ee545214db91d33e8a8d35f91a8b62adfcf7ff |
Дальше мы его уже можем использовать в нашем скрипте.
Немного об API Вконтакте
Обращение к API Вконтакте происходит с помощью http-запросов, некой ссылкой, в которой мы передаём нужные нам значения. Ссылка выглядит примерно так:
1 |
https://api.vk.com/method/users.get?user_id=210700286&v=5.52 |
Рассмотрим отдельно все его составляющие.
- https:// — протокол соединения.
- api.vk.com/method — адрес API-сервиса.
- users.get — название метода API ВКонтакте. Методы представляют собой условные команды, которые соответствуют той или иной операции с базой данных — получение информации, запись или удаление. Например, users.get — метод для получения информации о пользователе, video.add — метод для добавления видеозаписи в свой список, likes.delete — метод для удаления отметки «Мне нравится».
Все методы разделены на секции. Например, для работы с сообществами Вам нужны методы секции groups, для работы с фотографиями — photos, и так далее. Полный список методов по секциям доступен на этой странице. - ?user_id=210700286&v=5.52 — параметры запроса. После названия метода нужно передать его входные данные (если они есть) — как обычные GET-параметры в http-запросе. В нашем примере мы сообщаем серверу, что хотим получить данные о пользователе с id=210700286 и формат этих данных должен соответствовать версии API 5.52. Входные параметры всегда перечислены на странице с описанием метода.
К примеру, для того что-бы написать сообщение в группу нам понадобиться метод «board.createComment«, мы должны будем его передать в запросе, выглядеть ссылка будет так:
1 |
https://api.vk.com/method/board.createComment?group_id=34985835&topic_id=26771964&message=Привет&from_group=0&v=5.69&access_token=523636639cyj67895327d385a0f96ert34234r2t4ffe7b58e1c2390d208d16418c8e73b2e0454128cfe1 |
Что видим:
- board.createComment — наш метод для создания комментария;
- group_id=34985835 — id группы в которой находится топик;
- topic_id=26771964 — топик в котором необходимо разместить сообщение;
- message=Привет — сообщение которое мы будем постить;
- from_group=0 — сообщение будет опубликовано от имени пользователя (по умолчанию «0», необязательный параметр);
- v=5.69 — версия json;
- access_token=523636639cyj67895327d385a0f96ert34234r2t4ffe7b58e1c2390d208d16418c8e73b2e0454128cfe1 — наш ключ доступа, он же токен
В результате если мы выполним запрос (попросту говоря вставим ссылку в браузер и нажмём «Enter»), то в ответ получим id сообщение которое было создано.
Ну и если мы перейдём в саму группу то там увидим наше сообщение. По факту мы будем генерировать такую ссылку по средствам PHP.
О том как узнать «group_id» и «topic_id»
Тут всё просто, переходим в нашу группу, ищем интересующий нас топик, к примеру у меня будет «Добавь в друзья». В строке браузера будет ссылка вида:
1 |
https://vk.com/topic-34985835_26771964 |
Собственно «34985835» — это наш «group_id», а «26771964» — «topic_id»
Первая часть нашего скрипта на PHP для работы с API VK.
На самом деле я использовал два метода API VK, первый это добавления самого сообщения в группу «board.createComment«, второй это удаление предыдущего сообщения «board.deleteComment«. Нужно это для того чтобы админы группы не банили за спам, да и скорее всего эти сообщения будут где-то далеко от последней страницы и смысла его оставлять нет.
В первой части мы будем добавлять сообщение в группу. Вот сам скрипт:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
<form method="post" action=""> <!-- Тут будет форма для ввода и кнопки--> <input type="submit" name="submit" value="[Pechenek.NET]"> <p>alpha ver: 0.1</p> <!-- Просто что бы знать, что файл скрипта был обновлён--> </form> <?php $token = "145tg94eae7374yfhfhj28394u94u904fju0234ur222f639ffbca3fd110912616c"; //наш токен if(isset($_POST['submit'])){ //Проверяем нажата ли кнопка $group_id = array("34985835_26771964", "34985835_26771964", "34985835_26771964", "34985835_26771964"); //указываем список групп с топиками в которых будем постить сообщения /* Меняем "_" в переменной group_id на "&topic_id=", для подстановки в ссылку, переменная $query */ $test = "&topic_id="; //даём переменной значение "&topic_id=" $zam = str_replace("_",$test,$group_id); // Заменяем "_" в переменной $query на значение из переменной $test $i = 0; // Цикл нужен для того, что бы ВК не просил капчу, т.е. после каждых 3 отправки мы ждём 10 сек. В противном случае получим ошибку. foreach ($zam as $v) { //опять же загоняем переменную в цикл $v = trim($v); if($i==3) { echo "<h4 style='color:red;'>Ждём 10 секунд…</h4>"; //Если значение равно 3 выводим сообщение о задержке sleep(10); // ждём 10 секунд $i=1;} // возвращаем значение на 1 else { //если значение не равно "3" $i = $i+1; //прибавляем один } /* Для того чтобы быть более похожими на человека, подставляем рандомные значения в переменную $mess*, т.е. сообщения оставленные в группах будут рандомно выбираться из переменной */ $mess = array("Добавляйтесь в друзья", "Добавляйтесь!", "Д о б а в л я й т е с ь", "Добавляемся в друзья", "Добавлю", "Приму в друзья!"); // указываем переменную с массивом в которой передаём текст сообщения, опять же подставляем в ссылку $rand_keys = array_rand($mess, 1); //выбираем рандомное сообщение /* Выполняем запрос к АПИ */ $query = file_get_contents("https://api.vk.com/method/board.createComment?group_id=$v&message=".urlencode($mess[$rand_keys])."&from_group=0&v=5.69&access_token=".$token); // в ссылке используем метод "board.createComment", для добавления комментария. в "group_id=" подставляем значение из "$v" (это наш ид и топик группы), в "message=" подставляем рандомное значение из "$rand_keys" (.urlencod используется из-за того, что там есть пробелы) @$query['response']; //выдераем только response из ответа АПИ $query = str_replace(array('{"response":', '}'),'',$query); // Вырезаем всё не нужное, оставляем только ИД сообщения $query = "comment_id=".$query; /* Обратно формируем переменную, для составления удобной ссылки*/ $z = "_"; $zam2 = str_replace("&topic_id=", $z, $v);//меняем обратно "&topic_id=" на "_" /* Выводим всё в таблицу*/ echo "<table style='text-align: center;'> <tr> <td style='border: 1px solid #33BEE5;width: 50%;'><h3>[Текущее значение переменной]</h3></td> <td style='border: 1px solid #33BEE5;width: 50%;'><h3>[Ответ]</h3></td> </tr> <tr> <td style='border: 1px solid #33BEE5;width: 50%;'>[Сообщение]: $mess[$rand_keys] | <a href='https://vk.com/topic-$zam2' target='_blank'>[Группа]</a></td> <td style='border: 1px solid #33BEE5;width: 50%;'>$query</td> </tr> </table>"; /* Добавляем в файл значения для последующего удаления сообщения */ $mfile = 'mess.txt'; //путь к файлу $current = file_get_contents($mfile); //открываем файл $current .= $v."&".$query."\n"; //записываем в файл переменные в нужном порядке file_put_contents($mfile, $current); } unset($v);//завершаем цикл } ?> |
Если вкратце, то проверяем нажата ли кнопка, после прогоняем массив с группами и их топиками, при этом соблюдаем условие, что бы было не больше 3 сообщений в 10 секунд, в противном случае ВК попросит ввести капчу. Так же учитываем рандомность оставляемых сообщений, отправляем наш запрос, обрабатываем ответ и выводим в виде таблицы. Ну и в самом конце записываем в фай полученный ответ с ID нашего сообщения. Это нам понадобиться для удаления старых записей в дальнейшем.
Вроде всё описал в комментариях к скрипту, но всё же внесу ясность:
- $group_id = — тут указываем наши ид и топики группы, можно вставлять прям из браузера, как я описал выше. В таком формате: «34985835_26771964». Я указал четыре, что бы видно было как отрабатывает задержка;
- $mess = — указываем наши сообщения, они будут выбираться рандомно, можно оставить одно;
- $query = file_get_contents(«https://api.vk.com/method/board.createComment?group_id=$v&message=».urlencode($mess[$rand_keys]).«&from_group=0&v=5.69&access_token=».$token); — тут генерируется наш запрос. В переменную «$v» попадает наши группы из переменной «$group_id». «.urlencode($mess[$rand_keys]).» — попадают наши рандомные сообщения из переменной «$mess».
- $mfile = — Тут указываем путь к файлу, не забывайте менять на свой.
Копируем наш скрипт в файл с расширением «.php» желательно через Notepad++, и не забывайте менять кодировку на «UTF-8», иначе получите на выходе «кракозябры». Заливаем файл на хостинг, я закинул файл по такому пути «pechenek.net/wp-admin/vkmessenger_full.php». Так же для сохранения ответа и дальнейшего удаления сообщения нам необходимо будет записать информацию в файл, создаём и закидываем ещё один пустой файл, формата «.txt», мой путь будет «pechenek.net/wp-admin/mess.txt».
Дальше в браузере переходим по ссылке «pechenek.net/wp-admin/vkmessenger_full.php» и видим нашу кнопку, нажимаем, и получаем таблицу с ответами (скрипт будет выполняться секунд 10-15, из-за задержки в 10 секунд), выглядеть будет так:
В ответ скрипт нам сформирует таблицу, в которой мы увидим, что за сообщение мы написали, в какой группе (ссылка будет активна сразу в группу) и ответ от АПИ Вконтакте (возвращает id сообщения которое мы написали). Так же скрипт должен записать в файл значения полученные в ответ, их я уже подготовил нужного формата под второй скрипт, что бы было удобно вставлять в запрос.
Если перейдём в группу, то увидим четыре новых сообщения (я указал одну и туже группу четыре раза):Собственно наш скрипт работает, теперь надо, что бы он удалял старые сообщения и добавлял новые.
Вторая часть нашего скрипта на PHP для работы с API VK.
Скорее эту часть скрипта надо вставлять перед первым скриптом, если мы будем это автоматизировать, надо что бы он вначале удалял старые записи и только потом создавал новые сообщения. Просто решил вначале показать как работает добавление сообщения и потом уже его удаление. В скрипте я их уже обьеденил.
Собственно второй вариант скрипта:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 |
<form method="post" action=""> <!-- Тут будет форма для ввода и кнопки--> <input type="submit" name="submit" value="[Pechenek.NET]"> <input type="submit" name="submit2" value="Удаляем комментарии"> <p>alpha ver: 0.2</p> <!-- Просто что бы знать, что файл скрипта был обновлён--> </form> <?php $token = "145tg94eae7374yfhfhj28394u94u904fju0234ur222f639ffbca3fd110912616c"; /*Удаляем старые комментарии */ if(isset($_POST['submit2'])){ // Проверяем нажата ли кнопка $file = file("mess.txt", FILE_IGNORE_NEW_LINES); // Считываем весь файл в массив // Цикл нужен для того, что бы ВК не банил, т.е. после каждых 3 отправок мы ждём 10 сек. В противном случае после трёх попыток получим ввод капчи. $b = 0; //начальное значение переменной foreach ($file as $vv) { //Вносим в цикл полученные значения из файла if($b==3) { //проверяем что значение переменной "b" равно "3" echo "<h4 style='color:red;'>Ждём 10 секунд…</h4>"; //Если значение равно 3 выводим сообщение о задержке sleep(10); // ждём 10 секунд $b=1;} // возвращаем значение на 1 else { //если значение не равно "3" $b = $b+1; //прибавляем один } //конец цикла //Выполняем запрос к API VK $dquery = file_get_contents("https://api.vk.com/method/board.deleteComment?group_id=$vv&v=5.69&access_token=".$token); //тут используем метод "board.deleteComment" для удаление нашего предыдущего поста и в "group_id=" подставляем значение из переменной "$vv", ну и наш токен из переменной $token //Выводим табличку с значениями и ответом от АПИ echo "<table style='text-align: center;'> <tr> <td style='border: 1px solid #33BEE5;width: 50%;'><h3>[Действие]:</h3></td> <td style='border: 1px solid #33BEE5;width: 50%;'><h3>[Ответ]:</h3></td> </tr> <tr> <td style='border: 1px solid #33BEE5;width: 50%;'> Удалено сообщение $vv</td> <td style='border: 1px solid #33BEE5;width: 50%;'> $dquery</td> </tr> </table>"; } unset($vv);//Выходим из цикла /* Очищаем файл */ $myFile = "mess.txt"; //Путь до файла $fh = fopen($myFile, 'w'); //открываем и очищаем файл fclose($fh); //закрываем файл } /*-----------------Первый скрипт--------------------------------*/ /* Проверяем нажата ли кнопка, и введена ли верная фраза*/ if(isset($_POST['submit'])){ $group_id = array("34985835_26771964", "34985835_26771964", "34985835_26771964", "34985835_26771964"); //указываем список груп с топиками в которых будем постить сообщения /* Меняем "_" в переменной group_id на "&topic_id=", для подстановки в ссылку, переменная $query */ $test = "&topic_id="; //даём переменной значение "&topic_id=" $zam = str_replace("_",$test,$group_id); // Заменяем "_" в переменной $query на значение из переменной $test $i = 0; // Цикл нужен для того, что бы ВК не просил капчу, т.е. после каждых 3 отправок мы ждём 10 сек. В противном случае получем ошибку. foreach ($zam as $v) { //опять же загоняем переменную в цикл $v = trim($v); if($i==3) { echo "<h4 style='color:red;'>Ждём 10 секунд…</h4>"; sleep(10); $i=1;} else { $i = $i+1; } /* Для того чтобы быть более похожими на человека, подставляем рандомные значения в переменную $mess*, т.е. сообщения оставленные в группах будут рандомно выбираться из переменной */ $mess = array("Добавляйтесь в друзья", "Добавляйтесь!", "Д о б а в л я й т е с ь", "Добавляемся в друзья", "Добавлю", "Приму в друзья!"); // указываем переменную с массивом в которой передаём текст сообщения, опять же подставляем в ссылку $rand_keys = array_rand($mess, 1); //выбираем рандомное сообщение /* Выполняем запрос к АПИ */ $query = file_get_contents("https://api.vk.com/method/board.createComment?group_id=$v&message=".urlencode($mess[$rand_keys])."&from_group=0&v=5.69&access_token=".$token); // в ссылке используем метод "board.createComment", для добавления комментария. в "group_id=" подставляем значение из "$v" (это наш ид и топик группы), в "message=" подставляем рандомное значение из "$rand_keys" (.urlencod используется из-за того, что там есть пробелы) @$query['response']; //выдераем только response из ответа АПИ $query = str_replace(array('{"response":', '}'),'',$query); // Вырезаем всё не нужное, оставляем только ИД сообщения $query = "comment_id=".$query; /* Обратно формируем переменную, для составления удобной ссылки*/ $z = "_"; $zam2 = str_replace("&topic_id=", $z, $v);//меняем обратно "&topic_id=" на "_" /* Выводим всё вместе*/ echo "<table style='text-align: center;'> <tr> <td style='border: 1px solid #33BEE5;width: 50%;'><h3>[Текущее значение переменной]</h3></td> <td style='border: 1px solid #33BEE5;width: 50%;'><h3>[Ответ]</h3></td> </tr> <tr> <td style='border: 1px solid #33BEE5;width: 50%;'>[Сообщение]: $mess[$rand_keys] | <a href='https://vk.com/topic-$zam2' target='_blank'>[Группа]</a></td> <td style='border: 1px solid #33BEE5;width: 50%;'>$query</td> </tr> </table>"; /* Добавляем в файл значения для последующего удаления сообщения */ $mfile = 'mess.txt'; //путь к файлу $current = file_get_contents($mfile); //открываем файл $current .= $v."&".$query."\n"; //записываем в файл переменные в нужном порядке file_put_contents($mfile, $current); } unset($v);//завершаем цикл } ?> |
Добавил ещё одну кнопку под названием «Удаляем комментарии», для удобства тестирования.
Во втором варианте мы используем метот API Вконтакте «board.deleteComment«, он позволяет удалять комментарии по id, а его как раз нам возвращает первый скрипт. Получается, при нажатии кнопки, скрипт лезет в файл «mess.txt», достаёт от туда наши значения в цикл, подставляет эти значения в запрос, удаляет старые сообщения из группы, выходит из цикла и очищает файл.
Вот так будет выглядеть наш запрос для удаления:
1 |
$dquery = file_get_contents("https://api.vk.com/method/board.deleteComment?group_id=$vv&v=5.69&access_token=".$token); |
$vv — это наши id сообщений из файла «mess.txt», которые записал предыдущий скрипт, он их будет по очереди подставлять и удальть из группы.
Теперь наглядно. От предыдущего скрипта у нас остались запись в файле «mess.txt», давайте нажмём кнопку «Удаляем комментарии». В ответ получим следующее:Он нам сообщает, что удалено такое-то сообщение и в ответ на запрос вернул «{«response»:1}». Это и говорит о том, что сообщение удалено. И если заглянуть в файл «mess.txt» он будет пуст.
Затем выполнится вторая часть скрипта, которая вновь разошлёт новые комментарий и запишет в файл новые id сообщений. И так можно запускать скрипт по кругу.
Как автоматизировать запуск скрипта.
Если вы хотите локально запускать скрипт, то данная статья вам поможет в этом: OpenServer и CRON — Запускаем PHP скрипт
Так как я скрипт разворачивал на хостинге, то для его автоматизации буду использовать планировщик задания, он же cron. У меня панель «ISP manager», по этому пример буду показывать на нём, но в целом все панели похожи.
Заходим в панель и ищем что-то похожее на планировщик заданий, в нём нам необходимо создать наши задания которые он будет запускать. Использовать будем следующую команду:
1 |
wget -q -O - https://pechenek.net/wp-admin/vkmessenger_full.php?zna4=12345 > /dev/null 2>&1 |
Замените путь «https://pechenek.net/wp-admin/vkmessenger_full.php» на свой. Так же я добавил ещё одно значение «zna4=12345«, оно нужно для того, что бы обезопасить себя от несанкционированного запуска скрипта, в связи с этим и использовал метод «wget» (в нём можно передать значение скрипту).
Если исключить ввод дополнительного значения можно использовать такую команду:
1 |
GET http://site.ru/script.php |
Для автоматического использования нам не нужны выводы полученных значений и кнопки, иначе какая тут автоматизация. Я немного подправил скрипт, теперь он будет таким:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
<? $zna4 = $_GET["zna4"]; if($zna4 == "12345") { token ="145tg94eae7374yfhfhj28394u94u904fju0234ur222f639ffbca3fd110912616c"; /*Удаляем старые комментарии */ $file = file("mess.txt", FILE_IGNORE_NEW_LINES); // Считываем весь файл в массив $b = 0; // Цикл нужен для того, что бы ВК не банил, т.е. после каждых 3 отправок мы ждём 10 сек. В противном случае получем ошибку foreach ($file as $vv) { if($b==3) { sleep(10); $b=1;} else { $b = $b+1; } $dquery = file_get_contents("https://api.vk.com/method/board.deleteComment?group_id=$vv&v=5.69&access_token=".$token); } unset($vv); /* Очищаем файл */ $myFile = "mess.txt"; $fh = fopen($myFile, 'w'); fclose($fh); /*Отправляем комментарий*/ $group_id = array("34985835_26771964", "34985835_26771964", "34985835_26771964", "34985835_26771964"); /* Меняем "_" в переменной group_id на "&topic_id=", для подстановки в ссылку, переменная $query */ $test = "&topic_id="; $zam = str_replace("_",$test,$group_id); $i = 0; // Цикл нужен для того, что бы ВК не банил, т.е. после каждых 3 отправок мы ждём 10 сек. В противном случае получем ошибку foreach ($zam as $v) { $v = trim($v); if($i==3) { sleep(10); $i=1;} else { $i = $i+1; } $mess = array("Добавляйтесь в друзья", "Добавляйтесь!", "Д о б а в л я й т е с ь", "Добавляемся в друзья", "Добавлю", "Приму в друзья!"); // указываем переменную с массивом в которой передаём текст сообщения, опять же подставляем в ссылку $rand_keys = array_rand($mess, 1); $query = file_get_contents("https://api.vk.com/method/board.createComment?group_id=$v&message=".urlencode($mess[$rand_keys])."&from_group=0&v=5.69&access_token=".$token); @$query['response']; //выдераем только response из ответа АПИ $query = str_replace(array('{"response":', '}'),'',$query); // Вырезаем всё не нужное, оставляем только ИД сообщения $query = "comment_id=".$query; /* Обратно формируем переменную, для составления удобной ссылки*/ $z = "_"; $zam2 = str_replace("&topic_id=", $z, $v); /* Добавляем в файл значения для последующего удаления сообщения */ $mfile = 'mess.txt'; $current = file_get_contents($mfile); $current .= $v."&".$query."\n"; //записываем в файл переменные file_put_contents($mfile, $current); } unset($v); Echo "Скрипт выполнен"; } else { echo "Не верный код доступа"; } ?> |
Убрал всё что нам не нужно, и добавил ещё одно условие, в котором нам необходимо для выполнения скрипта получить значение «12345», если его не передать то при попытке выполнить скрипт получим такое сообщение: «Не верный код доступа».
Давайте немного подробнее рассмотрим создания задания на выполнение. К примеру мы хотим, что бы задание запускалось каждый час и десять минут. Создаём новое задание и вписываем следующие настройки:Везде где «*» будет выполняться всегда, «*/1» означает, что задание будет выполняться каждый час, ну и 10 минут. В итоге будем выполнять скрипт каждый 1 час и 10 минут.
Возможные проблемы.
1. Первое с чем я столкнулся, это лимит сервера по времени выполнения скрипта (500 Internal Server Error). Если в скрипт запихнуть много групп, в которые надо постить сообщение, то он будет выполняться довольно долго, плюс у нас ещё таймаут в 10 секунд. Поборол созданием нескольких скриптов с разными группами, по 20 групп в один скрипт.
2. Так же была проблема с капчей. Пока не выяснил с чем связано, но раз в сутки выскакивает сообщение с просьбой ввести капчу, причём в разное время. И потом начинает на все сообщения просить ввести капчу. Побороть можно зайдя в группу и написав сообщение, после нам предложат ввести капчу, как введём всё опять работает.
Для этого случая добавил в отдельный скрипт оповещение на email. Скрипт такой:
1 2 3 4 5 6 7 |
<? if($zna4 == "12345") { if (strpos(file_get_contents("mess.txt"), "error")){ mail("Ваш email", "Тема: Ошибка автопостинга", "В текстовом файле найдена ошибка, пожалуйста проверьте!"); } } ?> |
Скрипт проверяет наш файл «mess.txt» на наличие текста «error». Если он его находит, а он найдёт если будет ошибка и запрос на капчу, то высылает на мыло сообщение. Собственно создаём ещё одно задание в планировщике, которое будет запускать данный скрипт и своевременно получаем оповещение, либо добавляем в конец к нашему скрипту.
3. Ошибки самого API Вконтакте. Все коды ошибок можете посмотреть в официальной документации. Там всё расписано.
4. Пути к файлам. Если скрипт запускается в отдельной папке, часто ругаеться на то, что не может найти файл «mess.txt». В этом случае нужно указать полный путь до файла.
5. Так же может возникнуть проблема для запуска скрипта через планировщик, зависит от того куда положите, может не хватать прав. Решил запуском другого скрипта, который будет доступен без авторизации и туда впихнул следующее:
1 2 3 4 |
<?php $zna4 = $_GET["zna4"]; require( dirname( __FILE__ ) . '/ваш путь/vkmesseg_full.php' ); ?> |
Если использовать такой вариант запуска, то из скрипта надо будет убрать строку «$zna4 = $_GET[«zna4″];», т.к. он её и так получит.
Ну и на последок готовые файлы можете скачать тут: Скачать
На этом пожалуй всё, надеюсь статья была вам полезной. Не забывайте пользоваться кнопками «Поделиться в соц. сетях», так же подписываться на наш Канал и группы в ВК, Twitter, Facebook.
Всем удачи и море печенек!
It’s an awesome post for all the web users; they
will obtain benefit from it I am sure.
Добрый день, всё круто, спасибо! А как бы сделать постинг картинок? только не рандом, а поочередно на стену сообщества…
Можно прикрепить фотографию, добавив в метод attachments. Например так: &attachments=photo100172_166443618&
Подробнее о методе можете прочитать тут: https://vk.com/dev/wall.createComment
Спасибо, отличная статья. Автору благодарность за профессиоанализм !
скрипт еще рабочий?
Добрый день. Да.