Следим за комментариями на сайте в виджете «Комментарии» от ВКонтакте

в 14:35, , рубрики: vk.com, в контакте, виджет, Вконтакте, комментарии, контакт, Песочница, метки: , , , , ,

Почему, зачем и как

Случилось так, что нашему проекту потребовались комментарии от «ВКонтакте», но чтобы мы могли следить за комментариями. Т.к. страниц на сайте очень много, то нереально ежедневно просматривать все страницы и проверять их.
Была масса способов, например, посылка e-mail сообщения при каждом комментировании. Если воспользоваться способом «комментарий — оповещение», то писем будет куча, но есть выход — сбор новых сообщений и отправка одного e-mail письма.

Следим и наказываем

Приступим. Первым делом лезем в документацию виджета.
Добавляем на страницу виджет

<script src="http://userapi.com/js/api/openapi.js" type="text/javascript" charset="windows-1251"></script>
<div id="vk_comments"></div>
<script type="text/javascript">
VK.init({apiId: *******, onlyWidgets: true});
VK.Widgets.Comments("vk_comments", {limit: 10, width: "496", attach: "*", autoPublish: 0});
</script>

Читаем документацию и видим, что виджет передает нам два события через VK.Observer с параметрами num, last_comment, date, sign (подробнее по ссылке на документацию):
1) widgets.comments.new_comment — добавление нового комментария
2) widgets.comments.delete_comment — удаления комментария

Получается, что мы можем проследить за действиями без проблем. Т.к. мне требуется получать ответ и выполнять некие действия, я буду использовать Jquery. Добавляем

<script type="text/javascript" src="http://code.jquery.com/jquery-latest.min.js"></script>

Также перед </script> добавляем обработчик действий

VK.Observer.subscribe('widgets.comments.new_comment', function(num,last_comment,date,sign){onComment(num,last_comment,date,sign,'new');});
VK.Observer.subscribe('widgets.comments.delete_comment',function(num,last_comment,date,sign){onComment(num,last_comment,date,sign,'del');});

+ функцию для уведомления

function onComment(num,last_comment,date,sign,action){
	$.ajax({
		type: "POST",
		url: "test.php",
		cache: false,
		data:{"num":num,"last_comment":last_comment,"date":date,'sign':sign,'action':action},
		success: function(html){
			// То, что мы будем выполнять при получении ответа.
		}
	});
}

Теперь настраиваем наш php-скрипт. Лично я решил воспользоваться способом записи новых комментариев в БД со значение поля approve=0, дабы показать скрипту необработанные комментарии.
Не будем писать весь код, а напишем только главное — проверку подлинности запроса и вид действия. Для этого нам нужно узнать «Защищенный ключ приложения». Идем в «Администрирование» виджета, «Назначить администратора», переходим в пункт меню «Настройки».

<?
if(md5('Защищенный код'.$_POST['date'].$_POST['num'].$_POST['last_comment'])==$_POST['sign']){
if($_POST['action']=='new'){
// Заносим в БД, где approve=0
}else{
// Удаляем из БД комментарий, например, по дате.
}
}
?>

Можно заносить в БД количество комментариев, сами комментарии, дату комментирования.
Затем, пишем скрипт, который будет вызываться с помощью крона, проверять БД на наличие новых комментариев и, если они есть, отсылать хозяину письмо.
Также в скрипт можно добавить запись в БД параметра $_SERVER['HTTP_REFERER'], чтобы определить с какой страницы был отправлен комментарий.
При получении письма смотрим на наличие нежелательных или интересных комментариев и наказываем/поощряем юзеров.

Разочарование

К сожалению, я не нашел в документации событий:
1) Если юзер удалил и восстановил комментарий
2) Поступил ответа на комментарий
Возможно, я плохо искал.

Если что-то не работает — документация виджета

Автор: leff27

Источник

  1. Марат:

    Вопрос!
    А можно сделать отправку тоже на скрипте!?
    Просто у меня есть несколько сайтов где нет и не предвидится php?
    Перенос невозможен!
    Если в php? я ещё, что-то могу понять, но в скриптах полный ноль!
    Заранее спасибо!

  2. digital-boom.ru:

    Слишком сложно как для меня…

  3. Алексей:

    Единственная толковая статья в интернете.

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js