Страница 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
О, там даже с солёным хешем для защиты от спама. Спасибо, это то что нужно!
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 делать обязательно?
Сделай
и
Данные абсолютно одинаковы?
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?
Ой, я пока что не в теме - я только-только начал работать с вконтактовым апи.