Войти через VK Войти через FB Войти через Google Войти через Яндекс
Поиск по сайту
VK API уведомление о новом комментарии
Я давно стал добавлять на страницы своих сайтов виджет ВКонтакте для комментирования.
Его достоинство – простота в установке и обслуживании, недостаток – коментарии не индексируются поисковиками.
Ещё один недостаток я победил нашел только сейчас: это уведомление о новом коментарии.
Из-за отсутствия уведомления я не мог отвечать вовремя на новые комментарии, что не есть хорошо.
Начну с добавления виджета, чтобы получилась законченная статья.
Добавить виджет коментрирования для сайта можно здесь: https://vk.com/dev/Comments.
Там же Вы получите код для вставки, но не получите api_secret, с помощью которого сможете проверять, что уведомление о новом коментарии пришли от Вашего скрипта. Мне он не нужен, если Вам нужен, регистрируйте приложение по расширенной схеме здесь: https://vk.com/editapp?act=create или подсмотрите его в Мои Приложения, Редактирование, слева Настройки — там будет ваш "Защищенный ключ". Получите код виджета, что-типа такого:
<!-- Put this script tag to the <head> of your page -->
<script type="text/javascript" src="//vk.com/js/api/openapi.js?168"></script>
<script type="text/javascript">
VK.init({apiId: XXXXXXXXXXXX, onlyWidgets: true});
</script>
<!-- Put this div tag to the place, where the Comments block will be -->
<div id="vk_comments"></div>
<script type="text/javascript">
VK.Widgets.Comments("vk_comments", {limit: 10, width: "665", attach: "*"});
</script>
API виджета комментария имеет параметр onChange. Функция, которую содержит параметр onChange, вызывается каждый раз при событии удаления/создания комментария. Подробнее о виджете коментрирования здесь. Измените вызов VK.Widgets.Comments на следующий:
VK.Widgets.Comments("vk_comments", {limit: 10, width: "665", attach: "*", <b>onChange: addCommentCallback</b>});
или если вы хотите передавать дополнительную информацию, например id поста, то так:
VK.Widgets.Comments("vk_comments", {limit: 10, width: "665", attach: "*", onChange: addCommentCallback}, "post_<?php echo $data['id']?>");
Третий параметр — это ID данного виджета (блока) комментариев, если его не указывать в качестве id, используется md5-хэш от location.href (ссылки на эту страницу).
CallBack-функция onChange вызывается с четырьмя параметрами:
- num - количество комментариев
- last_comment - текст последнего комментария
- date - текущая дата в формате ISO 8601 (например, 2004-02-12T15:19:21+00:00)
- sign - контрольная сумма md5 от конкатенации 4х строк: api_secret, date, num, last_comment. В языке php может быть получена с помощью md5($api_secret.$date.$num.$last_comment). Защищенный секрет api_secret Вы можете узнать при редактировании своего приложения в графе "Защищенный ключ".
Если у Вас на сайте используется jquery, Вы можете вызвать отправку сообщения на сервер используя следующий код:
function addCommentCallback(num, last_comment, date, sign){
$.post("http://ВАШ_САЙТ.ru/vkcomment.php",{
type: 'vkontakte',
num: num,
last_comment: last_comment,
date: date,
sign: sign,
id: "<?php echo $this->post['id']?>"
});
}
Я jquery не использую, у меня код такой:
function addCommentCallback(num, last_comment, date, sign){
try {
if(num && last_comment && date && sign){
var data=new FormData();
data.append('num', num);
data.append('last_comment', last_comment);
data.append('date', date);
data.append('sign', sign);
data.append('ref', document.location.referrer);
var xhr=new XMLHttpRequest();
xhr.open('POST', '/vkcomment.php', false);
xhr.send(data);
return true;
}
log(num, last_comment, date);
} catch (e) {
log(e);
}
return true;
}
Ну и непосредственно PHP обработчик vkcomment.php:
if (
$_SERVER['REQUEST_METHOD'] !== 'POST' ||
(
empty($_SERVER['HTTP_REFERER']) ||
strpos($_SERVER['HTTP_REFERER'], $_SERVER['HTTP_HOST']) === false
)
) exit;
if ( !isset($_POST['date']) || !isset($_POST['num']) || !isset($_POST['sign']) || !isset($_POST['last_comment']) ) exit;
/* блок провеки хеша, я не использую
$apiSecret = %ВАШ_API_SECRET%;
$hash = md5($apiSecret.$post['date'].$post['num'].$post['last_comment']);
if ($hash != $_POST['sign'])) exit; // проверяем, что хэши совпадают
*/
$msg = var_export($_POST,!0)."\nBrowser: ".@$_SERVER['HTTP_USER_AGENT']."\nHttp_referer: ".@$_SERVER['HTTP_REFERER'];
mail("XXX@htmlweb.ru", "VK Comment", $msg, "From: <noreply@htmlweb.ru>\nContent-Type: text/plain; charset=utf-8");
.
Прокомментировать/Отблагодарить