RSS канал на свой блог я прикрутил давно, взяв php скрипт  из Danneo CMS. Вот только радость моя была не долгой, скрипт не давал валидный rss, и любимая Opera кричала что-то невразумительное об ошибке XML. Тогда я решил написать rss генератор сам,  но так как не очень люблю строить велосипеды, сперва я решил поискать готовое решение.

Попробовав кучу скриптов мой выбор пал на скрипт из phpclasses.org, также можете скачать на моем сайте

Скрипт поддерживает генерацию:

  • RSS 1.0 
  • RSS 2.0
  • ATOM 1.0

 

Особенности :

  • Генерирует валидные RSS 1.0, RSS 2.0 и ATOM 1.0 каналы
  • Все каналы отлично проходят валидацию через RSS валидаторы (к примеру feedvalidator.org)
  • Просто и легко определить общий канал и канал для элементов ( к примеру для комментариев) 
  • Реализует соответствующие пространства имен для разных версий
  • Автоматически преобразует форматы дат 
  • Создает UUID для ATOM-каналов
  • Позволяет использовать субтеги и атрибуты . (к примеру: image)
  • Полностью объектно ориентированно в структуре класса PHP5. 
  • Специальные данные, содержащие ссылки помещены в контейнер CDATA 

Минимальный пример:

Это минимальный пример использования скрипта.Я генерирую RSS 2.0 канал используя данные из БД. В архиве вы найдете куда больше примеров для генерации различных видов каналов.

// Это минимальный пример использования  класса 
  include("FeedWriter.php");
  
  //Создаем экземпляр класса FeedWriter. 
  $TestFeed = new FeedWriter(RSS2);
  
  //Настройка канала элементов 
  //Использование функции-оболочки для общих элементов канала 
  $TestFeed->setTitle('Тест & Проверка RSS генератора');
  $TestFeed->setLink('http://xdan.ru');
  $TestFeed->setDescription('Этот тест создает RSS 2.0 канал, при помощи скрипта Universal Feed Writer');
 
    //читаем информацию из бд
    mysql_connect("server", "mysql_user", "mysql_password");
    mysql_select_db("my_database");

    $result = mysql_query("Ваш запрос");

 
    while($row = mysql_fetch_array($result, MYSQL_ASSOC))
    {
        //создаем пустой item
        $newItem = $TestFeed->createNewItem();
        
        //добавляем в него информацию
        $newItem->setTitle($row['title']);
        $newItem->setLink($row['link']);
        $newItem->setDate($row['create_date']);
        $newItem->setDescription($row['description']);
        
        //теперь добавляем item в наш канал
        $TestFeed->addItem($newItem);
    }
  
  //Все готово. Генерируем и выводим получившийся XML
  $TestFeed->genarateFeed();

 Никаких заголовков посылать не нужно, скрипт все делает сам.

Нюансы:

Данный скрипт писался англоязычным индусом, для американцев, и как водится для таких скриптов, кириллицу не поддерживает. Но не все так плохо.

Находим строку 298 в файле FeedWriter.php: и заменяем htmlentities($tagContent) на  htmlentities($tagContent, ENT_QUOTES, ‘UTF-8′).

$nodeText .= (in_array($tagName, $this->CDATAEncoding))? $tagContent :htmlentities($tagContent, ENT_QUOTES, 'UTF-8');

Все работает.

И еще один момент, если Вы используете в своем движке __autoload функцию, то лучше в файле FeedWriter.php удалить или закомментировать следующие строки

// autoload classes
function __autoload($class_name) 
{
	require_once $class_name . '.php';
}

  и затем там, где вы подключали include("FeedWriter.php"); добавить  include("FeedItem.php")

include("FeedWriter.php");
include("FeedItem.php");

Вот и все, теперь осталось написать универсальный RSS Ридер =)  Упс, в Google уже это сделали)

Оставлять комментарии могут только зарегистрированные пользователи

Комментарии  

Петропавловск
# Петропавловск 15.08.2013 19:41
Этот скрипт для вордпресс???
Leroy
# Leroy 15.08.2013 19:45
универсальный
Сергей3333
# Сергей3333 06.02.2015 14:05
Там в atom баг вызывается статический метод uuid() хотя он им не являестя.
Надо добывить static
public static function uuid($key = null, $prefix = '')
и еще setImage не работает надо заменить setEncloser