Главная / Zend Manual Core
Введение

Импортирование лент с помощью Zend_Feed

Zend_Feed позволяет легко получать ленты. Если вам известен URI ленты, то просто используйте метод Zend_Feed::import():

  1. $feed = Zend_Feed::import('http://feeds.example.com/feedName');

Еще вы можете использовать Zend_Feed для извлечения содержимого ленты из файла или строки:

  1. // импортирование ленты из текстового файла
  2. $feedFromFile = Zend_Feed::importFile('feed.xml');
  3.  
  4. // импортирование ленты из строки
  5. $feedFromPHP = Zend_Feed::importString($feedString);

В примерах выше в случае успеха возвращается объект одного из классов, расширяющих 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.

Импортирование массива

  1. // Импортирование ленты из массива
  2. $atomFeedFromArray = Zend_Feed::importArray($array);
  3.  
  4. // Следующая строка эквивалентна предыдущей
  5. // По умолчанию возвращается экземпляр Zend_Feed_Atom
  6. $atomFeedFromArray = Zend_Feed::importArray($array, 'atom');
  7.  
  8. // Импортирование ленты RSS из массива
  9. $rssFeedFromArray = Zend_Feed::importArray($array, 'rss');

Формат массива должен соответствовать следующей структуре:

  1.       'title'       => 'заголовок ленты', // обязательный
  2.       'link'        => 'канонический URL ленты', // обязательный
  3.       'lastUpdate'  => 'время обновления', // опциональный
  4.       'published'   => 'время публикации', // опциональный
  5.       'charset'     => 'кодировка для текстовых данных', // обязательный
  6.       'description' => 'краткое описание ленты', // опциональный
  7.       'author'      => 'автор/издатель ленты', // опциональный
  8.       'email'       => 'e-mail автора', // опциональный
  9.       'webmaster'   =>     // опциональный, игнорируется, если используется Atom
  10.                        'e-mail лица, отвечающего за технические вопросы'
  11.       'copyright'   => 'авторские права', // опциональный
  12.       'image'       => 'URL к изображению', // опциональный
  13.       'generator'   => 'генератор', // опциональный
  14.       'language'    => 'язык, на котором выпускается лента', // опциональный
  15.       'ttl'         =>     // опциональный, игнорируется, если используется Atom
  16.                        'сколько минут лента может храниться в кэше ' .
  17.                        'до обновления',
  18.       'rating'      =>     // опциональный, игнорируется, если используется Atom
  19.                        'рейтинг PICS',
  20.       'cloud'       => array(
  21.                              'domain'            => 'домен, пример: rpc.sys.com', // обязательный
  22.                              'port'              => 'порт', // опциональный, по умолчанию 80
  23.                              'path'              => 'путь, пример: /RPC2', // обязательный
  24.                              'registerProcedure' => 'процедура для вызова, пример: myCloud.rssPleaseNotify', // обязательный
  25.                              'protocol'          => 'используемый протокол, например, soap или xml-rpc' // обязательный
  26.                              ), // веб-сервис, поддерживающий интерфейс
  27.                                 // rssCloud, отвечающий за уведомления об изменениях в канале
  28.                                 // опциональный, игнорируется, если используется Atom
  29.       'textInput'   => array(
  30.                              'title'       => 'надпись для кнопки отправки', // обязательный
  31.                              'description' => 'пояснение к текстовому полю', // обязательный
  32.                              'name'        => 'атрибут name для текстового поля', // обязательный
  33.                              'link'        => 'URL скрипта, которому будет отправлены данные' // обязательный
  34.                              ), // текстовое поле для ввода, которое может отображаться в ленте
  35.                                 // опциональный, игнорируется, если используется Atom
  36.       'skipHours'   => array(
  37.                              'часы в формате 24'
  38.                              // может содержать до 24 элементов, значения которых должны
  39.                              // находиться в диапазоне 0..23
  40.                              ), // Указывает аггрегатору, в какие часы он может не обновлять канал
  41.                                 // опциональный, игнорируется, если используется Atom
  42.       'skipDays '   => array(
  43.                              'пропускаемые дни недели'
  44.                              // может содержать до 7 элементов, значениями которых должны быть
  45.                              // Monday, Tuesday, Wednesday, Thursday, Friday, Saturday или Sunday
  46.                              ), // Указывает аггрегатору, в какие дни недели он может не обновлять канал
  47.                                 // опциональный, игнорируется, если используется Atom
  48.       'itunes'      => array(
  49.                              'author'       => 'автор', // опциональный, по умолчанию используется элемент из channel
  50.                              'owner'        => array(
  51.                                                      'name' => 'имя владельца', // опциональный, по умолчанию используется элемент из channel
  52.                                                      'email' => 'e-mail владельца' // опциональный, по умолчанию используется элемент из channel
  53.                                                      ) // владелец подкаста // опциональный
  54.                              'image'        => 'изображение для альбома/подкаста', // опциональный, по умолчанию используется элемент из channel
  55.                              'subtitle'     => 'краткое описание', // опциональный, по умолчанию используется элемент из channel
  56.                              'summary'      => 'полное описание', // опциональный, по умолчанию используется элемент из channel
  57.                              'block'        => 'блокирует показ (yes|no)', // опциональный
  58.                              'category'     => array(
  59.                                                      array('main' => 'основная категория', // обязательный
  60.                                                            'sub'  => 'подкатегория' // опциональный
  61.                                                            ),
  62.                                                      // до 3-х элементов с парами категория/подкатегория
  63.                                                      ) // 'категории для навигации' // обязательный
  64.                              'explicit'     => 'индикатор наличия материалов откровенного содержания (yes|no|clean)', // опциональный
  65.                              'keywords'     => 'список из ключевых слов, разделенных запятой (до 12 слов)', // опциональный
  66.                              'new-feed-url' => 'используется для того, чтобы сообщить iTunes о новом URL ленты' // опциональный
  67.                              ) // данные для iTunes // опциональный, игнорируется, если используется Atom
  68.       'entries'     => array(
  69.                              array(
  70.                                    'title'        => 'заголовок сообщения', // обязательный
  71.                                    'link'         => 'URL сообщения', // обязательный
  72.                                    'description'  => 'краткое описание', // только текст без HTML, обязательный
  73.                                    'guid'         => 'идентификатор сообщения, если не передан, то используется URL сообщения', // опциональный
  74.                                    'content'      => 'содержание сообщения', // может содержать HTML, опциональный
  75.                                    'lastUpdate'   => 'дата публикации', // опциональный
  76.                                    'comments'     => 'страница для комментариев к сообщению', // опциональный
  77.                                    'commentRss'   => 'URL ленты для комментариев, относящихся к сообщению', // опциональный
  78.                                    'source'       => array(
  79.                                                            'title' => 'заголовок оригинального источника', // обязательный
  80.                                                            'url' => 'URL оригинального источника', // обязательный
  81.                                                            ), // оригинальный источник сообщения // опциональный
  82.                                    'category'     => array(
  83.                                                            array(
  84.                                                                  'term' => 'имя категории', // обязательный
  85.                                                                  'scheme' => 'URL ресурса с классификацией' // опциональный
  86.                                                                  ),
  87.                                                            array(
  88.                                                                  // данные второй категории и т.д.
  89.                                                                  )
  90.                                                            ), // список прикрепленных категорий // опциональный
  91.                                    'enclosure'    => array(
  92.                                                            array(
  93.                                                                  'url' => 'URL вложения', // обязательный
  94.                                                                  'type' => 'тип MIME вложения', // опциональный
  95.                                                                  'length' => 'размер вложения в октетах' // опциональный
  96.                                                                  ),
  97.                                                            array(
  98.                                                                  // данные для второго вложения и т.д.
  99.                                                                  )
  100.                                                            ) // список вложений для сообщения // опциональный
  101.                                    ),
  102.                              array(
  103.                                    // данные второго сообщения и т.д.
  104.                                    )
  105.                              )
  106.        );

Информационные ресурсы:

Импортирование из специального источника данных

Вы можете создать экземпляр Zeed_Feed из любого источника данных, реализующего интерфейс Zend_Feed_Builder_Interface. Вам нужно только реализовать методы getHeader() и getEntries() для того, чтобы можно было использовать свой объект с Zend_Feed::importBuilder(). Простой пример - вы можете использовать компоновщик Zend_Feed_Builder, который принимает массив в своем конструкторе, выполняет некоторую проверку и затем может использоваться в методе importBuilder(). getEntries() должен возвращать массив экземпляров Zend_Feed_Builder_Entry.

Note: Zend_Feed_Builder служит только в качестве конкретной реализации для демонстрации использования. Пользователи должны создавать свои классы, реализующие интерфейс Zend_Feed_Builder_Interface.

Ниже приведен пример использования Zend_Feed::importBuilder():

  1. // Импортирование ленты из специального созданного ресурса-компоновщика
  2. $atomFeedFromArray =
  3.     Zend_Feed::importBuilder(new Zend_Feed_Builder($array));
  4.  
  5. // Следующая строка эквивалентна предыдущей.
  6. // По умолчанию возвращается экземпляр Zend_Feed_Atom
  7. $atomFeedFromArray =
  8.     Zend_Feed::importArray(new Zend_Feed_Builder($array), 'atom');
  9.  
  10. // Импортирование RSS-ленты из специально созданного ресурса-компоновщика
  11. $rssFeedFromArray =
  12.     Zend_Feed::importArray(new Zend_Feed_Builder($array), 'rss');

Дапм содержимого ленты

Для того, чтобы произвести дамп экземпляра Zend_Feed_Abstract, вы можете использовать методы send() или saveXml().

  1. assert($feed instanceof Zend_Feed_Abstract);
  2.  
  3. // вывод дампа ленты
  4. print $feed->saveXML();
  5.  
  6. // отправка HTTP-заголовков и вывод дампа ленты
  7. $feed->send();

Введение