вторник, 1 марта 2011 г.

Простой RSS-ридер на PHP (Simple RSS reader using PHP)

Думаю, что такое RSS все знают, это базовый XML формат для публикации сводной информации по сайту. Сама аббревиатура RSS как раз это и раскрывает: Really Simple Syndication (RSS 2.x), что дословно переводится как «очень простой сбор сводной информации».

Допустим, у нас есть главный сайт и отдельно блог с новостями, они разнесены на разные поддомены и работают с разными БД, на разных CMS. Нам необходимо встроить в новостной блок на главной странице последние новости, опубликованные в блоге. Для этого нам вовсе не понадобится писать функций импорта, который будет обращаться к другой БД, разбираться со структурой таблиц, например, движка WordPress. Есть более простой путь это реализовать – сделать экспорт-импорт через RSS.

Функцию экспорта краткой версии новостей (постов из блога) нам писать не придётся, RSS-каналы есть в любом блоггерском движке. А вот написать клиентскую часть, на PHP, тоже не составит труда, для этого надо написать простой парсер RSS-канала.

Что же представляет из себя RSS-канал, давайте рассмотрим. Корневой элемент RSS-документа содержит единый элемент channel. Элемент channel содержит метаданные о канале, включая интересующие нас title (заголовок), language (язык), pubDate (дата обновления канала) и link (URL блога). Так же внутри содержатся статьи, заключённые в тег item. Каждый item имеет элемент link, с URL на статью, ну и непосредственно заголовок title и описание description, которые содержат простой текст.

PHP5 имеет достаточно «жирные» инструменты, для доступа к различным узлам XML, а всё благодаря SimpleXML API. Есть прекрасная функция simplexml_load_file(), которая и делает всю работу. Она не только загружает документ из указанного URL, парсит (разбирает) документ, но и ставит указатель на корневой элемент документа, которым выступает у нас 'rss'.

Приведу пример простого RSS-ридера на PHP используя SimpleXML API:

<?php
$items_to_display = 2;
$url = "http://webaurum.blogspot.com/feeds/posts/default";
$rss = simplexml_load_file($url);
if ($rss)
{
  echo '<h1>' . $rss->channel->title . '</h1>';
  echo '<br/>' . $rss->channel->pubDate . '<br/>';
  $items = $rss->channel->item;
  $item_count = 0;
  foreach($items as $item)
  {
    $title = $item->title;
    $link = $item->link;
    $ts = strtotime($item->pubDate);
    $published_on = date("Y-m-d", $ts);
    $description = $item->description;
    echo '<h3><a href="' . $link . '">' . $title . '</a></h3>';
    echo '<span>' . $published_on . '</span>';
    echo '<p>' . $description . '</p>';
    if(++$item_count >= $items_to_display)
      break;
  }
}
?>

Скрипт обращается по адресу указанному в переменной $url, считывает RSS feed, парсит документ, и выводит количество записей, ограниченных количеством, заданном в переменной $items_to_display.

Такой скрипт вообще можно положить отдельным файлом на сервере, и делать простой SSI include в обычную статичную html страницу, во всех местах, где нужен этот блок новостей.

Комментариев нет:

Отправить комментарий

Рекоммендую

Попробуйте надёжный хостинг от Scala Hosting