Страница 1 из 1

Отловить добавление комментария через виджет "Комментарии"

Добавлено: 26 июн 2011, 18:01
dennis
Привет!

У нас на сайте (доска объявлений) можно оставлять комментарии через виджет ВКонтакта "Комментарии". Например, вот: http://murom.jazi.ru/ru/transport/cars/ ... ied/66230/. Я хочу чтобы автор объявления получал уведомление о том, что его объявление откомментили. Я бы мог отправлять ему письмо, или слать сообщение ВКонтакте, если бы он при публикации залогинился ВКонтакт-аккаунтом. Но вот проблема в том, что я не знаю, как мне самому получить уведомление о том, что получен комментарий. Это как-то возможно сделать?

Спасибо.

Re: Отловить добавление комментария через виджет "Комментарии"

Добавлено: 26 июн 2011, 21:28
Александр
onChange: коллбек-функция, вызываемая при публикации или удалении комментария первого уровня.
http://vkontakte.ru/developers.php?o=-1 ... 0%E8%E5%E2

События для отлова комментария второго уровня нет.

Re: Отловить добавление комментария через виджет "Комментарии"

Добавлено: 26 июн 2011, 21:39
dennis
Александр писал(а):
onChange: коллбек-функция, вызываемая при публикации или удалении комментария первого уровня.
http://vkontakte.ru/developers.php?o=-1 ... 0%E8%E5%E2

События для отлова комментария второго уровня нет.
О, там даже с солёным хешем для защиты от спама. Спасибо, это то что нужно!

Re: Отловить добавление комментария через виджет "Комментарии"

Добавлено: 29 июн 2011, 14:00
dennis
Привет!

Возникла проблема - у меня не сходятся хеши :( Из документации:
sign - контрольная сумма md5 от конкатенации 4х строк: api_secret, date, num, last_comment. В языке php может быть получена с помощью md5($api_secret.$date.$num.$last_comment).
Мой код на стороне сервера:

Код: Выделить всё

function utf8_urldecode($str){    $str = preg_replace("/%u([0-9a-f]{3,4})/i","&#x\\1;", urldecode($str));    return html_entity_decode($str, null, 'UTF-8');} $num          = $_POST['num'];$last_comment = utf8_urldecode($_POST['last_comment']);$date         = $_POST['date'];$sign         = $_POST['sign'];$api_secret   = 'xxxxxxxxxxxxxxxxxxxx';$md5          = md5($api_secret . $date . $num . $last_comment);
Делал дампы, убеждался, что данные доходят верно. Еще думал что фигня с кодировкой, но оказалось мимо - простой камент "1" не проходит. Сверял код приложения - все сходится. Защищенный ключ взял там, где и говорится в документации, но хеши $sign и $md5 не сходятся! Натолкните на мысль, пожалуйста.

Изображение

Re: Отловить добавление комментария через виджет "Комментарии"

Добавлено: 29 июн 2011, 20:53
Александр
dennis
А если не делать utf8_urldecode ?

Re: Отловить добавление комментария через виджет "Комментарии"

Добавлено: 29 июн 2011, 21:17
dennis
Александр писал(а):dennis
А если не делать utf8_urldecode ?
Не, все тоже самое :( Вот, на всякий случай JS-часть:

Код: Выделить всё

 VK.init({apiId: 2268273, onlyWidgets: true}); VK.Widgets.Comments("vk_comments", {limit: 20, width: 600, attach: "*", onChange: VKComment}); function ajax(){    if(window.XMLHttpRequest)    {        return new XMLHttpRequest();    }    else if(window.ActiveXObject)    {        return new ActiveXObject("Microsoft.XMLHTTP");    }} function VKComment(num, last_comment, date, sign){    var request = ajax();    var param = 'num=' + escape(num) + '&last_comment=' + escape(last_comment) + '&date=' + escape(date) + '&sign=' + escape(sign) + '&url=' + escape(window.location);    request.open('POST', '/vkontakte/comment/', false);    request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');    request.setRequestHeader('Content-Length', param.length);    request.send(param);}

Re: Отловить добавление комментария через виджет "Комментарии"

Добавлено: 29 июн 2011, 21:56
Александр
PHP скрипт в UTF-8? Тогда сделай:

Код: Выделить всё

$last_comment=iconv("utf-8", "windows-1251", $_POST['last_comment']);
escape делать обязательно?

Сделай

Код: Выделить всё

alert(param);
и

Код: Выделить всё

echo $date.' '.$num.' '.$last_comment;
Данные абсолютно одинаковы?

Re: Отловить добавление комментария через виджет "Комментарии"

Добавлено: 03 июл 2011, 02:39
dennis
Еее, все заработало :)

escape делать надо, т.к. параметры нужно эскейпить (а при передаче в php они будут прозрачно разэскейпиваться). Ошибка была в том, что для эскейпивания в js надо использовать не escape, а encodeURIComponent. escape это немного другое, она не симметрична PHP urldecode. И конвертить в windows-1251 тоже надо.

Итого: параметры в аяксе заворачиваем в encodeURIComponent, указываем request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'), в PHP из $_POST все вынимаем как есть, за исключением текста комента. Комент вынимаем как iconv('utf-8', 'windows-1251', $_POST['last_comment']). Все, можно считать и сравнивать хеши :)

Re: Отловить добавление комментария через виджет "Комментарии"

Добавлено: 04 июл 2011, 03:35
Ruslan_G
Подскажите ещё пожалуйста, как узнать автора комментария,его фио и id. Если делать авторизацию, тогда проблем нет, а вот если используется только виджет комментариев, как тогда быть? В событие OnChange не передается автор.

Если же так нельзя, то может есть способ получить все комментарии со страницы со всеми данными, аналогично fb?

Re: Отловить добавление комментария через виджет "Комментарии"

Добавлено: 04 июл 2011, 12:11
dennis
Ruslan_G писал(а):Подскажите ещё пожалуйста, как узнать автора комментария,его фио и id. Если делать авторизацию, тогда проблем нет, а вот если используется только виджет комментариев, как тогда быть? В событие OnChange не передается автор.
Если же так нельзя, то может есть способ получить все комментарии со страницы со всеми данными, аналогично fb?
Ой, я пока что не в теме - я только-только начал работать с вконтактовым апи.