Pull to refresh

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

Reading time 3 min
Views 8.9K

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


Случилось так, что нашему проекту потребовались комментарии от «ВКонтакте», но чтобы мы могли следить за комментариями. Т.к. страниц на сайте очень много, то нереально ежедневно просматривать все страницы и проверять их.
Была масса способов, например, посылка 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>


Также перед добавляем обработчик действий
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) Поступил ответа на комментарий
Возможно, я плохо искал.

Если что-то не работает — документация виджета
Tags:
Hubs:
+2
Comments 5
Comments Comments 5

Articles