Настраиваемый счетчик подписчиков и фолловеров для WordPress

Настраиваемый счетчик подписчиков и фолловеров для WordPress В настоящее время доступно множество бесплатных графических счетчиков и WordPress-плагинов, предназначенных для отображения количества подписчиков FeedBurner и фолловеров Twitter, однако, первые не всегда вписываются в дизайн сайта, требуют выполнять "лишние" DNS-запросы и ощутимо замедляют отображение страниц браузерами, а вторые потребляют "лишние" системные ресурсы Веб-сервера. В данной статье описан один из способов избавления от перечисленных недостатков.

Как получить количество подписчиков FeedBurner и фолловеров Twitter?

Как FeedBurner, так и Twitter предоставляют разработчикам интерфейсы, позволяющие получать различную информацию о подписчиках и фолловерах. Процедура взаимодействия с перечисленными интерфейсами заключается в обращении к соответствующим URL и получении ответов в формате XML. Автор блога Zemalf.com опубликовал статью How To Show Feedburner Subscriber and Twitter Follower Counts on Your Blog, предлагающую обрабатывать эти ответы средствами PHP-расширений curl и SimpleXML, которые доступны на большинстве хостингов. Данная статья является моей интерпретацией рекомендаций финского блоггера.

Функция curl(), предназначенная для взаимодействия с интерфейсами FeedBurner и Twitter

Функция curl() предназначена для выполнения запросов к интерфейсам FeedBurner и Twitter, она используется рассмотренными ниже функциями отображения числа подписчиков и фолловеров. Код функции curl() должен быть добавлен в файл functions.php Вашей темы:

<?php
  function curl($url) {
    $ch = curl_init($url);
    curl_setopt($ch,CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch,CURLOPT_HEADER, 0);
    curl_setopt($ch,CURLOPT_TIMEOUT, 5);
    $data = curl_exec($ch);
    curl_close($ch);
    return $data;
  }
?>

Функция show_subscribers_count(), отображающая количество подписчиков FeedBurner

Функция show_subscribers_count() выполняет следующие действия: проверяет, не пора ли обновить количество подписчиков FeedBurner и, если пора обновить данные, выполняет запрос к интерфейсу FeedBurner с помощью рассмотренной выше функции curl(), извлекает из ответа количество подписчиков и, если запрос количества подписчиков был выполнен без ошибок, сохраняет количество подписчиков и время обновления количества подписчиков в опциях с именами subscribers_count и subscribers_count_last_update (в строках таблицы wp-options базы данных сайта, значения поля option_name которых равны subscribers_count и subscribers_count_last_update), а затем выводит сохраненное в базе данных количество подписчиков. Такой подход обеспечивает корректное отображение количества подписчиков даже в случае ошибок при выполнении запросов и кеширование данных на заданное время для избавления от необходимости выполнения "лишних" запросов. Код функции show_subscribers_count() следует добавить в файл functions.php Вашей темы (не забудьте изменить значение $fb_id на идентификатор Вашего фида и при необходимости задать другой $update_period в секундах):

<?php
  function show_subscribers_count() {
    $fb_id = 'sergeysl';
    $update_period = 10800;
    $current_time = mktime();
    if ($current_time - get_option('subscribers_count_last_update', 0) > $update_period) {
      $subscribers = curl('https://feedburner.google.com/api/awareness/1.0/GetFeedData?uri=' . $fb_id);
      $xml = new SimpleXmlElement($subscribers, LIBXML_NOCDATA);
      $subscribers_count = (string) $xml->feed->entry['circulation'];
      if ($subscribers_count) {
        update_option('subscribers_count', $subscribers_count);
        update_option('subscribers_count_last_update', $current_time);
      }
    }
    echo get_option('subscribers_count');
  }
?>

Теперь для отображения количества подписчиков FeedBurner можно использовать код:

<?php if(function_exists('show_subscribers_count')) show_subscribers_count(); ?>

Во избежание каких-либо недоразумений напоминаю, что для Вашего фида должен быть активирован сервис Awareness API.

Функция show_followers_count(), отображающая количество фолловеров Twitter

Функция show_followers_count() является аналогом рассмотренной выше функции show_subscribers_count(). Отличия заключаются в других форматах запроса и ответа, а также в использовании других опций для сохранения количества фолловеров и времени обновления количества фолловеров. Код функции show_subscribers_count() нужно добавить в файл functions.php Вашей темы (не забудьте изменить значение $twitter_id на имя Вашего аккаунта Twitter и при необходимости задать другой $update_period в секундах):

<?php
  function show_followers_count() {
    $twitter_id = 'sergeysl';
    $update_period = 10800;
    $current_time = mktime();
    if ($current_time - get_option('followers_count_last_update', 0) > $update_period) {
      $followers = curl('http://twitter.com/users/show.xml?screen_name=' . $twitter_id);
      $xml = new SimpleXmlElement($followers, LIBXML_NOCDATA);
      $followers_count = (string) $xml->followers_count;
      if ($followers_count) {
        update_option('followers_count', $followers_count);
        update_option('followers_count_last_update', $current_time);
      }
   }
   echo get_option('followers_count');
}
?>

Теперь для отображения количества фолловеров Twitter можно использовать код:

<?php if(function_exists('show_followers_count')) show_followers_count(); ?>

Заключение

Добавление перечисленных функций позволит Вам выбрать абсолютно любой дизайн для счетчиков подписчиков FeedBurner и фолловеров Twitter, при этом счетчики будут работать гораздо быстрее бесплатных графических аналогов и не вызовут заметное увеличение нагрузки на Веб-сервер. Дополнительным плюсом предложенного решения является уменьшение количества претензий к Вашему сайту со стороны теста Minimize DNS lookups, выполняемого Google Page Speed.

IT Talk - Форум о программировании, операционных системах, безопасности, сайтостроении, железе, девайсах, сетях и т.п.

Похожие статьи в рубриках ‘Интересное’ и ‘Создание сайтов’

Комментарии

  1. Ян, 14.01.2010 г. в 22:37

    Только собрался писать такую же статью, а Вы меня опередили уже :) Обойдусь тогда ссылкой на этот пост в следующем своём посте в разделе интересных ссылок :)
    P.S. Приведенный Вами метод гораздо проще и удобнее, чем тот, который использую я – пошёл опять копаться :)

  2. Сергей, 17.01.2010 г. в 23:50

    Здравствуйте!
    Вы извините, что я пишу здесь, но мне очень надо найти ответ на свой вопрос, на который Вы мне отвечали в теме Шакина Безопасность Wordpress – часть 1 по поводу трэкбэков. Вы мне советовали их отключать плагином. А нельзя ли ими как-то воспользоваться и не отключать. Меня вот этот вопрос интересует.
    Заранее благодарю за ответ!

    • SergeySL, 18.01.2010 г. в 8:21

      Доброе утро!
      Пользоваться можно, но неудобно. Сам пытался блокировать одного любителя отправки таких трекбеков в .htaccess, не помогло. Из обсуждения на блоге автора Disable Trackbacks понял, что существует плагин WP-Ban, в котором можно блокировать конкретную активность с конкретных адресов, т.е. пришел нехороший трекбек от СПАМера, добавили его IP-адрес куда нужно, больше от него же не придет. Мне не понравилось то, что придется постоянно корректировать список IP-адресов вручную. Я не стал подробно вникать в проблему, просто отключил трекбеки, появление СПАМа прекратилось, а я успокоился.

  3. Got, 28.03.2010 г. в 0:28

    Статья хорошая, несомненно большой + для вебмастера. Интересно, функция show_followers_count(), отображающая количество фолловеров Twitter, работает на всех версиях?

    • SergeySL, 28.03.2010 г. в 9:12

      Из всех возможностей WordPress используется только хранение цифр в базе данных, поэтому обе функции должны работать на всех версиях WordPress. Если переделать хранение цифр в базе данных под имеющиеся средства, то остальной код подойдет для любого сайта на PHP.

  4. Красота, 03.05.2010 г. в 21:20

    А можно таким же образом прицепить голоса от диггера?

  5. ADv, 21.07.2010 г. в 21:42

    ОГРОМНОЕ спасибо. поставил себе.

  6. Oxygen, 23.10.2010 г. в 17:50

    Огромное спасибо! Для тупых ещё не помешало бы вписать, как подключить библиотеку Curl.

    • SergeySL, 23.10.2010 г. в 21:49

      На здоровье. Обычно расширениями PHP управляют хостеры. Для просмотра списка активных расширений достаточно запустить функцию phpinfo().

  7. Светлана, 10.11.2010 г. в 20:36

    Большое спасибо за статью, я недавно зарегилась в Twitter, и мне интересно, как можно вывести твиттер на свой сайт, пока воспользовалась плагином, а чуть позже воспользуюсь вашим кодом, у меня пока мало фолловеров.

  8. dle, 23.11.2010 г. в 22:10

    Все понятно, мне лично всё понравилось, только вот один минус, сайт слегка подтормаживает у вас, а так всё норм! ;-)

  9. Дмитрий, 30.03.2011 г. в 17:12

    Доброго времени суток. Возник вопрос:
    Статистика не появилась.
    Awareness API активировал на странице своего фида на вкладке “Публикуй”.
    Далее – первые 2 куска кода засунул в functions.php.
    Финальную строчку засунул в сайдбар, ниже RSS.
    А в functions.php куда именно лучше засунуть? Что я сделал не так?

    • SergeySL, 30.03.2011 г. в 18:14

      Добрый вечер! Местонахождение кода в файле functions.php не имеет значения, а ответы на все вопросы, касающиеся проблем с PHP-кодом, содержатся в логе ошибок Веб-сервера.

      • Дмитрий, 30.03.2011 г. в 19:45

        Большое спасибо за поддержку. Файла Error.log не нашел на сервере, поэтому начал ковыряться и внимательней читать эту тему. Сменил задержку на с 10000 на 1 и тут же появилось значение “157″. Сменил ваше имя на свое – вуаля, все работает)) Еще раз спасибо)

  10. Xmodi, 21.04.2011 г. в 15:57

    И я всёровно не пойму. Сделал ак в feedburner , поставил счетчик , установил галочку подписки на комментарии , а ни фига не работает. Точнее пытался сам подписать один почтовый ящик и тишина – счетчик как был один подписчик так и остался:(

  11. [...] И больше всего мне понравилось решение предложенное Сергеем в своем [...]

Ваш комментарий

(обязательно)