Реализуем модуль пузомерки на нашем блоге

 

Доброго времени суток дорогой читатель моего блога! Сегодня выходной, а стало быть сегодня необходимо пополнить глобальный цикл статей "Создать блог с нуля", а то мы так и не закончим писать наш блог Улыбаюсь. У нас по списку создание простейшего парсера для вывода количества подписчиков на страницах нашего блога. Данный модуль очень прост в понимание, и как мне кажется данная заметка не будет принадлежать к категории "Вынос мозга" Смеюсь

Как же узнать сколько у Вас подписчиков? Все довольно просто, в великом и могучем php есть функция file_get_contents() которая позволяет считывать код с страниц сайта.

 

 

То есть если в параметр данной функции вписать ссылку на страницу любого сайта, то в результате мы получим ее html код. В данной заметке работать мы будем не с полученных html кодом, а  с полученным xml кодом, но процесс выдергивания нужной нам информации одинаков Улыбаюсь.

Нам только осталось узнать где хранится информация о подписчиках, и дело в шляпе! Не буду тянуть, вот они, те самые ссылки:

http://feedburner.google.com/api/awareness/1.0/GetFeedData?uri=ЛОГИН_ВАШЕГО_АККАУНТА
http://api.twitter.com/1/users/show.xml?screen_name=ЛОГИН_ВАШЕГО_АККАУНТА

Прежде чем Вы начнете вбивать эти ссылки в адресную строку хочу уточнить пару нюансов:

  • На количество просмотров xml файла твиттер аккаунта есть ограничение. Точную цифру я не помню, но после преодоления энного порога загрузок в час, страничка перестанет отображать необходимую для нас информацию. Именно поэтому нам придется сохранять вытащенную информацию у себя на сервере, и обновлять ее раз в час (можно конечно чаще, но не думаю что это необходимо).
  • xml страничка rss ленты (feedburner) не будет отображаться если не выставить настройку, в аккаунте фидбурнера, разрешающую показывать данную информацию. Об этой настройки мы поговорим чуть ниже.

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

 

Для тех кто на блоге в первый раз

 

Небольшая заметка для новоприбывших. Необходимо она для того чтобы проинформировать нового пользователя о том, что данный материал является продолжением глобального цикла статей "Создать блог с нуля".

Данный цикл описывает подробный метод создания своего небольшого, простенького движка персонального блога на php. Если Вам интересен данный материал, то переходите по ссылке, что я дал Вам выше, и приступайте к изучению.

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

 

Настройка аккаунта feedburner

 

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

  • Заходим в свой аккаунт и выбираем необходимую ленту

 

настройка фидбурнера, выбираем ленту

 

  • Выбираем вкладку Publicize

 

настройка фидбурнера, выбираем вкладку Publicize

 

  • В левом меню выбираем Awareness API

 

настройка фидбурнера, выбираем вкладку Awareness API

 

  • На открывшийся страничке жмем на кнопку Activate

 

настройка фидбурнера, активация

 

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

 

Как будет работать мини модуль вывода подписчиков?

 

Я накидал небольшую схему, по ней проще будет понять как будет работать наш модуль. Так что смотрим внимательно на "Это" Смеюсь

 

как работает модуль подписчиков

 

Как я уже говорил у твиттера есть ограничение, именно поэтому мы будем сохранять выдернутую информацию на сервере в виде xml файла. Помимо количества подписчиков, в файле мы будем хранить час последнего успешного обновления файла. В общем внимание на схему Улыбаюсь

Синея стрелка олицетворяет алгоритм.

  • Первым делом скрипт определит текущей час.
  • Далее вытащит, из xml документа, час последнего обновления файла подписчиков.
  • Следующий шаг это сравнение часов
    • Если текущий час не равен часу последнего удачного обновления файла, то информация о количестве подписчиков будет браться с страниц твиттера и фидбурнера
    • Если текущий час равен часу последнего удачного обновления файла, то информация о количестве подписчиков будет браться из файла xml
  • Последнее что сделает модуль, это с генерирует html код, который в последствие увидит читатель Вашего блога.

Для реализации нам понадобится сделать следующее:

  • Создать шаблон с своим стилем (Напишем новый класс в нашем файле style.css)
  • Гламурное изображение Смеюсь которое Вы можете скачать вот по этой ссылке. Засуньте данное изображение в папку img нашего блога
  • Напишем, на великом и могучем php, алгоритм модуля
  • Создадим xml файл в корне нашего блога
  • Ну и на по следок некоторые манипуляции с подключение данного модуля, плюс вывод с генерированного html кода в главном шаблоне нашего блога

В общем хватит говорить, приступим к реализации!

 

Создаем шаблон и стиль для модуля вывода подписчиков

 

Шаблон представляет собой блок из нескольких маленьких блоков. Стиль нам необходим для того чтобы наш созданный блок был прицеплен к правому краю браузера (очень много строчек, поэтому будет правильно вынести данный код класса в файл style.css).

 

Стиль для нашего шаблона

 

Начнем с стиля. Открываем наш файл style.css и в самом низу создаем новый класс:

.reader
{
width:89px;
height:164px;
background-image:url(img/stat.png);
background-position:left top;
background-repeat:no-repeat;
font-size:14px;
font-weight:bold;
position:fixed;
top:35%;
right:-10px;
z-index:5;
}

Как видите наш блок будет:

  • 89 пикселей в ширину
  • 164 пикселя в высоту
  • Сам блок будет украшать картинка, которую Вы скачали чуть выше.
  • Плюс ко всему этому шрифт в блок будет куда больше (14 пикселей).
  • И самое главное, блок будет зафиксирован в правой части нашего браузера.

 

Шаблон для нашего модуля

 

Теперь давайте создадим шаблон. Его я назвал reader.html и поместил в пользовательскую папку templates. Вот код:

				<!-- ПУЗОМЕРКИ -->
<div class="reader">
<div style="width:89px;height:57px;">&nbsp;</div>
<div style="width:89px;height:25px;text-align:center;">[_rss]</div>
<div style="width:89px;height:57px;">&nbsp;</div>
<div style="width:89px;height:25px;text-align:center;">[_tw]</div>
</div>
<!-- ПУЗОМЕРКИ -->

Как видите ничего особенного тут нет. Блок содержащий 4 вложенных блока. В первом и третьем мини блоке Вы можете вставить ссылки на ваши аккаунты (у меня так и сделано), а во втором и четвертом будут красоваться цифры.

 

Реализация модуля вывода подписчиков

 

Для начала создадим xml файл. Я его назвал reader.xml и поместил в корень нашего блога. Вот код данного файла:

<?xml version="1.0" encoding="UTF-8"?>
<reader>
<hour>0</hour>
<rss>error</rss>
<twitter>error</twitter>
</reader>

Не обращайте внимание на значение error, оно сменится после корректного запуска нашего модуля.

Теперь пришло время создать сам алгоритм модуля. Он будет состоять из трех функция.

  • Первая определит и сравнит время. В зависимости от того равны часы или нет, функция решит каким именно образом вытащить число подписчиков. Данная функция содержит код выборки информации о подписчиках из xml файла. Также формирует текст нового обновленного xml
  • Остальные две функции содержу код выборки информации с страниц твиттера и фидбурнера

Я даю Вам полный за комментированный код.

<?
function select_reader($rssacc,$twacc)//Функция сбора кол-ва rss и твиттер подписчиков
{
$date_h = date("G");//определяем актуальный час
$raderFILE = file("reader.xml");//считываем файл с подписками
$raderFILE = implode("",$raderFILE);//функция file() возвращаем массив, поэтому склеиваем его
preg_match("/<hour>([0-9]+)<\/hour>/s",$raderFILE,$readerHour);//вырезаем из xml файла вставленное в поле <hour></hour> час

if($readerHour[1] != $date_h)//если актуальное время не равно записанному в xml файл времени
{
$rss_reader = rss_reader($rssacc);//запускаем функцию парсера rss подписчиков
$twitter_reader = twitter_reader($twacc);//запускаем функцию парсера твиттер подписчиков
if(!preg_match("/^[0-9]+$/s",$rss_reader))$rss_reader = "error";//если результат работы функции не число, то выставляем слово error
if(!preg_match("/^[0-9]+$/s",$twitter_reader))$twitter_reader = "error";//если результат работы функции не число, то выставляем слово error

if($rss_reader == 0)//Если rss подписчиков ноль
{
preg_match("/<rss>([a-z0-9]+)<\/rss>/s",$raderFILE,$readerRSS);//вырезаем кол-во подписчиков из xml файла
$rss_reader = $readerRSS[1];//заносим значение в переменную
}
if($twitter_reader == 0)//Если твиттер подписчиков ноль
{
preg_match("/<twitter>([a-z0-9]+)<\/twitter>/s",$raderFILE,$readerTW);//вырезаем кол-во подписчиков из xml файла
$twitter_reader = $readerTW[1];//заносим значение в переменную
}

//Генерируем текст xml файла
$xmlHEADER = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<reader>\n";//Создаем шапку xml файла
$xml = "\t<hour>".$date_h."</hour>\n\t<rss>".$rss_reader."</rss>\n\t<twitter>".$twitter_reader."</twitter>\n";//заполняем необходимые теги полученной информацией
$xmlEND = "</reader>";//закрываем главный тег
$xml = $xmlHEADER.$xml.$xmlEND;//склеиваем текст xml файла в одной переменной

$xmlFILE = fopen("reader.xml", "w+");//открываем файл
fwrite($xmlFILE,$xml);//записываем в него полученный xml код
fclose($xmlFILE);//закрываем файл
}
else//Если актуальное время совпало с записанным в xml файл
{
preg_match("/<rss>([a-z0-9]+)<\/rss>/s",$raderFILE,$readerRSS);//вырезаем кол-во rss подписчиков из файла
preg_match("/<twitter>([a-z0-9]+)<\/twitter>/s",$raderFILE,$readerTW);//вырезаем кол-во твиттер подписчиков из файла
$rss_reader = $readerRSS[1];//заносим вырезанное значение в переменную
$twitter_reader = $readerTW[1];//заносим вырезанное значение в переменную
}

$sm_read = file("templates/reader.html");//...подключаем шаблон
$sm_read = implode("",$sm_read);//функция file() возвращаем массив, поэтому склеиваем его

$sm_read = str_replace("[_rss]",$rss_reader,$sm_read);//заменяем код-слово на значение rss подписчиков
$sm_read = str_replace("[_tw]",$twitter_reader,$sm_read);//заменяем код-слово на значение твиттер подписчиков

return $sm_read;//выводим html код
}
//-------------------------------------------
function twitter_reader($acc)//парсер твиттер аккаунта
{
$tw_file = @file_get_contents("http://api.twitter.com/1/users/show.xml?screen_name=".$acc);//считываем xml код аккаунта
if(isset($tw_file))//если считывание произошло без ошибок
{
preg_match("/<followers_count>(.*?)<\/followers_count>/s",$tw_file,$reader);//вырезаем необходимое нам число из кода страницы
return $reader[1];//выводим результат в виде числа
}
else return "-";//выводим прочерк в случае если не удалось прочитать страницу аккаунта
}
//-------------------------------------------
function rss_reader($acc)//парсер rss аккаунта
{
$rss_file = @file_get_contents("http://feedburner.google.com/api/awareness/1.0/GetFeedData?uri=".$acc);//считываем xml код аккаунта
if(isset($rss_file))//если считывание произошло без ошибок
{
preg_match("/circulation=\"(.*?)\"/s",$rss_file,$reader);//вырезаем необходимое нам число из кода страницы
return $reader[1];//выводим результат в виде числа
}
else return "-";//выводим прочерк в случае если не удалось прочитать страницу аккаунта
}
?>

Единственное что тут надо сказать, что информация полученная функцией file_get_contents() обрабатывается регулярным выражением. Думаю Вы и сами это видите Смеюсь Да, чуть не забыл, данный файл я назвал reader.php и поместил в пользовательскую папку moduls. Следите за правильной кодировкой файлов

 

Подключаем наш модуль вывода подписчиков

 

Подключение производится в главном пользовательском файле index.php. Открываем его, и сразу после мини модуля лучших постов пишем вот такой код:

//ВЫВОД ЧИТАТЕЛЕЙ RSS ЛЕНТЫ/ВЫВОД ЧИТАТЕЛЕЙ ТВИТТЕРА
$rssacc = "";//ник для rss аккаунта
$twacc = "";//ник для твиттер аккаунта
include("moduls/reader.php");
$reader = select_reader($rssacc,$twacc);
//ВЫВОД ЧИТАТЕЛЕЙ RSS ЛЕНТЫ/ВЫВОД ЧИТАТЕЛЕЙ ТВИТТЕРА

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

Ну и последнее, это вывод нашего модуля на экран пользователя. Открываем пользовательский файл index.html и в левом блоке, перед выводом переменной txt пишем следующее:

<?=$reader?>

Вот так будет выглядеть левый блок в шаблоне

		<!--ЛЕВЫЙ БЛОК-->
<td valign="top">
<?=$reader?>
<?=$txt?>
</td>
<!--ЛЕВЫЙ БЛОК-->

Надеюсь разобрались Улыбаюсь

 

Заключение

 

Как то я начал не в своем стиле... Очень длинное вступление, после чего несколько мелких пунктов с кодом и минимум объяснений. Наверное из-за жары которая меня уже окончательно доконала Плачу

В общем не смотря на это при первом запуске (не забудьте в ручную вписать Ваши ники в переменные) я получил вот такую картину

 

результат работы

 

Надеюсь у Вас тоже все получилось с первого раза! Если все же у Вас есть какие либо вопросы, то пользуйтесь формой ниже. Если Вы еще не подписаны на мой блог, то обязательно подпишитесь на RSS ленту блога через ридер, или же по почте. Улыбаюсь

Всего Вам наилучшего! У меня на сегодня все!

Исходник
 

Возможно Вам будут интересны следующие заметки

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

Ваше имя *
Сайт
Ваш E-mail *
Ваше сообщение *
 
Иван, 05 Августа 2012 г. 23:39 пишет:
Гость
Странно, в статье говорите про функцию file_get_contents(), а сами пишете:
$raderFILE = file("reader.xml");
$raderFILE = implode("",$raderFILE);
Странный подход у Вас!
Rio-Shaman, 06 Августа 2012 г. 09:11 пишет:
Автор
Раз в час скрипт пользуется функцией file_get_contents(). В остальное время пользуется сохраненными данными в файле reader.xml. Сделано так по причине того что у твиттера есть ограничение по обращению к их страничке в час. Если не сохранять данные то в один прекрасный момент скрипт будет выдавать не число подписчиков, а ошибку.
Ответ для пользователя: Иван
Женя, 06 Августа 2012 г. 09:13 пишет:
Гость
Пролистал весь ваш сайт, а где у вас выводится количество подписчиков так и не нашел((
Rio-Shaman, 06 Августа 2012 г. 09:21 пишет:
Автор
А картинка прикрепленная к правому краю браузера разве не видна? Сейчас по показателям у меня 42 подписчика RSS ленты и 146 подписчиков твиттер аккаунта
Ответ для пользователя: Женя
ZR, 08 Августа 2012 г. 12:30 пишет:
Гость
Приветствую!
У меня вопрос не по теме :
появилсь необходимость скрыть формат файлов при загрузке страницы в адресной строке
Ну то есть чтобы заместо http://site.ru/link.php в адресной строке выводилось http://site.ru/link
Доступа к php.ini у мня нет. Пытался через .htaccess - ничего. Либо я его не подключил (кстати...его нужно подключать?) , либо код неправильный
но tes-skyrim.ru располагается на том же хостинге , что и мой сайт. Там скрыт формат файла. но у админов спросить не могу - все спят уже по пол года
вы знаете как это реализовать?
Rio-Shaman, 08 Августа 2012 г. 15:08 пишет:
Автор
Я знаю лишь один способ достичь нужного Вам результат, это через файл htaccess. Бросаете данный файл в корень Вашего сайта и пишите в этом файле вот такой код:

RewriteEngine on
RewriteRule ^link$ link.php [L]

При попытке запросить страницу http://site.ru/link пользователю отобразится страница http://site.ru/link.php но в адресной строке ссылка будет в нужном Вам виде (http://site.ru/link )
Ответ для пользователя: ZR