| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298 |
- <sect1 id="zend.feed.importing">
- <title>Импортирование лент с помощью Zend_Feed</title>
- <para>
- <code>Zend_Feed</code> позволяет легко получать ленты.
- Если вам известен URI ленты, то просто используйте метод
- <code>Zend_Feed::import()</code>:
- </para>
- <programlisting language="php"><![CDATA[
- $feed = Zend_Feed::import('http://feeds.example.com/feedName');
- ]]>
- </programlisting>
- <para>
- Еще вы можете использовать <code>Zend_Feed</code> для извлечения содержимого
- ленты из файла или строки:
- </para>
- <programlisting language="php"><![CDATA[
- // импортирование ленты из текстового файла
- $feedFromFile = Zend_Feed::importFile('feed.xml');
- // импортирование ленты из строки
- $feedFromPHP = Zend_Feed::importString($feedString);
- ]]>
- </programlisting>
- <para>
- В примерах выше в случае успеха возвращается
- объект одного из классов, расширяющих <code>Zend_Feed_Abstract</code>, в
- зависимости от типа ленты. Если посредством одного из вышеприведенных
- методов для импортирования была извлечена лента RSS, то будет возвращен объект
- <code>Zend_Feed_Rss</code>. Если же импортируется лента Atom, то
- будет возвращен объект <code>Zend_Feed_Atom</code>. Эти методы для импортирования
- будут бросать исключение <code>Zend_Feed_Exception</code> в случае ошибки,
- такой, как недоступная для чтения или плохо сформированная лента.
- </para>
- <sect2 id="zend.feed.importing.custom">
- <title>Создание собственных лент</title>
- <para>
- <code>Zend_Feed</code> позволяет разработчикам легко создавать
- собственные ленты. Вам нужно просто создать массив и импортировать
- его в Zend_Feed. Импорт из массива может быть выполнен с помощью
- методов <code>Zend_Feed::importArray()</code> или
- <code>Zend_Feed::importBuilder()</code>. В последнем методе
- массив будет сформирован на лету с помощью специального
- источника данных, реализующего интерфейс
- <code>Zend_Feed_Builder_Interface</code>.
- </para>
- <sect3 id="zend.feed.importing.custom.importarray">
- <title>Импортирование массива</title>
- <programlisting language="php"><![CDATA[
- // Импортирование ленты из массива
- $atomFeedFromArray = Zend_Feed::importArray($array);
- // Следующая строка эквивалентна предыдущей
- // По умолчанию возвращается экземпляр Zend_Feed_Atom
- $atomFeedFromArray = Zend_Feed::importArray($array, 'atom');
- // Импортирование ленты RSS из массива
- $rssFeedFromArray = Zend_Feed::importArray($array, 'rss');
- ]]>
- </programlisting>
- <para>
- Формат массива должен соответствовать следующей структуре:
- </para>
- <programlisting language="php"><![CDATA[
- array(
- 'title' => 'заголовок ленты', // обязательный
- '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(
- // данные второго сообщения и т.д.
- )
- )
- );
- ]]>
- </programlisting>
- <para>
- Информационные ресурсы:
- <itemizedlist>
- <listitem>
- <para>
- Спецификация RSS 2.0: <ulink url="http://blogs.law.harvard.edu/tech/rss">RSS 2.0</ulink>
- </para>
- </listitem>
- <listitem>
- <para>
- Спецификация Atom: <ulink url="http://tools.ietf.org/html/rfc4287">RFC 4287</ulink>
- </para>
- </listitem>
- <listitem>
- <para>
- Спецификация WFW: <ulink url="http://wellformedweb.org/news/wfw_namespace_elements">Well
- Formed Web</ulink>
- </para>
- </listitem>
- <listitem>
- <para>
- Спецификация iTunes:
- <ulink url="http://www.apple.com/itunes/store/podcaststechspecs.html">Технические спецификации iTunes</ulink>
- </para>
- </listitem>
- </itemizedlist>
- </para>
- </sect3>
- <sect3 id="zend.feed.importing.custom.importbuilder">
- <title>Импортирование из специального источника данных</title>
- <para>
- Вы можете создать экземпляр Zeed_Feed из любого источника
- данных, реализующего интерфейс
- <code>Zend_Feed_Builder_Interface</code>. Вам нужно только
- реализовать методы <code>getHeader()</code> и
- <code>getEntries()</code> для того, чтобы можно было
- использовать свой объект с
- <code>Zend_Feed::importBuilder()</code>. Простой пример -
- вы можете использовать компоновщик
- <code>Zend_Feed_Builder</code>, который принимает массив в
- своем конструкторе, выполняет
- некоторую проверку и затем может использоваться в методе
- <code>importBuilder()</code>. <code>getEntries()</code>
- должен возвращать массив экземпляров
- <code>Zend_Feed_Builder_Entry</code>.
- </para>
- <note>
- <para>
- <code>Zend_Feed_Builder</code> служит только в качестве
- конкретной реализации для демонстрации использования.
- Пользователи должны создавать свои классы, реализующие
- интерфейс <code>Zend_Feed_Builder_Interface</code>.
- </para>
- </note>
- <para>
- Ниже приведен пример использования
- <code>Zend_Feed::importBuilder()</code>:
- </para>
- <programlisting language="php"><![CDATA[
- // Импортирование ленты из специального созданного ресурса-компоновщика
- $atomFeedFromArray =
- Zend_Feed::importBuilder(new Zend_Feed_Builder($array));
- // Следующая строка эквивалентна предыдущей.
- // По умолчанию возвращается экземпляр Zend_Feed_Atom
- $atomFeedFromArray =
- Zend_Feed::importArray(new Zend_Feed_Builder($array), 'atom');
- // Импортирование RSS-ленты из специально созданного ресурса-компоновщика
- $rssFeedFromArray =
- Zend_Feed::importArray(new Zend_Feed_Builder($array), 'rss');
- ]]>
- </programlisting>
- </sect3>
- <sect3 id="zend.feed.importing.custom.dump">
- <title>Дапм содержимого ленты</title>
- <para>
- Для того, чтобы произвести дамп экземпляра
- <code>Zend_Feed_Abstract</code>, вы можете использовать методы
- <code>send()</code> или <code>saveXml()</code>.
- </para>
- <programlisting language="php">
- <![CDATA[
- assert($feed instanceof Zend_Feed_Abstract);
- // вывод дампа ленты
- print $feed->saveXML();
- // отправка HTTP-заголовков и вывод дампа ленты
- $feed->send();
- ]]>
- </programlisting>
- </sect3>
- </sect2>
- </sect1>
- <!--
- vim:se ts=4 sw=4 et:
- -->
|