Настраиваемый счетчик подписчиков и фолловеров для 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_ru';
    $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, при этом счетчики будут работать быстрее бесплатных графических аналогов и не вызовут заметное увеличение нагрузки на Веб-сервер. Дополнительным плюсом предложенного решения является уменьшение количества претензий к Вашему сайту со стороны Google Page Speed за счет сокращения числа «лишних» DNS-запросов.

R.I.P.В связи с тем, что Google прекратил поддержку FeedBurner API, а Twitter несколько раз обновил API, рассмотренные в статье способы подсчета количества подписчиков FeedBurner и фолловеров Twitter больше не работают.

Понравилась статья?

Подпишитесь на RSS или почтовую рассылку;

Присоединяйтесь в Twitter, Facebook, Google+, VK;

Поделитесь ссылкой в социальной сети или блоге:

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

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

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

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

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

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

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

    • Я думаю, что можно прицепить любой сервис, имеющий соответствующий API.

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

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

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

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

    • Оптимизирую, на сколько могу, но дешевизна хостинга вносит свои коррективы все заметнее и заметнее 🙂

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

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

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

        • На здоровье! Файл называется httpd-error.log. Обязательно найдите его, может очень сильно пригодиться 😉

  9. И я всё равно не пойму. Сделал аккаунт в FeedBurner, поставил счетчик, установил галочку подписки на комментарии, а ни фига не работает. Точнее пытался сам подписать один почтовый ящик, и тишина — на счетчике как был один подписчик, так и остался!

Обсуждение закрыто