суббота, 20 мая 2017 г.

Плагин комментариев Facebook на сайте: как узнать, когда появляется новый комментарий?



�?так, я установил плагин Facebook-комментариев на свой сайт. Проходит месяц, и я не получаю ни одного уведомления о новых комментариях. Ни одного комментария не было? Захожу на сайт, просматриваю страницы. Есть! За вчера, позавчера, неделю назад, две недели назад, месяц назад. Но почему я узнаю о них только сейчас?
Знакомая ситуация? Тогда читайте статью дальше, как можно узнавать и сделать уведомления о новых комментариях.

Способ №1. Как узнать о новых комментариях.

Если вы установили плагин Facebook-комментариев правильно, то в нём должны появится настройки. Нажимаете на ссылку «Настройки» справа и затем на ссылку «Модерировать комментарии»:
модерация комментариев в плагине Facebook
Вы также можете открыть эту ссылку модерации комментариев напрямую, сохранив ее в браузере. Выглядит ссылка так:
https://developers.facebook.com/tools/comments/?id=ID_ПР�?ЛОЖЕН�?Я
В этой ссылке вам надо вставить свой ID_ПР�?ЛОЖЕН�?Я. Это идентификатор приложения, к которому привязывается плагин комментариев в тот момент, когда вы получаете код этого плагина:
идентификатор приложения, к которому привязывается плагин комментариев Фейсбука
После того, как вы перешли на страницу модерации комментариев, перед вами окажутся все комментарии, оставленные на сайте за все время в хронологическом порядке:
Под всеми комментариями нажимайте «Подписаться на обновления». Это позволит вам получать уведомления об ответах, а также позволит сразу определить, какие комментарии новые при следующем заходе на эту страницу модерации.
Достоинство этого способа: простота использования.
Недостаток: надо каждый день заходить на страницу модерации и проверять, появились новые комментарии или нет (если комментируют активно, то несколько раз в день заходить), — это неудобно.

Способ №2. Как сделать уведомления о новых комментариях себе на email.

Этот способ только для программистов.
Я приведу пример кода, благодаря которому на мой email будут приходить уведомления о новых комментариях из плагина Facebook.
Для примера я возьму плагин на тестовой веб-страницеhttp://www.masterskayafanstranic.com.ua/fbcommentmail/. Данный способ работает на любой html-странице, где может быть установлен плагин комментариев.
�?так, представим, что плагин еще не установлен. Для его установки надо вставить код Facebook-комментариев, а также дополнительный код, благодаря которому будет отслеживаться появление новых комментариев и пересылка данных в другой файл, к примеру, mail.php, который, в свою очередь, будет обрабатывать поступившие данные и отправлять на email.
Привожу код тестовой веб-страницы, где будет стоять плагин (назовём эту страницу index.html):
<!doctype HTML>
<html>
 
 <head>
  <title>FB comments to email</title>
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
 </head>
 
<body>
 
<!--Служебная библиотека Facebook-->
<div id="fb-root"></div>
<script>(function(d, s, id) {
  var js, fjs = d.getElementsByTagName(s)[0];
  if (d.getElementById(id)) return;
  js = d.createElement(s); js.id = id;
  js.src = "//connect.facebook.net/ru_RU/all.js#xfbml=1&appId=ID_ВАШЕГО_ПР�?ЛОЖЕН�?Я";
  fjs.parentNode.insertBefore(js, fjs);
}(document, 'script', 'facebook-jssdk'));</script>
 
<script src="https://connect.facebook.net/ru_RU/all.js"></script>
<script>
  window.fbAsyncInit = function() {
    FB.init({
      appId      : 'ID_ВАШЕГО_ПР�?ЛОЖЕН�?Я',
      status     : true,
      cookie     : true,
      oauth      : true,
      xfbml      : true 
    });
 
    // Включаем отслеживание новых комментариев и отправляем их в mail.php
    FB.Event.subscribe('comment.create',
    function(response) {
        $(document).load('mail.php?response=new');
    });
  };
</script>
 
 <!--Код плагина комментариев Facebook-->
 <div style="width:550px; padding:10px 0px 20px 0px;">
   <h2>Комментарии с уведомлениями на email</h2>
   <div class="fb-comments" data-href="ВАШ_URL_ГДЕ_СТО�?Т_ПЛАГ�?Н" data-num-posts="2" data-width="550"></div>
 </div
</body>
</html>
Объяснение кода:
все, что идет перед тегом <body> — стандартная часть для всех. После тега <body>идет служебная библиотека Javascript Facebook. В ней надо вставить только идентификатор вашего Facebook-приложения (об этом шла речь в начале статьи) в двух местах.
Затем идет самое интересное — код отслеживания новых комментариев и пересылка данных в файл mail.php:
FB.Event.subscribe('comment.create',
function(response) {
    $(document).load('mail.php?response=new');
});
�? в конце веб-страницы index.html — код самого плагина комментариев. Этот код генерируется в разделе для разработчиков Facebook.
Код веб-страницы index.html готов, переходим к файлу mail.php. Создадим его на компьютере, добавим в него нужный код и затем загрузим на хостинг в ту же папку, где находится index.html.
Код файла mail.php может быть очень коротким. Для получения email достаточно следующих двух строк:
<?php
 
  if(isset($_GET['response'])) {
 
      $subject = 'Добавлен новый комментарий';
      $msg = 'Добавлен новый комментарий.';
     
      mail("andrej_od@mail.ru", $subject, $msg);
 
  }
 
?>
Этот код говорит о том, что каждый раз при появлении нового комментария в плагине Facebook на почту andrej_od@mail.ru будет приходить письмо с темой и текстом «Добавлен новый комментарий».
В принципе, для того, чтобы моментально узнавать о новом комментарии, такого письма достаточно. Но сейчас оно не настроено: не указаны служебные заголовки, не указана кодировка текста (скорее всего будут приходить кракозябры), не понятно, кто оставил комментарий, и нет самого текста комментария.
Сейчас email выглядит так:
Хорошо бы в email показать, кто написал комментарий, ссылку на его профиль, текст самого комментария и время. Для этой задачи дополним код mail.php:
<?php
 
//достаем комментарии с веб-страницы в нужном формате
  $request_url ="https://graph.facebook.com/comments/?ids=http://www.masterskayafanstranic.com.ua/fbcommentmail/";
 
//забираем эти данные
  $requests = file_get_contents($request_url);
 
//отслеживаем через эту переменные появление нового комментария
  $fb_response = json_decode($requests,true);
 
//если появился новый, то делаем следующее:
  if(isset($_GET['response'])) {
 
//из каждого комментария вытягиваем имя, текст и время и записываем их в переменную, которую отправим на почту   
    foreach($fb_response['http://www.masterskayafanstranic.com.ua/fbcommentmail/']['comments']['data'] as $item){
 
    //Придумываем тему письма
    $subject = 'New FB-comment';
 
    //HTML-код самого email-а
    $msg = '
      <html>
      <body>
           <h2>Добавлен новый комментарий.</h2>
           <b>От кого:</b> <a href="https://www.facebook.com/profile.php?id=' . $item['from']['id'] . '">' . $item['from']['name'] . '</a><br />
           <b>Комментарий:</b> ' . $item['message'] . '<br />
           <b>Время:</b> ' . $item['created_time'] . '<br />
      </body>
      </html>
      ';
    }
     
    // это служебные заголовки email-а
    $header = 'Content-type: text/html; charset=utf-8' . "\r\n";
    $header .= 'From: FB-plugin on web-site' . \r\n";
    $header .= "X-Mailer: PHP/" . phpversion() . "\r\n";
    $header .= 'MIME-Version: 1.0' . "\r\n";
 
    //функция отправки email
    xmail("andrej_od@mail.ru", $subject, $msg, $header);
 
  }
 
?>
В этом коде в двух местах вам надо заменить ссылку веб-страницы с плагином на свою:
$request_url ="https://graph.facebook.com/comments/?ids=http://www.masterskayafanstranic.com.ua/fbcommentmail/";
foreach($fb_response['http://www.masterskayafanstranic.com.ua/fbcommentmail/']['comments']['data'] as $item)
А также в функции отправки email-а вписать нужный вам email вместо моего:
xmail("andrej_od@mail.ru", $subject, $msg, $header);
Все остальное код сделает за вас. Оставшуюся часть можно не менять.
Осталось проверить результат. �?так, загружаю все необходимые файлы на хостинг в одну отдельную папку, перехожу на страницуhttp://www.masterskayafanstranic.com.ua/fbcommentmail/ и оставляю комментарий:
плагин комментариев Фейсбука
Затем перехожу в свою почту и проверяю уведомление:
Всё работает. E-mail отображается в формате HTML: имя пользователя — это ссылка на его профиль в Facebook, ниже сразу читаем сам комментарий, и третья последняя строка — время комментария.
Все файлы с примерами кодов, необходимые для реализации таких же уведомлений, вы можете скачать. Для этого нажмите «Мне нравится» и затем по ссылке скачайте архив файлов.
like-gate
[like-gate]
В архиве есть одна папка mail и файл config.php, которые отвечают за создание и отправку HTML-письма.

Эти файлы менять не нужно, загружайте их на хостинг, как есть. В файле mail.phpвнесите изменения, о которых я говорил в статье. �? файл index.html просто для наглядности примера. У вас, конечно, будет своя веб-страница с установленным плагином.

Скачать