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 уже это сделали)
Комментарии
Надо добывить static
public static function uuid($key = null, $prefix = '')
и еще setImage не работает надо заменить setEncloser