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

Обсуждение и помощь по вопросам взаимодействия с ВКонтакте API в Flash-приложениях (ActionScript)

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

Сообщение dennis » 26 июн 2011, 18:01

Привет!

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

Спасибо.
dennis

 
Автор темы
Сообщения: 9
Зарегистрирован: 26 июн 2011, 17:52
Благодарил (а): 1 раз.
Поблагодарили: 0 раз.

Чтобы убрать блок с рекламой, зарегистрируйтесь на форуме или войдите.

Google
 



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

Сообщение Александр » 26 июн 2011, 21:28

onChange: коллбек-функция, вызываемая при публикации или удалении комментария первого уровня.

http://vkontakte.ru/developers.php?o=-1 ... 0%E8%E5%E2

События для отлова комментария второго уровня нет.
Аватара пользователя
Александр
Создатель сайта
Создатель сайта
 
Сообщения: 4574
Зарегистрирован: 27 сен 2009, 16:45
Откуда: Санкт-Петербург
Благодарил (а): 126 раз.
Поблагодарили: 771 раз.

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

Сообщение dennis » 26 июн 2011, 21:39

Александр писал(а):
onChange: коллбек-функция, вызываемая при публикации или удалении комментария первого уровня.

http://vkontakte.ru/developers.php?o=-1 ... 0%E8%E5%E2

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


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

 
Автор темы
Сообщения: 9
Зарегистрирован: 26 июн 2011, 17:52
Благодарил (а): 1 раз.
Поблагодарили: 0 раз.

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

Сообщение dennis » 29 июн 2011, 14:00

Привет!

Возникла проблема - у меня не сходятся хеши :( Из документации:

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


Мой код на стороне сервера:

  1. function utf8_urldecode($str)
  2. {
  3.     $str = preg_replace("/%u([0-9a-f]{3,4})/i","&#x\\1;", urldecode($str));
  4.     return html_entity_decode($str, null, 'UTF-8');
  5. }
  6.  
  7. $num          = $_POST['num'];
  8. $last_comment = utf8_urldecode($_POST['last_comment']);
  9. $date         = $_POST['date'];
  10. $sign         = $_POST['sign'];
  11. $api_secret   = 'xxxxxxxxxxxxxxxxxxxx';
  12. $md5          = md5($api_secret . $date . $num . $last_comment);


Делал дампы, убеждался, что данные доходят верно. Еще думал что фигня с кодировкой, но оказалось мимо - простой камент "1" не проходит. Сверял код приложения - все сходится. Защищенный ключ взял там, где и говорится в документации, но хеши $sign и $md5 не сходятся! Натолкните на мысль, пожалуйста.

Изображение
dennis

 
Автор темы
Сообщения: 9
Зарегистрирован: 26 июн 2011, 17:52
Благодарил (а): 1 раз.
Поблагодарили: 0 раз.

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

Сообщение Александр » 29 июн 2011, 20:53

dennis
А если не делать utf8_urldecode ?
Аватара пользователя
Александр
Создатель сайта
Создатель сайта
 
Сообщения: 4574
Зарегистрирован: 27 сен 2009, 16:45
Откуда: Санкт-Петербург
Благодарил (а): 126 раз.
Поблагодарили: 771 раз.

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

Сообщение dennis » 29 июн 2011, 21:17

Александр писал(а):dennis
А если не делать utf8_urldecode ?


Не, все тоже самое :( Вот, на всякий случай JS-часть:

  1.  
  2. VK.init({apiId: 2268273, onlyWidgets: true});
  3.  
  4. VK.Widgets.Comments("vk_comments", {limit: 20, width: 600, attach: "*", onChange: VKComment});
  5.  
  6. function ajax()
  7. {
  8.     if(window.XMLHttpRequest)
  9.     {
  10.         return new XMLHttpRequest();
  11.     }
  12.     else if(window.ActiveXObject)
  13.     {
  14.         return new ActiveXObject("Microsoft.XMLHTTP");
  15.     }
  16. }
  17.  
  18. function VKComment(num, last_comment, date, sign)
  19. {
  20.     var request = ajax();
  21.     var param = 'num=' + escape(num) + '&last_comment=' + escape(last_comment) + '&date=' + escape(date) + '&sign=' + escape(sign) + '&url=' + escape(window.location);
  22.     request.open('POST', '/vkontakte/comment/', false);
  23.     request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
  24.     request.setRequestHeader('Content-Length', param.length);
  25.     request.send(param);
  26. }
dennis

 
Автор темы
Сообщения: 9
Зарегистрирован: 26 июн 2011, 17:52
Благодарил (а): 1 раз.
Поблагодарили: 0 раз.

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

Сообщение Александр » 29 июн 2011, 21:56

PHP скрипт в UTF-8? Тогда сделай:
  1. $last_comment=iconv("utf-8", "windows-1251", $_POST['last_comment']);

escape делать обязательно?

Сделай

и

Данные абсолютно одинаковы?

За это сообщение автора Александр поблагодарил:
dennis
Аватара пользователя
Александр
Создатель сайта
Создатель сайта
 
Сообщения: 4574
Зарегистрирован: 27 сен 2009, 16:45
Откуда: Санкт-Петербург
Благодарил (а): 126 раз.
Поблагодарили: 771 раз.

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

Сообщение dennis » 03 июл 2011, 02:39

Еее, все заработало :)

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']). Все, можно считать и сравнивать хеши :)
dennis

 
Автор темы
Сообщения: 9
Зарегистрирован: 26 июн 2011, 17:52
Благодарил (а): 1 раз.
Поблагодарили: 0 раз.

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

Сообщение Ruslan_G » 04 июл 2011, 03:35

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

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

 
Сообщения: 1
Зарегистрирован: 04 июл 2011, 03:18
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.

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

Сообщение dennis » 04 июл 2011, 12:11

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


Ой, я пока что не в теме - я только-только начал работать с вконтактовым апи.
dennis

 
Автор темы
Сообщения: 9
Зарегистрирован: 26 июн 2011, 17:52
Благодарил (а): 1 раз.
Поблагодарили: 0 раз.


Вернуться в Создание Flash-приложений ВКонтакте



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 0