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