Traffic Cardinal Traffic Cardinal написал 24.05.2023

Как создать бот-комментатор для VK на PHP своими руками

Traffic Cardinal Traffic Cardinal написал 24.05.2023
13 мин
2
1572
Содержание

Комментарии — одна из важнейших метрик активности паблика в любой социальной сети. Кроме того, комментарии — отличное место для скрытой рекламы. Бот-комментатор — отличное решение для тех, кто не хочет тратить уйму времени на ручное комментирование постов. Конкретно в этом материале мы расскажем, как автоматизировать написание комментариев для VK.

banner banner

*Спойлер: исходный код бота для создания комментариев VK находится в конце статьи.

Какие задачи решает бот-комментатор

Бот для комментариев VK может быть использован для решения целого пула задач по трем направлениям. Во-первых, его можно использовать у себя в группе, в этом случае бот-комментатор позволяет:

  • Создать имитацию активности пользователей.

  • Улучшить ранжирование за счет повышения активности в паблике.

  • Рисовать красивую статистику для реклов.

  • Вовлекать реальных людей за счет комментариев-байтов.

Во-вторых, его можно использовать в чужих пабликах, для того чтобы:

  • Продвигать рекламируемые офферы напрямую (закончится баном, но можно).

  • Продвигать рекламируемые офферы косвенно — человек видит комментарий, переходит на страницу и там попадает в воронку.

  • Продвигать паблики — человек видит комментарий, переходит на страницу, видит репост из интересующего его паблика и подписывается.

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

Помимо всего прочего, исходный код бота можно «разобрать на запчасти» для реализации других задач, не связанных с комментариями, но привязанных к необходимости регулярного получения той информации, которую VK не передает через Longpoll и Callback. Впрочем, если вы не поняли, о чем сейчас идет речь, вам это вряд ли понадобится :)

Принцип работы бота для написания комментариев в VK

Бот работает следующим образом:

  1. Открывает php-страницу в браузере.
  2. Считывает токен пользователя, от имени которого будут публиковаться комментарии.
  3. Считывает массив с id-адресами целевых страниц из перечня пабликов.
  4. Поочередно заходит на каждую страницу/группу.
  5. Запоминает id самого первого поста.
  6. Проверяет, не является ли первый пост закрепленным. Если является — делает смещение на один пост.
  7. Выбирает случайный комментарий из словаря.
  8. Публикует комментарий под постом.
  9. Возвращается к шагу 4, до тех пор пока не переберет все страницы.

Пошаговая инструкция, как создать бот-комментатор для пабликов VK

Итак, чтобы создать бот для комментариев VK на php своими руками, необходимо сделать следующее:

  1. Получить токен VK (советуем VK Admin) и сохранить его в отдельный файл. Учтите, что токен дает полный доступ к странице — не используйте личные либо коммерчески важные профили.
  1. Скачать и установить Denwer.
  2. Перейти в папку C:\WebServers\home\localhost\www\
  3. Создать в ней рабочую директорию нашего бота. В нашем примере ей будет \vk\comments
  4. Создать файл index.php в папке C:\WebServers\home\localhost\www\vk\comments
  1. Открыть его любым текстовым редактором и вставить следующий код:

<?php

$v='5.131';

$tokenFile = 'token.txt';

if (!file_exists($tokenFile)) {

$fp = fopen("token.txt", "a");

fwrite($fp, "");

fclose($fp);

} else {

$access_token = file_get_contents('token.txt');

}

echo iconv("utf-8", "windows-1251", '

<form action="1.php" method="post">

<p><red><b>*Обратите внимание! Для корректной работы скрипта необходимо придерживаться установленного формата ввода данных.</b></red></p>

<p>Токен: <input name="access_token" placeholder="' . ($access_token ? $access_token : 'Введите токен') . '" value="" autocomplete="off"/></p>

<p>Выберите файл со списком ID: <input type="file" name="id_list"/></p>

<label for="go2">Показать лог</label><input type="radio" id="go2" name="go" value="go2"><br>

<p><input type="submit" value="Поехали!"></p>

');

if (isset($_POST["access_token"]) && !empty($_POST["access_token"])) {

$access_token = $_POST["access_token"];

file_put_contents("token.txt", $access_token);

} elseif (file_exists("token.txt")) {

$access_token = file_get_contents("token.txt");

} else {

die("Токен не задан!");

}

if($_POST["go"]=="go2") {

$arr = file("log.txt");

$count_log = count($arr);

for ($log=0; $log<=$count_log;){

echo nl2br(urldecode(iconv("utf-8", "windows-1251", $arr[$log])));

echo "<br>";

$log=$log+1;

}

echo "<br>";

echo "#######################";

echo "<br>";

}

else{

$user = json_decode(file_get_contents('https://api.vk.com/method/users.get?&access_token='.$access_token.'&v='.$v));

$user_id = $user->response[0]->id;

$first_name = $user->response[0]->first_name;

$last_name = $user->response[0]->last_name;

echo "###################################################";

echo "<br>";

echo (iconv("utf-8", "windows-1251", "<a href='https://vk.com/id".$user_id."'>".$first_name." ".$last_name."</a>"));

echo "<br>";

echo "###################################################";

$targetFile = "targets.txt";

$ids = "";

if (isset($_FILES['id_file']) && $_FILES['id_file']['error'] === UPLOAD_ERR_OK) {

$fileContent = file($_FILES['id_file']['tmp_name'], FILE_IGNORE_NEW_LINES);

$ids = array_map('trim', $fileContent);

} elseif (file_exists($targetFile)) {

$fileContent = file($targetFile, FILE_IGNORE_NEW_LINES);

$ids = array_map('trim', $fileContent);

} else {

die("Файл с целевыми ID не найден!");

}

$ids = preg_replace('/\r\n/', '', $ids);

$count_ids = count($ids);

for ($i=0; $i<$count_ids;){

echo "<br>";

$owner_id = $ids[$i];

str_replace(" \r\n", "", $owner_id);

$result = json_decode(file_get_contents('https://api.vk.com/method/wall.get?count=1&owner_id='.$owner_id.'&access_token='.$access_token.'&v='.$v));

$pin=$result->response->items[0]->is_pinned;

if (isset($pin)){

$result = json_decode(file_get_contents('https://api.vk.com/method/wall.get?offset=1&count=1&owner_id='.$owner_id.'&access_token='.$access_token.'&v='.$v));

}

$post_id=$result->response->items[0]->id;

$preview=$result->response->items[0]->text;

if (empty($preview)){

$preview="Пост без текста, либо репост";

}

if (!file_exists("$owner_id.txt")) {

$fp = fopen("$owner_id.txt", "w");

fwrite($fp, "");

fclose($fp);}

$lastid = htmlentities(file_get_contents("$owner_id.txt"));

if ($lastid!=$post_id) {

$comments = file('comments.txt');

$message = $comments[array_rand($comments)];

$message = preg_replace('/\r\n/', '', $message);

unset($comments);

echo(iconv("utf-8", "windows-1251", $message));

$comment_id = json_decode(file_get_contents('https://api.vk.com/method/wall.createComment?post_id='.$post_id.'&message='.$message.'&owner_id='.$owner_id.'&access_token='.$access_token.'&v='.$v));

$comment_id=$comment_id->response->comment_id;

echo "<br>";

$fp = fopen("$owner_id.txt", "w");

fwrite($fp, $post_id);

fclose($fp);

$log_separator="=====================================";

$log_post_url='<a href="https://vk.com/wall'.$owner_id.'_'.$post_id.'" target="_blank"><b>Пост:</b></a>';

$log_post_url=str_replace("'.", "", $log_post_url);

$log_post_url=str_replace(".'", "", $log_post_url);

$log_post_text=$preview;

$log_comment_url='<a href="https://vk.com/wall'.$owner_id.'_'.$post_id.'?reply='.$comment_id.'" target="_blank"><b>Комментарий:</b></a>';

$log_comment_url=str_replace("'.", "", $log_comment_url);

$log_comment_url=str_replace(".'", "", $log_comment_url);

$log_comment_text=$message;

$fp = fopen("log.txt", "a");

fwrite($fp, "$log_separator\n$log_post_url\n$log_post_text\n$log_comment_url\n$log_comment_text\n$log_separator");

fclose($fp);

echo '<a href="https://vk.com/wall'.$owner_id.'_'.$post_id.'?reply='.$comment_id.'" target="_blank">https://vk.com/wall'.$owner_id.'_'.$post_id.'?reply='.$comment_id.'</a>';

echo "<br>";

echo "###################################################";

}

$i=$i+1;

}

}

?>

  1. Сохранить файл.
  2. Создать файл comments.txt.
  1. Записать фразы, которые будут использоваться ботом для комментирования. Каждая фраза — с новой строки. Убедиться, что последняя строка не пустая (каретка набора текста должна быть в конце последнего комментария, а не в начале пустой строки).
  1. Сохранить файл.
  2. Создать файл targets.txt.
  3. Указать ID страниц или пабликов, под постами которых будут публиковаться комментарии. Каждый ID — с новой строки. Убедиться, что последняя строка не пустая. Также обратите внимание, что ID пабликов должны начинаться с «-» — знака минус.
  1. Сохранить файл.
  2. Запустить Denwer с ярлыка на рабочем столе.
  3. Открыть в браузере адрес http://127.0.0.1/vk/comments
  1. Вставить токен в поле токен.
  1. Нажать «Поехали!»
  1. Проверить результат.

Опционально можно также просмотреть лог оставленных комментариев.

Важные моменты

В прошлых ботах мы использовали python в качестве языка программирования и сервис pythonanywhere в качестве сервера. Однако ввиду отсутствия в API VK Longpoll-методов и Callback-методов для «прослушивания стен», а также ввиду отсутствия возможности регулярного автозапуска бота на сервере pythonanywhere при бесплатном тарифе, мы решили использовать php и denwer-сервер.

Denwer — простое и бесплатное решение, более чем подходящее для нашей задачи «в базовой» настройке. То есть вам не придется ковыряться в настройках сервера — достаточно просто скачать и установить Denwer.

Стандартные инструменты Denwer не позволяют автоматизировать выполнение задач подобно cron, но для этой цели можно использовать любое браузерное расширение с автообновлением страниц/вкладок. При использовании полноценного сервера, а не бесплатного варианта вроде Denwer, достаточно настроить cron или другого демона.

Естественно, при чрезмерной активности алгоритмы VK «обратят внимание» на используемую вами страничку и оставляемые ею комментарии. Поэтому мы рекомендуем тщательно продумывать, какие комментарии будет оставлять ваш бот, делать их максимально универсальными и обновлять словарь хотя бы раз в 1–2 недели. Кроме того, чем больше комментариев будет в словаре, тем ниже шанс, что они будут повторяться.

При комментировании с нескольких страниц советуем использовать антидетект-браузер и vpn для каждого профиля, от имени которого будут оставаться комментарии.

Демонстрация работы бота

Запуск впервые — во всех пабликах из списка оставлен комментарий:

Подтверждение:

Запускаем второй раз — бот не оставляет комментарии, так как новых постов в пабликах из списка нет (параллельно создаем 2 новых поста в 2 пабликах):

Запуск третий раз — бот оставил комментарии лишь в тех пабликах, где появились посты «тест2» :

Ну и так далее…

Автоматизируем создание комментариев

Если вам лень раз в час нажать F5, можно использовать любое браузерное расширение для автоматической перезагрузки вкладок.

Ставим автообновление на 30 секунд и создаем посты «тест3»:

Дожидаемся, пока расширение обновит вкладку:

Затем просто идем по своим делам — расширение будет запускать скрипт само:

Исходный код бота для комментариев

https://disk.yandex.ru/d/NrtEjjizKrD6kg

Подводя итоги

Как видите, автоматизация процесса создания комментариев не так сложна, как может показаться. Причем для этого вовсе не обязательно платить разработчикам либо приобретать платные тарифы в каких-либо сервисах.

Здравствуйте! У вас включен блокировщик рекламы, часть сайта не будет работать!