AAA Главная
Примеры PHP Примеры JavaScript Примеры Ajax Примеры CSS,HTML

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?116"></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 вызывается с четырьмя параметрами:

Если у Вас на сайте используется 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");

. Айболит своего дела по ссылке: http://www.psihiatr-moskva.ru врач психиатр в Москве!

© Copyright 2008- by KDG



Rambler's Top100