В настоящее время доступно множество бесплатных графических счетчиков и 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 = '...'; $update_period = 10800; $current_time = mktime(); if ($current_time - get_option('subscribers_count_last_update', 0) > $update_period) { $subscribers = curl('http://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 = '...'; $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-запросов.
Только собрался писать такую же статью, а Вы меня опередили уже 🙂 Обойдусь тогда ссылкой на этот пост в следующем своём посте в разделе интересных ссылок 🙂 Приведенный Вами метод гораздо проще и удобнее, чем тот, который использую я — пошёл опять копаться…
Пользуйтесь на здоровье, заранее спасибо за ссылку 🙂
Здравствуйте!
Вы извините, что я пишу здесь, но мне очень надо найти ответ на свой вопрос, на который Вы мне отвечали в теме Шакина Безопасность WordPress — часть 1 по поводу трэкбэков. Вы мне советовали их отключать плагином. А нельзя ли ими как-то воспользоваться и не отключать. Меня вот этот вопрос интересует.
Заранее благодарю за ответ!
Доброе утро!
Пользоваться можно, но неудобно. Сам пытался блокировать одного любителя отправки таких трекбеков в
.htaccess
, не помогло. Из обсуждения на блоге автора Disable Trackbacks понял, что существует плагин WP-Ban, в котором можно блокировать конкретную активность с конкретных адресов, т.е. пришел нехороший трекбек от СПАМера, добавили его IP-адрес куда нужно, больше от него же не придет. Мне не понравилось то, что придется постоянно корректировать список IP-адресов вручную. Я не стал подробно вникать в проблему, просто отключил трекбеки, появление СПАМа прекратилось, и я успокоился.Статья хорошая, несомненно большой + для вебмастера. Интересно, функция
show_followers_count()
, отображающая количество фолловеров Twitter, работает на всех версиях?Из всех возможностей WordPress используется только хранение цифр в базе данных, поэтому обе функции должны работать на всех версиях WordPress. Если переделать хранение цифр в базе данных под имеющиеся средства, то остальной код подойдет для любого сайта на PHP.
А можно таким же образом прицепить голоса от диггера?
Я думаю, что можно прицепить любой сервис, имеющий соответствующий API.
ОГРОМНОЕ спасибо. Поставил себе.
Пользуйтесь на здоровье 🙂
Огромное спасибо! Для тупых ещё не помешало бы вписать, как подключить библиотеку Curl.
На здоровье. Обычно расширениями PHP управляют хостеры. Для просмотра списка активных расширений достаточно запустить функцию
phpinfo()
.Большое спасибо за статью, я недавно зарегилась в Twitter, и мне интересно, как можно вывести твиттер на свой сайт, пока воспользовалась плагином, а чуть позже воспользуюсь вашим кодом, у меня пока мало фолловеров.
На здоровье 🙂
Все понятно, мне лично всё понравилось, только вот один минус, сайт слегка подтормаживает у вас, а так всё норм! 😉
Оптимизирую, на сколько могу, но дешевизна хостинга вносит свои коррективы все заметнее и заметнее 🙂
Доброго времени суток!
Возник вопрос — статистика не появилась.
Awareness API активировал на странице своего фида на вкладке «Публикуй»,
Далее первые 2 куска кода засунул в
functions.php
,Финальную строчку засунул в сайдбар, ниже RSS.
А в
functions.php
куда именно лучше засунуть? Что я сделал не так?Добрый вечер!
Местонахождение кода в файле
functions.php
не имеет значения, а ответы на все вопросы, касающиеся проблем с PHP-кодом, содержатся в логе ошибок Веб-сервера.Большое спасибо за поддержку. Файла
Error.log
не нашел на сервере, поэтому начал ковыряться и внимательней читать эту тему. Сменил задержку на с 10000 на 1 и тут же появилось значение «157». Сменил ваше имя на свое — вуаля, все работает! Еще раз спасибо!На здоровье! Файл называется
httpd-error.log
. Обязательно найдите его, может очень сильно пригодиться 😉И я всё равно не пойму. Сделал аккаунт в FeedBurner, поставил счетчик, установил галочку подписки на комментарии, а ни фига не работает. Точнее пытался сам подписать один почтовый ящик, и тишина — на счетчике как был один подписчик, так и остался!
Количество подписчиков FeedBurner обновляется один раз в сутки.