Выводим число фолловеров на WordPress текстом без плагинов и без JavaScript
Когда-то у меня стояла задача – выводить на блоге количество 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)
Дима, спасибо! Уже применил в новом шаблоне.
А такая же штука для количество фанатов странички на facebook не встречалась?
Пожалуйста. Нет, не встречалась.
Вот только в основной код я бы это не засовывал — обвалится твиттер (бывает) — пострадает загрузка блога.
Спасибо, очередная изящная реализация!
Для меня осталось дело за малым – адаптировать это под DataLife Engine :) думаю даже справлюсь сам, хоть и не прогер, если не опередят прогеры, читающие Ваш блог.
Я так не стал заморачиваться с различными кодами, а просто воспользовался готовым счетчиком от TwitterCounter.com, существенной разницы не вижу, хотя там можно и всякую динамику изменений смотреть. Но как говориться, на вкус и цвет…
Но данную статью добавлю к себе в ексель, как альтернативу.
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
Вы забыли кавычки :)
здавствуйте я понимаю что бы стать крутым девелопером нужно много желания и прочитать много умных книжек, подскажите как мотивировать себя (пару раз пытался вставать в 7 утра заниматься спортом, компьютер ну просто неимоверно меня изматывает, ), доход небольшой делаю для себя средьненькие по красоте шабы для вордпресс, зарабатываю на статьях для бирж статей, и еще тупой вопрос кто нибуть распечатывает книги с пдф или дежавю у меня с компа проблема читать глаза быстро устают и засыпаю закомпом
Я лично никакие живые книги не читал, ничего не распечатывал, всю информацию читал непосредственно на сайтах в Интернете.
А мотиватором для меня было лишь желание что-то сотворить.
димокс вы работаете на дому?
Да.
А у меня ничо не получается. Вставляю в разные места-одни циферки и больше ничего
Вообще-то только циферки и должны выводиться.
Подскажите, плиз, как соединить с картинкой, как у Вас
У меня нет никаких картинок, все сделано на чистом CSS. Можете глянуть мою статью на английском – http://dimox.net/making-pretty-feedburner-counter-with-only-css3/
Спасибо за советы. Попробую поковыряться, вдруг разберусь
Привет, не работает код..
Просто вывел число и всё…
Число и должно быть.
Доброго времени суток! Очень понравился ваш блог, и решил его изучить получше…
Ставлю оценку 5+, в особенности за тему оформления!
Может я конечно не совсем в тему, но уж очень интересен один вопрос, как вы сделали такую страничку поиска? (просто я сам только учусь в направлении сайтостроения) вот например у вас:
По запросу “ай” найдено 575 статей (показаны 1-7) хм, очень интересно – сайт как я понял сделан на WordPress, я немножко рабирался с ним у меня получилось так:
По запросу “смог получить запрос” найдено а так же количество статей (показаны 1-7), а вот интересует меня следующий вопрос:
По запросу “ай” найдено 575 статей (показаны 8-14) НО
По запросу “ой” найдена 1 статья (показаны 1-7)
Если вас не затруднит раскройте сервер новичку как это всё реализуется?!
P.S Заранее благодарю вас за ответ…
Я отвечу на этот вопрос новым постом на своем другом блоге WPhacks.name. Так что подписывайтесь ;)
Прочитал вашу статью на WPhacks.name, получилось здорово!
У меня была идея как реализовать подобную фитчу но в сравнении с вашей моя выглядела банально :)
А как же вы сделали какие статьи показаны на странице?
(показаны 8-14) (показаны 1-7) и т.д
P.S Благодарю вас за ответ!
Об этом напишу в следующей статье.
Простите, посмотрите у меня на блоге.
я поставил, и убрал. Теперь у меня все съехало.
я ставил в сайдбар.
Там перемешалось все.
и в шапке линия ушла.
все решилось, спассибо. не надо
Добрый день. Заинтересовал ваш пост, весьма интересно) Вот только не могу понять, для вывода подписчиков по фиду вы используете плагин, а как сделать для твитов, использовать плагин? С другой стороны, устанавливая плагин, мы утяжеляем систему. Есть ли возможность вывода без плагина, но с оформлением. В общем, я не понял, как задать графический фон, ведь в примере с фидами был div, а здесь только php-код. Заранее спасибо за ответ)
В ближайших постах как раз планирую обо всем этом написать.
Спасибо, будем ждать!)
Большое спасибо, теперь до меня допетрило, что для счетчика твиттера достаточно найти такой же плагин. Помог плагин TwitterCount, который использует функцию .
Спасибо за нужный код.
Не пойму почему, но вылетает ошибка (сайт online4biznes.ru):
Fatal error: Cannot redeclare plural_form()
с rss подписками все отлично работает
Это потому, что коде для RSS и для Твиттера используется дублирующаяся функция
plural_form()
. Если ее дубликат удалить, то проблема исчезнет.Спасибо что разъяснили!
А где в коде видно, что пишется значение в базу? Да и изредка бывает, что в месте вывода значения выдается ошибка с указание пути до functions.php (точный текст не помню). Как-то можно ее исправить?
Вот эта строка сохраняет в БД:
А что за ошибка?
Точный текст не помню, поэтому лучше не буду врать. Если еще раз появится, то сразу сюда напишу
Спасибо за способ. Только вот какое дело получается. Вывести число подписчиков на FeedBurner у меня получилось, и даже придать ему вид красивый, тоже по Вашему способу. А вот число читателей Твиттер никак не хочет появляться. Более того когда вставляю предложенный код в function.php и в последующем в сайдбар строчку, которая должна выводить этих самых читателей, то сайдбар “плывет”. Это если ставлю эту запись самой последней. А если ставлю в самом верху, то ни её ни всех “нижестоящих” виджетов не видно. В чем может быть проблемка? Без Вас не разберусь…. :-(
Не представляю, в чем дело.
Да, не обладаю я пока лаконичностью речи. В общем почему-то счетчик Фидбернера работает, а Твиттер не хочет. Может быть что-то у меня в function.php не так? Может какие то функции конфликтуют друг с другом? Опять же Фидбернер при этом работает как часики. Думала проблемы с плагинами php-виджетов. Перепробовала штук 5 – картина такая же. Вот и странно, что одна функция работает, а другая, почти идентичная, нет (((( . Думала Вы поможете, придется искать что-то другое. Просто в последнюю неделю заметила, что плагин Simple Counters перестал правильно отображать число подписчиков Твиттера. Вот и стала искать другое решение.
Здравствуйте. Проблемка была в том, что было 2 функции plural_form() – поняла из комментария выше. Видимо, добавляла её раньше, чтобы правильно склонялись слова после числительных. Убрала, все стало красиво. Но уже несколько дней на счетчике “0 фолловеров”. Может данная функция уже “не дружит” с Твиттером и он не отвечает на запросы? Проверила Ваши данные – тоже расходятся. У Вас на сайте в счетчике 2854, а на сайте Твиттера – 2864. Может в функции что-то поменять, чтобы выдавала правильное число?
Да, Вы правы. У Твиттера произошли изменения. Внес правки в функцию, теперь она снова работает.
Сразу вспомнила кота Матроскина: “УРРРРААААА….. Заработало!!!!” Спасибо, что уделили внимание моей маленькой проблемке!
(нижнее подчеркивание убрать)
Я как-то и не обратил внимание, что счетчик завис)
Спасибо за большое количество полезных кодов!
Твиттер снова сменил API и больше не поддерживает xml, у вас, по-моему, тоже неверно счетчик отображается.
Да, это уже давненько. Я у себя вообще фиксированным числом указал.
Добрый вечер. есть проблема, выводит почему то цифру 0 постоянно, хотя подписчиков далеко не 0. в чем можт быть проблема?
Код уже не рабочий, за 4 года в Твиттере многое изменилось.