Кажется, я просто не могу это решить. Я хочу получить медиа: thumbnail из файла RSS ( http://feeds.bbci.co.uk/news/rss.xml ).
Я провел некоторое исследование и попытался включить идеи из https://stackoverflow.com/questions/6707315/getting-xml-attribute-from-mediathumbnail-in-bbc-rss-feed и из других источников.
Это то, что я получил:
$source_link = "http://feeds.bbci.co.uk/news/rss.xml"; $source_xml = simplexml_load_file($source_link); $namespace = "http://search.yahoo.com/mrss/"; foreach ($source_xml->channel->item as $rss) { $title = $rss->title; $description = $rss->description; $link = $rss->link; $date_raw = $rss->pubDate; $date = date("Ymj G:i:s", strtotime($date_raw)); $image = $rss->attributes($namespace); print_r($image); }
Когда я запускаю сценарий, все, что я вижу, это белая страница. Если я эхо или print_r любой из других переменных, то он работает как шарм. Это всего лишь $ image, который создает проблемы. Почему это не работает? Thx за любую помощь!
Хорошо, теперь это работает. Я заменил
$image = $rss->attributes($namespace);
с
$image = $rss->children($namespace)->thumbnail[1]->attributes(); $image_link = $image['url'];
и теперь он работает как шарм.
$image = $rss->attributes($namespace);
Это говорит: «Дайте мне все атрибуты этого <item>
которые находятся в пространстве имен мультимедиа ». В элементе элемента нет атрибутов (гораздо меньше, чем в пространстве имен мультимедиа), поэтому это ничего не возвращает.
Вы хотите это:
$firstimage = $rss->children($namespace)->thumbnail[0];
BTW, когда вы используете SimpleXML, вам нужно быть осторожным, чтобы придать вашему SimpleXMLElements строку, когда вам нужно текстовое значение элемента. Что-то вроде $rss->title
– это SimpleXMLElement
, а не строка.