Комментарии — одна из важнейших метрик активности паблика в любой социальной сети. Кроме того, комментарии — отличное место для скрытой рекламы. Бот-комментатор — отличное решение для тех, кто не хочет тратить уйму времени на ручное комментирование постов. Конкретно в этом материале мы расскажем, как автоматизировать написание комментариев для VK.
*Спойлер: исходный код бота для создания комментариев VK находится в конце статьи.
Какие задачи решает бот-комментатор
Бот для комментариев VK может быть использован для решения целого пула задач по трем направлениям. Во-первых, его можно использовать у себя в группе, в этом случае бот-комментатор позволяет:
Создать имитацию активности пользователей.
Улучшить ранжирование за счет повышения активности в паблике.
Рисовать красивую статистику для реклов.
Вовлекать реальных людей за счет комментариев-байтов.
Во-вторых, его можно использовать в чужих пабликах, для того чтобы:
Продвигать рекламируемые офферы напрямую (закончится баном, но можно).
Продвигать рекламируемые офферы косвенно — человек видит комментарий, переходит на страницу и там попадает в воронку.
Продвигать паблики — человек видит комментарий, переходит на страницу, видит репост из интересующего его паблика и подписывается.
В-третьих, никто не запрещает использовать его для комментирования стен пользователей, правда для этого предварительно нужно будет собрать базу таких страничек. Для этого вы можете использовать наш бот-парсер страниц VK:
Помимо всего прочего, исходный код бота можно «разобрать на запчасти» для реализации других задач, не связанных с комментариями, но привязанных к необходимости регулярного получения той информации, которую VK не передает через Longpoll и Callback. Впрочем, если вы не поняли, о чем сейчас идет речь, вам это вряд ли понадобится :)
Принцип работы бота для написания комментариев в VK
Бот работает следующим образом:
- Открывает php-страницу в браузере.
- Считывает токен пользователя, от имени которого будут публиковаться комментарии.
- Считывает массив с id-адресами целевых страниц из перечня пабликов.
- Поочередно заходит на каждую страницу/группу.
- Запоминает id самого первого поста.
- Проверяет, не является ли первый пост закрепленным. Если является — делает смещение на один пост.
- Выбирает случайный комментарий из словаря.
- Публикует комментарий под постом.
- Возвращается к шагу 4, до тех пор пока не переберет все страницы.
Пошаговая инструкция, как создать бот-комментатор для пабликов VK
Итак, чтобы создать бот для комментариев VK на php своими руками, необходимо сделать следующее:
- Получить токен VK (советуем VK Admin) и сохранить его в отдельный файл. Учтите, что токен дает полный доступ к странице — не используйте личные либо коммерчески важные профили.
- Скачать и установить Denwer.
- Перейти в папку C:\WebServers\home\localhost\www\
- Создать в ней рабочую директорию нашего бота. В нашем примере ей будет \vk\comments
- Создать файл index.php в папке C:\WebServers\home\localhost\www\vk\comments
- Открыть его любым текстовым редактором и вставить следующий код:
<?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;
}
}
?>
- Сохранить файл.
- Создать файл comments.txt.
- Записать фразы, которые будут использоваться ботом для комментирования. Каждая фраза — с новой строки. Убедиться, что последняя строка не пустая (каретка набора текста должна быть в конце последнего комментария, а не в начале пустой строки).
- Сохранить файл.
- Создать файл targets.txt.
- Указать ID страниц или пабликов, под постами которых будут публиковаться комментарии. Каждый ID — с новой строки. Убедиться, что последняя строка не пустая. Также обратите внимание, что ID пабликов должны начинаться с «-» — знака минус.
- Сохранить файл.
- Запустить Denwer с ярлыка на рабочем столе.
- Открыть в браузере адрес http://127.0.0.1/vk/comments
- Вставить токен в поле токен.
- Нажать «Поехали!»
- Проверить результат.
Опционально можно также просмотреть лог оставленных комментариев.
Важные моменты
В прошлых ботах мы использовали 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
Подводя итоги
Как видите, автоматизация процесса создания комментариев не так сложна, как может показаться. Причем для этого вовсе не обязательно платить разработчикам либо приобретать платные тарифы в каких-либо сервисах.