Счетчики RSS и Twitter своими руками

Многие блоггеры используют на своих сайтах счетчики 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(); ?>

Метки: , ,

Комментарии

  1. Роман 20.05.2010 в 13:55 #

    Спасибо, настроил себе счетчик FeedBurner, и ре-твитнул :)

  2. Алекс 22.05.2010 в 19:12 #

    Полезная информация. Давно хотел реализовать это на своих сайтах. Начну прямо сегодня. Думаю все получится, в статьте в принципе все понятно.

  3. Never Lex 02.07.2010 в 11:57 #

    Отличное инфо. Задумывался над нестандартным оформлением счётчиков, но изучать API было лениво. Вам огромное спасибо!

  4. Never Lex 02.07.2010 в 19:06 #

    А на скорости отображения не сильно сказываются данные выкрутасы? :)

  5. Never Lex 02.07.2010 в 19:16 #

    Действитель. Из-за того, что Твиттор тупит, тупит теперь и весь блог.

    Нунафиг. Снёс ненужные красивости.

  6. eavasi 02.07.2010 в 21:22 #

    Спасибо за информацию.

    На самом деле, перепробовал массу подобных кодов. Надеюсь, что Ваше будет наиболее подходящим.

    Стоит продумать решение на случай, когда Твиттер недоступен, и код выполняться не будет, надо чтобы он замещался каким-то другим текстом. Иначе, сейчас если код счетчика Твиттера стоит в начале сайдбара, то в случае неисправности твиттера, не отображается и весь остаток сайдбара, и все что грузится после него — это и футер и расширенный футер.

    Еще раз спасибо за коды.

  7. Neolot 02.07.2010 в 21:26 #

    Да, знаю об этой проблеме, как только выкрою время хочу отладить код

  8. saffian 05.01.2011 в 14:19 #

    Спасибо огромное, настроил себе счетчики rss и twitter

  9. saffian 05.01.2011 в 17:33 #

    А подобным способом возможно вывести счетчик вконтакте?

  10. Virturum 11.01.2011 в 18:34 #

    Супер! За час поиска в нете — единственное хорошее решение вывода счетчиков. Спасибо.

  11. Vending 21.02.2011 в 09:39 #

    Почему-то время от времени не срабатывает функция get_feedcount, то есть циферка, то нет...

    • Neolot 21.02.2011 в 14:34 #

      Добавил в код счетчиков кэширование, это решит проблему

Ваше мнение

Если вам нужно вставить код, оберните его в специальный шорткод [php], [html], [css], [js].
Например: [js]Ваш код[/js]