Доброго времени суток дорогой читатель моего блога! Сегодня выходной, а стало быть сегодня необходимо пополнить глобальный цикл статей "Создать блог с нуля", а то мы так и не закончим писать наш блог . У нас по списку создание простейшего парсера для вывода количества подписчиков на страницах нашего блога. Данный модуль очень прост в понимание, и как мне кажется данная заметка не будет принадлежать к категории "Вынос мозга"
Как же узнать сколько у Вас подписчиков? Все довольно просто, в великом и могучем 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=ЛОГИН_ВАШЕГО_АККАУНТА
Прежде чем Вы начнете вбивать эти ссылки в адресную строку хочу уточнить пару нюансов:
В общем то это все нюансы которые необходимо сейчас знать. После небольшого вступления для новоприбывших, мы начнем реализовывать модуль пузомерки на нашем блоге.
Небольшая заметка для новоприбывших. Необходимо она для того чтобы проинформировать нового пользователя о том, что данный материал является продолжением глобального цикла статей "Создать блог с нуля".
Данный цикл описывает подробный метод создания своего небольшого, простенького движка персонального блога на php. Если Вам интересен данный материал, то переходите по ссылке, что я дал Вам выше, и приступайте к изучению.
Если Вы решили задержаться на моем блоге, то обязательно подпишитесь на RSS ленту блога через ридер, или же по почте. Так Вы не пропустите новые заметки цикла, ну или какую-нибудь другую интересную информацию
Как уже говорил выше, для того чтобы по ссылке (которую я тоже дал выше ) фидбурнера мы увидели нужную нам xml страничку, нам необходимо разрешить показ данной страничке в аккаунте фидбурнера.
На этом настройки аккаунта завершены. Возможно Вам придется еще нажать на кнопку Save, но я не помню что бы жал на нее...
Я накидал небольшую схему, по ней проще будет понять как будет работать наш модуль. Так что смотрим внимательно на "Это"
Как я уже говорил у твиттера есть ограничение, именно поэтому мы будем сохранять выдернутую информацию на сервере в виде xml файла. Помимо количества подписчиков, в файле мы будем хранить час последнего успешного обновления файла. В общем внимание на схему
Синея стрелка олицетворяет алгоритм.
Для реализации нам понадобится сделать следующее:
В общем хватит говорить, приступим к реализации!
Шаблон представляет собой блок из нескольких маленьких блоков. Стиль нам необходим для того чтобы наш созданный блок был прицеплен к правому краю браузера (очень много строчек, поэтому будет правильно вынести данный код класса в файл 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;
}
Как видите наш блок будет:
Теперь давайте создадим шаблон. Его я назвал reader.html и поместил в пользовательскую папку templates. Вот код:
<!-- ПУЗОМЕРКИ -->
<div class="reader">
<div style="width:89px;height:57px;"> </div>
<div style="width:89px;height:25px;text-align:center;">[_rss]</div>
<div style="width:89px;height:57px;"> </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, оно сменится после корректного запуска нашего модуля.
Теперь пришло время создать сам алгоритм модуля. Он будет состоять из трех функция.
Я даю Вам полный за комментированный код.
<?
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 ленту блога через ридер, или же по почте.
Всего Вам наилучшего! У меня на сегодня все!
Исходник |
$raderFILE = file("reader.xml");
$raderFILE = implode("",$raderFILE);
Странный подход у Вас!
У меня вопрос не по теме :
появилсь необходимость скрыть формат файлов при загрузке страницы в адресной строке
Ну то есть чтобы заместо http://site.ru/link.php в адресной строке выводилось http://site.ru/link
Доступа к php.ini у мня нет. Пытался через .htaccess - ничего. Либо я его не подключил (кстати...его нужно подключать?) , либо код неправильный
но tes-skyrim.ru располагается на том же хостинге , что и мой сайт. Там скрыт формат файла. но у админов спросить не могу - все спят уже по пол года
вы знаете как это реализовать?
RewriteEngine on
RewriteRule ^link$ link.php [L]
При попытке запросить страницу http://site.ru/link пользователю отобразится страница http://site.ru/link.php но в адресной строке ссылка будет в нужном Вам виде (http://site.ru/link )