Импортирование лент с помощью Zend_Feed Zend_Feed позволяет легко получать ленты. Если вам известен URI ленты, то просто используйте метод Zend_Feed::import(): Еще вы можете использовать Zend_Feed для извлечения содержимого ленты из файла или строки: В примерах выше в случае успеха возвращается объект одного из классов, расширяющих Zend_Feed_Abstract, в зависимости от типа ленты. Если посредством одного из вышеприведенных методов для импортирования была извлечена лента RSS, то будет возвращен объект Zend_Feed_Rss. Если же импортируется лента Atom, то будет возвращен объект Zend_Feed_Atom. Эти методы для импортирования будут бросать исключение Zend_Feed_Exception в случае ошибки, такой, как недоступная для чтения или плохо сформированная лента. Создание собственных лент Zend_Feed позволяет разработчикам легко создавать собственные ленты. Вам нужно просто создать массив и импортировать его в Zend_Feed. Импорт из массива может быть выполнен с помощью методов Zend_Feed::importArray() или Zend_Feed::importBuilder(). В последнем методе массив будет сформирован на лету с помощью специального источника данных, реализующего интерфейс Zend_Feed_Builder_Interface. Импортирование массива Формат массива должен соответствовать следующей структуре: 'заголовок ленты', // обязательный 'link' => 'канонический URL ленты', // обязательный 'lastUpdate' => 'время обновления', // опциональный 'published' => 'время публикации', // опциональный 'charset' => 'кодировка для текстовых данных', // обязательный 'description' => 'краткое описание ленты', // опциональный 'author' => 'автор/издатель ленты', // опциональный 'email' => 'e-mail автора', // опциональный 'webmaster' => // опциональный, игнорируется, если используется Atom 'e-mail лица, отвечающего за технические вопросы' 'copyright' => 'авторские права', // опциональный 'image' => 'URL к изображению', // опциональный 'generator' => 'генератор', // опциональный 'language' => 'язык, на котором выпускается лента', // опциональный 'ttl' => // опциональный, игнорируется, если используется Atom 'сколько минут лента может храниться в кэше ' . 'до обновления', 'rating' => // опциональный, игнорируется, если используется Atom 'рейтинг PICS', 'cloud' => array( 'domain' => 'домен, пример: rpc.sys.com', // обязательный 'port' => 'порт', // опциональный, по умолчанию 80 'path' => 'путь, пример: /RPC2', // обязательный 'registerProcedure' => 'процедура для вызова, пример: myCloud.rssPleaseNotify', // обязательный 'protocol' => 'используемый протокол, например, soap или xml-rpc' // обязательный ), // веб-сервис, поддерживающий интерфейс // rssCloud, отвечающий за уведомления об изменениях в канале // опциональный, игнорируется, если используется Atom 'textInput' => array( 'title' => 'надпись для кнопки отправки', // обязательный 'description' => 'пояснение к текстовому полю', // обязательный 'name' => 'атрибут name для текстового поля', // обязательный 'link' => 'URL скрипта, которому будет отправлены данные' // обязательный ), // текстовое поле для ввода, которое может отображаться в ленте // опциональный, игнорируется, если используется Atom 'skipHours' => array( 'часы в формате 24' // может содержать до 24 элементов, значения которых должны // находиться в диапазоне 0..23 ), // Указывает аггрегатору, в какие часы он может не обновлять канал // опциональный, игнорируется, если используется Atom 'skipDays ' => array( 'пропускаемые дни недели' // может содержать до 7 элементов, значениями которых должны быть // Monday, Tuesday, Wednesday, Thursday, Friday, Saturday или Sunday ), // Указывает аггрегатору, в какие дни недели он может не обновлять канал // опциональный, игнорируется, если используется Atom 'itunes' => array( 'author' => 'автор', // опциональный, по умолчанию используется элемент из channel 'owner' => array( 'name' => 'имя владельца', // опциональный, по умолчанию используется элемент из channel 'email' => 'e-mail владельца' // опциональный, по умолчанию используется элемент из channel ) // владелец подкаста // опциональный 'image' => 'изображение для альбома/подкаста', // опциональный, по умолчанию используется элемент из channel 'subtitle' => 'краткое описание', // опциональный, по умолчанию используется элемент из channel 'summary' => 'полное описание', // опциональный, по умолчанию используется элемент из channel 'block' => 'блокирует показ (yes|no)', // опциональный 'category' => array( array('main' => 'основная категория', // обязательный 'sub' => 'подкатегория' // опциональный ), // до 3-х элементов с парами категория/подкатегория ) // 'категории для навигации' // обязательный 'explicit' => 'индикатор наличия материалов откровенного содержания (yes|no|clean)', // опциональный 'keywords' => 'список из ключевых слов, разделенных запятой (до 12 слов)', // опциональный 'new-feed-url' => 'используется для того, чтобы сообщить iTunes о новом URL ленты' // опциональный ) // данные для iTunes // опциональный, игнорируется, если используется Atom 'entries' => array( array( 'title' => 'заголовок сообщения', // обязательный 'link' => 'URL сообщения', // обязательный 'description' => 'краткое описание', // только текст без HTML, обязательный 'guid' => 'идентификатор сообщения, если не передан, то используется URL сообщения', // опциональный 'content' => 'содержание сообщения', // может содержать HTML, опциональный 'lastUpdate' => 'дата публикации', // опциональный 'comments' => 'страница для комментариев к сообщению', // опциональный 'commentRss' => 'URL ленты для комментариев, относящихся к сообщению', // опциональный 'source' => array( 'title' => 'заголовок оригинального источника', // обязательный 'url' => 'URL оригинального источника', // обязательный ), // оригинальный источник сообщения // опциональный 'category' => array( array( 'term' => 'имя категории', // обязательный 'scheme' => 'URL ресурса с классификацией' // опциональный ), array( // данные второй категории и т.д. ) ), // список прикрепленных категорий // опциональный 'enclosure' => array( array( 'url' => 'URL вложения', // обязательный 'type' => 'тип MIME вложения', // опциональный 'length' => 'размер вложения в октетах' // опциональный ), array( // данные для второго вложения и т.д. ) ) // список вложений для сообщения // опциональный ), array( // данные второго сообщения и т.д. ) ) ); ]]> Информационные ресурсы: Спецификация RSS 2.0: RSS 2.0 Спецификация Atom: RFC 4287 Спецификация WFW: Well Formed Web Спецификация iTunes: Технические спецификации iTunes Импортирование из специального источника данных Вы можете создать экземпляр Zeed_Feed из любого источника данных, реализующего интерфейс Zend_Feed_Builder_Interface. Вам нужно только реализовать методы getHeader() и getEntries() для того, чтобы можно было использовать свой объект с Zend_Feed::importBuilder(). Простой пример - вы можете использовать компоновщик Zend_Feed_Builder, который принимает массив в своем конструкторе, выполняет некоторую проверку и затем может использоваться в методе importBuilder(). getEntries() должен возвращать массив экземпляров Zend_Feed_Builder_Entry. Zend_Feed_Builder служит только в качестве конкретной реализации для демонстрации использования. Пользователи должны создавать свои классы, реализующие интерфейс Zend_Feed_Builder_Interface. Ниже приведен пример использования Zend_Feed::importBuilder(): Дапм содержимого ленты Для того, чтобы произвести дамп экземпляра Zend_Feed_Abstract, вы можете использовать методы send() или saveXml(). saveXML(); // отправка HTTP-заголовков и вывод дампа ленты $feed->send(); ]]>