Получение изображений из каналов RSS / Atom с помощью сороки RSS - PullRequest
1 голос
/ 16 августа 2010

Я использую php и сорока и хотел бы общий способ обнаружения изображений в элементе фида. Я знаю, что некоторые веб-сайты размещают изображения внутри тега enclosure, другие, например, images [rss] , а некоторые просто добавляют его в описание. Есть ли кто-нибудь с общей функцией для обнаружения, если у rss-элемента есть изображение и извлечение URL-адреса изображения после его анализа сорока?

Я думаю, что регулярные выражения понадобятся для извлечения из описания, но я новичок в этом. Пожалуйста, помогите, если можете.

1 Ответ

5 голосов
/ 21 ноября 2010

Я потратил целую вечность, пытаясь найти способ отображения изображений в RSS с помощью Сороки, и в конце концов мне пришлось изучить код, чтобы выяснить, как заставить его работать.

Как вы и сказали, причина, по которой Сорока не берет изображения в элементе, заключается в том, что они указаны с помощью тега 'enclosure', который является пустым тегом, в котором информация содержится в атрибутах, например,

<enclosure url="http://www.mysite.com/myphoto.jpg" length="14478" type="image/jpeg" />

В качестве хака, чтобы заставить его работать быстро для меня, я добавил следующие строки кода в rss_parse.inc:

.
    function feed_start_element($p, $element, &$attrs) {
   ...
   if ( $el == 'channel' )
   {
      $this->inchannel = true;
   }
   ...

   // START EDIT - add this elseif condition to the if ($el=xxx) statement.
   // Checks if element is enclosure tag, and if so store the attribute values
   elseif ($el == 'enclosure' ) {
      if ( isset($attrs['url']) ) {
         $this->current_item['enclosure_url'] = $attrs['url'];
         $this->current_item['enclosure_type'] = $attrs['type'];
         $this->current_item['enclosure_length'] = $attrs['length'];
      }
   }
   // END EDIT
   ...
}

URL-адрес изображения находится в $ myRSSitem ['enclosure_url'], а размер - в $ myRSSitem ['enclosure_length']. Обратите внимание, что теги enclosure могут ссылаться на многие типы носителей, поэтому сначала проверьте, является ли тип на самом деле изображением, проверив $ myRSSitem ['enclosure_type'].

Возможно, у кого-то еще есть лучшее предложение, и я уверен, что это можно было бы сделать более элегантно, чтобы выбрать атрибуты из других пустых тегов, но мне нужно было быстрое исправление (сжатые сроки), но я надеюсь, что это может помочь кому-то другому в затруднении !

...