Многие блоггеры используют на своих сайтах счетчики RSS и Twitter. Обычно они представляют из себя стандартные и не слишком разные картинки с цифрами, которые далеко не всегда удачно вписываются в дизайн.
Сегодня я расскажу, как сделать собственные счетчики RSS и Twitter для WordPress, это на самом деле просто.
В обоих случаях я воспользуюсь API, соответственно FeedBurner API и Twitter API. Начнем с самого простого, с Twitter.
Счетчик Twitter
Без авторизации основную публичную информацию можно получить по ссылке ниже, где twitter_name — это ваш ник в твиттере:
http://twitter.com/users/show.xml?screen_name=twitter_name
Информация эта представлена в виде XML, и содержит все публичные данные аккаунта. Меня сейчас интересует только поле <followers_count>. Итак, получим значение этого поля на примере моего аккаунта:
function get_twittercount() {
$twitter_name = 'Nickname'; // Ввести свой ник
$output = get_transient( 'twitter_counter' ); // Получаем данные из кэша
if ( $output === false || $output === '' ){ // Если кэш сброшен или пустой...
$xml = @simplexml_load_file('http://twitter.com/users/show.xml?screen_name='.$twitter_name); // ... получаем данные
$output = $xml[0]->followers_count; // Получили количество фолловеров
set_transient( 'twitter_counter', $output, 60*10 ); // Пишем в кэш на 10 мин
}
echo $output; // Выводим данные
}
Вставьте эту функцию в файл functions.php вашего шаблона. Не забудьте в строке 2 заменить Nickname на свой ник в Твиттере. После этого достаточно вызвать эту функцию в том месте шаблона, где вы хотите выводить счетчик:
<?php if ( function_exists('get_twittercount') ) get_twittercount(); ?>
Рабочий пример вы можете видеть здесь, в боковой колонке.
Счетчик FeedBurner
Со счетчиком FeedBurner кода будет немного больше, но не намного сложнее.
function get_feedcount() {
$feedid = 'FeedName'; // Ввести название ленты
$output = get_transient( 'rss_counter' ); // Получаем данные из кэша
if ( $output === false || $output === '' ){ // Если кэш сброшен или пустой, то получаем данные
$twodayago = date('Y-m-d', strtotime('-2 days', time()));
$onedayago = date('Y-m-d', strtotime('-1 days', time()));
$today = date('Y-m-d');
$api = "https://feedburner.google.com/api/awareness/1.0/GetFeedData?uri=$feedid&dates=$twodayago,$onedayago";
// Инициализация curl-сессии
$ch = curl_init();
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_URL, $api);
$data = curl_exec($ch);
$base_code = curl_getinfo($ch);
curl_close($ch);
if ($base_code['http_code']=='401'){
$burner_count_circulation = 'Доступ к Awareness API запрещен';
$burner_date = $today;
} else {
$xml = new SimpleXMLElement($data); // Получаем данные
$bis = $xml->attributes(); // Если счетчик равен нулю, то выводим данные за предыдущие дни
if ($bis=='ok'){
foreach ($xml->feed as $feed) {
if ($feed->entry[1]['circulation']=='0'){
$burner_count_circulation = $feed->entry[0]['circulation'];
$burner_date = $feed->entry[0]['date'];
} else {
$burner_count_circulation = $feed->entry[1]['circulation'];
$burner_date = $feed->entry[1]['date'];
}
}
}
if ($bis=='fail'){
switch ($xml->err['code']) {
case 1:
$burner_count_circulation = 'Лента не найдена';
break;
case 5:
$burner_count_circulation = 'Отсутствует требуемый параметр (URI)';
break;
case 6:
$burner_count_circulation = 'Неверный формат параметра (DATES)';
break;
}
$burner_date = $today;
}
}
$output = $burner_count_circulation;
set_transient( 'rss_counter', $output, 60*60*24 ); // Пишем в кэш на 24 часа
}
echo $output;
}
Обратите внимание, что в ночное время (по Мск) идет пересчет данных RSS и счетчик будет возвращать пустое значение. Чтобы избежать этой проблемы я добавил кэширование. Просто имейте ввиду, что счетчик лучше вставить в тему днем или вечером, но не ночью, чтобы в кэш не записалось пустое значение.
Вставьте эту функцию в functions.php, введите название ленты и вызовите счетчик в нужном месте шаблона:
<?php if ( function_exists('get_feedcount') ) get_feedcount(); ?>
Спасибо, настроил себе счетчик FeedBurner, и ре-твитнул
Полезная информация. Давно хотел реализовать это на своих сайтах. Начну прямо сегодня. Думаю все получится, в статьте в принципе все понятно.
Отличное инфо. Задумывался над нестандартным оформлением счётчиков, но изучать API было лениво. Вам огромное спасибо!
А на скорости отображения не сильно сказываются данные выкрутасы?
Действитель. Из-за того, что Твиттор тупит, тупит теперь и весь блог.
Нунафиг. Снёс ненужные красивости.
Спасибо за информацию.
На самом деле, перепробовал массу подобных кодов. Надеюсь, что Ваше будет наиболее подходящим.
Стоит продумать решение на случай, когда Твиттер недоступен, и код выполняться не будет, надо чтобы он замещался каким-то другим текстом. Иначе, сейчас если код счетчика Твиттера стоит в начале сайдбара, то в случае неисправности твиттера, не отображается и весь остаток сайдбара, и все что грузится после него — это и футер и расширенный футер.
Еще раз спасибо за коды.
Да, знаю об этой проблеме, как только выкрою время хочу отладить код
Спасибо огромное, настроил себе счетчики rss и twitter
А подобным способом возможно вывести счетчик вконтакте?
Супер! За час поиска в нете — единственное хорошее решение вывода счетчиков. Спасибо.
Почему-то время от времени не срабатывает функция get_feedcount, то есть циферка, то нет...
Добавил в код счетчиков кэширование, это решит проблему