Выводим число фолловеров на WordPress текстом без плагинов и без JavaScript

Счетчик фолловеров Twitter Когда-то у меня стояла задача – выводить на блоге количество RSS-подписчиков текстом (по данным сервиса FeedBurner). С этой задачей и по сей день прекрасно справляется плагин FeedBurnerCount, отличительной особенностью которого является то, что он никогда не покажет 0 или N/А (т.е. не определено). Если при попытке обновить число он не может достучаться до FeedBurner, то показывает предыдущее сохраненное в БД значение.

Так вот, не так давно я возжелал реализовать аналогичную вещь с Твиттером, т.е. вывести количество фолловеров текстом (числом) и чтобы при этом в процессе его обновления, если Твиттер будет недоступен, показывалось бы предыдущее успешно обновленное число.

Мне попадалось множество примеров вывода количества фолловеров в Твиттере – и в виде JavaScript, и в виде плагинов для WordPress, но мне был нужен более простой способ – только PHP и без всяких плагинов.

Естественно, я погуглил в поисках решения и погуглил успешно – нашел небольшую PHP-функцию, которая поставленную мною задачу решает на все 100%.

Я немного ее доработал и кроме этого добавил функцию склонения слов после числительных. Ниже представлен получившийся код. В результате его выполнения выводится текст вида: 1372 фолловера.

Код функции

Выглядит она следующим образом:

function twitter_followers($account) {
	function plural_form($number, $after) {
		$cases = array (2, 0, 1, 1, 1, 2);
		echo '<span class="count">'.$number.'</span> '.$after[ ($number%100>4 && $number%100<20)? 2: $cases[min($number%10, 5)] ];
	}
	$tw = get_option("twitterfollowers");
	if (!isset($tw['lastcheck'])) $tw['lastcheck'] = 0;
	if (!isset($tw['count'])) $tw['count'] = 0;
	if (!isset($tw['account'])) $tw['account'] = '';
	if ($tw['lastcheck'] < (mktime() - 3600) || $tw['account'] != $account) {
		$url = 'https://api.twitter.com/1/users/show.xml?screen_name='.$account;
		$headers = get_headers($url);
		if(strpos($headers[0], '200')) {
			$xml = file_get_contents($url);
			preg_match('/followers_count>(.*)</', $xml, $match);
			if ($match[1] !=0 ) {
				$tw['count'] = $match[1];
				$tw['lastcheck'] = mktime();
				$tw['account'] = $account;
				update_option("twitterfollowers",$tw);
			}
		}
	}
	plural_form(
		$tw['count'],
		/* варианты написания для количества 1, 2 и 5 */
		array('фолловер','фолловера','фолловеров')
	);
}

Данный код необходимо вставить в файл functions.php вашего WordPress-шаблона.

Число 3600 – это время в секундах, через которое следует проверять количество фолловеров. В данном случае это 1 час (3600 / 60 сек = 60 мин).

Чтобы непосредственно на сайте отобразить число фолловеров, вставьте в соответствующее место шаблона следующий код:

<?php twitter_followers('Dimox_ru'); ?>

и вместо Dimox_ru укажите имя своего аккаунта в Твиттере.

Скрипт работает следующим образом – через заданный промежуток времени он обращается к xml-данным вашего Твиттер-аккаунта и парсит число из тега <followers_count>. Если Твиттер ответил на запрос, то в базу данных WordPress это число записывается в виде опции “twitterfollowers”. Если же по какой-то причине Твиттер не ответил на запрос, то в этой опции остается предыдущее удачно сохраненное число.

Как обычно, я предполагаю, что может существовать и более изящное решение, но то, что я предлагаю, прекрасно работает и полностью меня устраивает, поэтому вы тоже можете его использовать.

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

Комментарии (52)

  1. 15 января 2011 г. в 16:36

    Дима, спасибо! Уже применил в новом шаблоне.
    А такая же штука для количество фанатов странички на facebook не встречалась?

    1. 15 января 2011 г. в 17:00 / ответ на коммент Vlad Ossipov

      Пожалуйста. Нет, не встречалась.

  2. 16 января 2011 г. в 08:13

    Вот только в основной код я бы это не засовывал — обвалится твиттер (бывает) — пострадает загрузка блога.

  3. 20 января 2011 г. в 15:28

    Спасибо, очередная изящная реализация!
    Для меня осталось дело за малым – адаптировать это под DataLife Engine :) думаю даже справлюсь сам, хоть и не прогер, если не опередят прогеры, читающие Ваш блог.

  4. 26 января 2011 г. в 11:26

    Я так не стал заморачиваться с различными кодами, а просто воспользовался готовым счетчиком от TwitterCounter.com, существенной разницы не вижу, хотя там можно и всякую динамику изменений смотреть. Но как говориться, на вкус и цвет…
    Но данную статью добавлю к себе в ексель, как альтернативу.

  5. 1 февраля 2011 г. в 23:27

    Dimox, пользовался своей функцией, решил взять твою. Ошибка общая для обоих бывает.
    Warning: file_get_contents(http://twitter.com/users/show.xml?screen_name=Zaandr) [function.file-get-contents]: failed to open stream: HTTP request failed! HTTP/1.1 400 Bad Request in

    1. 16 мая 2011 г. в 11:08 / ответ на коммент Zaandr

      Вы забыли кавычки :)

  6. ilyas
    9 февраля 2011 г. в 18:46

    здавствуйте я понимаю что бы стать крутым девелопером нужно много желания и прочитать много умных книжек, подскажите как мотивировать себя (пару раз пытался вставать в 7 утра заниматься спортом, компьютер ну просто неимоверно меня изматывает, ), доход небольшой делаю для себя средьненькие по красоте шабы для вордпресс, зарабатываю на статьях для бирж статей, и еще тупой вопрос кто нибуть распечатывает книги с пдф или дежавю у меня с компа проблема читать глаза быстро устают и засыпаю закомпом

    1. 10 февраля 2011 г. в 13:49 / ответ на коммент ilyas

      Я лично никакие живые книги не читал, ничего не распечатывал, всю информацию читал непосредственно на сайтах в Интернете.

      А мотиватором для меня было лишь желание что-то сотворить.

  7. ilyas
    9 февраля 2011 г. в 18:56

    димокс вы работаете на дому?

    1. 10 февраля 2011 г. в 13:49 / ответ на коммент ilyas

      Да.

  8. 13 февраля 2011 г. в 20:38

    А у меня ничо не получается. Вставляю в разные места-одни циферки и больше ничего

    1. 14 февраля 2011 г. в 17:39 / ответ на коммент Владимир

      Вообще-то только циферки и должны выводиться.

  9. 15 февраля 2011 г. в 08:33

    Подскажите, плиз, как соединить с картинкой, как у Вас

    1. 15 февраля 2011 г. в 10:21 / ответ на коммент Владимир

      У меня нет никаких картинок, все сделано на чистом CSS. Можете глянуть мою статью на английском – http://dimox.net/making-pretty-feedburner-counter-with-only-css3/

      1. 15 февраля 2011 г. в 11:35 / ответ на коммент Dimox

        Спасибо за советы. Попробую поковыряться, вдруг разберусь

  10. Эдуард
    18 февраля 2011 г. в 11:58

    Привет, не работает код..
    Просто вывел число и всё…

    1. 18 февраля 2011 г. в 12:10 / ответ на коммент Эдуард

      Число и должно быть.

  11. Сергей
    19 февраля 2011 г. в 13:23

    Доброго времени суток! Очень понравился ваш блог, и решил его изучить получше…
    Ставлю оценку 5+, в особенности за тему оформления!

    Может я конечно не совсем в тему, но уж очень интересен один вопрос, как вы сделали такую страничку поиска? (просто я сам только учусь в направлении сайтостроения) вот например у вас:
    По запросу “ай” найдено 575 статей (показаны 1-7) хм, очень интересно – сайт как я понял сделан на WordPress, я немножко рабирался с ним у меня получилось так:
    По запросу “смог получить запрос” найдено а так же количество статей (показаны 1-7), а вот интересует меня следующий вопрос:
    По запросу “ай” найдено 575 статей (показаны 8-14) НО
    По запросу “ой” найдена 1 статья (показаны 1-7)

    Если вас не затруднит раскройте сервер новичку как это всё реализуется?!
    P.S Заранее благодарю вас за ответ…

    1. 20 февраля 2011 г. в 09:55 / ответ на коммент Сергей

      Я отвечу на этот вопрос новым постом на своем другом блоге WPhacks.name. Так что подписывайтесь ;)

      1. Сергей
        22 февраля 2011 г. в 09:32 / ответ на коммент Dimox

        Прочитал вашу статью на WPhacks.name, получилось здорово!
        У меня была идея как реализовать подобную фитчу но в сравнении с вашей моя выглядела банально :)

        А как же вы сделали какие статьи показаны на странице?
        (показаны 8-14) (показаны 1-7) и т.д

        P.S Благодарю вас за ответ!

        1. 22 февраля 2011 г. в 11:18 / ответ на коммент Сергей

          Об этом напишу в следующей статье.

  12. 24 марта 2011 г. в 15:30

    Простите, посмотрите у меня на блоге.
    я поставил, и убрал. Теперь у меня все съехало.
    я ставил в сайдбар.
    Там перемешалось все.
    и в шапке линия ушла.

  13. 24 марта 2011 г. в 15:42

    все решилось, спассибо. не надо

  14. 21 июня 2011 г. в 05:43

    Добрый день. Заинтересовал ваш пост, весьма интересно) Вот только не могу понять, для вывода подписчиков по фиду вы используете плагин, а как сделать для твитов, использовать плагин? С другой стороны, устанавливая плагин, мы утяжеляем систему. Есть ли возможность вывода без плагина, но с оформлением. В общем, я не понял, как задать графический фон, ведь в примере с фидами был div, а здесь только php-код. Заранее спасибо за ответ)

    1. В ближайших постах как раз планирую обо всем этом написать.

      1. Спасибо, будем ждать!)

  15. 14 июля 2011 г. в 10:57

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

  16. 6 октября 2011 г. в 21:43

    Спасибо за нужный код.
    Не пойму почему, но вылетает ошибка (сайт online4biznes.ru):
    Fatal error: Cannot redeclare plural_form()
    с rss подписками все отлично работает

    1. 7 октября 2011 г. в 09:44 / ответ на коммент Александр

      Это потому, что коде для RSS и для Твиттера используется дублирующаяся функция plural_form(). Если ее дубликат удалить, то проблема исчезнет.

      1. 9 октября 2011 г. в 19:50 / ответ на коммент Dimox

        Спасибо что разъяснили!

  17. Дмитрий
    8 марта 2012 г. в 22:59

    А где в коде видно, что пишется значение в базу? Да и изредка бывает, что в месте вывода значения выдается ошибка с указание пути до functions.php (точный текст не помню). Как-то можно ее исправить?

    1. Вот эта строка сохраняет в БД:

      update_option("twitterfollowers",$tw);

      А что за ошибка?

      1. Дмитрий
        10 марта 2012 г. в 20:53 / ответ на коммент Dimox

        Точный текст не помню, поэтому лучше не буду врать. Если еще раз появится, то сразу сюда напишу

  18. 17 октября 2012 г. в 02:50

    Спасибо за способ. Только вот какое дело получается. Вывести число подписчиков на FeedBurner у меня получилось, и даже придать ему вид красивый, тоже по Вашему способу. А вот число читателей Твиттер никак не хочет появляться. Более того когда вставляю предложенный код в function.php и в последующем в сайдбар строчку, которая должна выводить этих самых читателей, то сайдбар “плывет”. Это если ставлю эту запись самой последней. А если ставлю в самом верху, то ни её ни всех “нижестоящих” виджетов не видно. В чем может быть проблемка? Без Вас не разберусь…. :-(

    1. 17 октября 2012 г. в 09:19 / ответ на коммент Ольга

      Не представляю, в чем дело.

      1. 17 октября 2012 г. в 12:48 / ответ на коммент Dimox

        Да, не обладаю я пока лаконичностью речи. В общем почему-то счетчик Фидбернера работает, а Твиттер не хочет. Может быть что-то у меня в function.php не так? Может какие то функции конфликтуют друг с другом? Опять же Фидбернер при этом работает как часики. Думала проблемы с плагинами php-виджетов. Перепробовала штук 5 – картина такая же. Вот и странно, что одна функция работает, а другая, почти идентичная, нет (((( . Думала Вы поможете, придется искать что-то другое. Просто в последнюю неделю заметила, что плагин Simple Counters перестал правильно отображать число подписчиков Твиттера. Вот и стала искать другое решение.

        1. 20 октября 2012 г. в 15:12 / ответ на коммент Ольга

          Здравствуйте. Проблемка была в том, что было 2 функции plural_form() – поняла из комментария выше. Видимо, добавляла её раньше, чтобы правильно склонялись слова после числительных. Убрала, все стало красиво. Но уже несколько дней на счетчике “0 фолловеров”. Может данная функция уже “не дружит” с Твиттером и он не отвечает на запросы? Проверила Ваши данные – тоже расходятся. У Вас на сайте в счетчике 2854, а на сайте Твиттера – 2864. Может в функции что-то поменять, чтобы выдавала правильное число?

          1. 20 октября 2012 г. в 15:38 / ответ на коммент Ольга

            Да, Вы правы. У Твиттера произошли изменения. Внес правки в функцию, теперь она снова работает.

            1. 20 октября 2012 г. в 16:59 / ответ на коммент Dimox

              Сразу вспомнила кота Матроскина: “УРРРРААААА….. Заработало!!!!” Спасибо, что уделили внимание моей маленькой проблемке!

            2. Denis Creative
              16 декабря 2012 г. в 04:33 / ответ на коммент Dimox
              В старом коде поменять только
              _http://twitter.com/
              на
              _https://api.twitter.com/1/

              (нижнее подчеркивание убрать)
              Я как-то и не обратил внимание, что счетчик завис)

              Спасибо за большое количество полезных кодов!

  19. 27 ноября 2013 г. в 17:56

    Твиттер снова сменил API и больше не поддерживает xml, у вас, по-моему, тоже неверно счетчик отображается.

    1. 27 ноября 2013 г. в 18:31 / ответ на коммент Seostager

      Да, это уже давненько. Я у себя вообще фиксированным числом указал.

  20. Дмитрий
    22 мая 2015 г. в 19:44

    Добрый вечер. есть проблема, выводит почему то цифру 0 постоянно, хотя подписчиков далеко не 0. в чем можт быть проблема?

    1. Код уже не рабочий, за 4 года в Твиттере многое изменилось.

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

Жирный текст

Ссылка

Цитата

Внутристрочный код

CSS-код

HTML-код

JavaScript-код

PHP-код