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 канал используя данные из БД. В архиве вы найдете куда больше примеров для генерации различных видов каналов.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
// Это минимальный пример использования  класса
  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′).

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

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

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

432
433
434
435
436
// autoload classes
function __autoload($class_name)
{
  require_once $class_name . '.php';
}

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

1
2
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