Поиск по блогу

среда, 26 ноября 2008 г.

Парсинг RSS на PHP. Простой пример

В комментариях спрашивали про парсинг RSS на PHP. Так как этот вопрос напрямую относится к теме блога, то я его решила немного изучить и осветить.

Для начала я прочитала в интернете про разные способы парсинга на PHP (почитайте обязательно, очень полезный материал). Все оказалось просто, синтаксис очень понятный и удобный. Особенно мне понравился SimpleXML :)

Полученные знания нужно закреплять на практике.

Вы все знаете про Яндекс-блоги. И знаете, что там можно подписаться на RSS по любому запросу. Причем синтаксис запросов (такой же, как к самому Яндексу) предоставляет достаточно широкие возможности. Можно следить за всем, что происходит в блогосфере.

Составляем запрос и визуально убеждаемся, что в результате запроса получаем валидный XML.


Внутри скрипта пишем:

<?
function utf8_convert($str, $type)
{
static $conv = '';
if (!is_array($conv))
{
$conv = array();
for ($x=128; $x <= 143; $x++)
{
$conv['utf'][] = chr(209) . chr($x);
$conv['win'][] = chr($x + 112);
}
for ($x=144; $x<= 191; $x++)
{
$conv['utf'][] = chr(208) . chr($x);
$conv['win'][] = chr($x + 48);
}
$conv['utf'][] = chr(208) . chr(129);
$conv['win'][] = chr(168);
$conv['utf'][] = chr(209) . chr(145);
$conv['win'][] = chr(184);
}
if ($type == 'w')
{
return str_replace($conv['utf'], $conv['win'], $str);
}
elseif ($type == 'u')
{
return str_replace($conv['win'], $conv['utf'], $str);
}
else
{
return $str;
}
}

echo '<h1><font color="red">Конфузы блогосферы</font></h1>';
$url = 'http://blogs.yandex.ru/search.rss?text="наложил в штаны"'; //адрес RSS ленты

$rss = simplexml_load_file($url); //Интерпретирует XML-файл в объект

//цикл для обхода всей RSS ленты
foreach ($rss->channel->item as $item) {
echo '<a href="'.$item->link.'">';
echo '<h2>'.utf8_convert($item->title,"w").'</h2>'; //выводим на печать заголовок статьи
echo '</a>';
echo utf8_convert($item->description,"w"); //выводим на печать текст статьи
}

?>


Вот и все, любуемся результатом.

Если вы хотите парсить "в накопительном режиме", то у записей достаточно обрабатывать и сравнивать дату публикации pubDate. В зависимости от этой даты — записывать или не записывать в базу.

Статьи схожей тематики:



7 комментариев:

  1. Спасибо, очень помог этот пост.
    В ЯППБ еще есть такая штука, "показать полный текст". Не подскажите как сделать так, чтобы парсить еще и этот текст, который появляется после нажатия на "показать полный текст" ?

    ОтветитьУдалить
  2. Если фид выдается у урезанном виде, то полную запись можно взять только если зайти по ссылке. Это тоже можно автоматизировать. По-другому — вряд ли.

    ОтветитьУдалить
  3. Так давайте автоматизируем!)

    ОтветитьУдалить
  4. Дмитрий, автоматизируйте) Я уже)

    ОтветитьУдалить
  5. Подскажите пожалуйста, как можно урезать количество выводимых статей до 3х к примеру

    ОтветитьУдалить
  6. adminius, немного не поняла. Куда выводимых? На экран в примере? Если да, то просто вместо foreach использовать for, например. Предварительно, конечно, проверив, что есть достаточное количество записей.

    ОтветитьУдалить
  7. А не проще использовать iconv для конвертации кодировки?

    ОтветитьУдалить

Комментарии модерируются, вопросы не по теме удаляются, троллинг тоже.

К сожалению, у меня нет столько свободного времени, чтобы отвечать на все частные вопросы, так что, может, свой вопрос лучше задать на каком-нибудь форуме?

Поделиться