Получение media:thumbnail из XML

Я просто не могу решить эту проблему. Я хочу получить media: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("Y-m-j G:i:s", strtotime($date_raw));
    $image          = $rss->attributes($namespace);

    print_r($image);
}

Когда я запускаю скрипт, я вижу только белую страницу. Если я эхо или print_r любую другую переменную, то это работает как шарм. Это просто $image, который создает проблемы. Почему это не работает? Спасибо за любую помощь!


person Tomi Seus    schedule 16.12.2011    source источник
comment
В этом вопросе, на который вы ссылаетесь, есть ответ. Вы даже можете скопировать его код!   -  person Francis Avila    schedule 16.12.2011


Ответы (3)


Хорошо, теперь это работает. я заменил

$image = $rss->attributes($namespace); 

с участием

$image = $rss->children($namespace)->thumbnail[1]->attributes();
$image_link = $image['url'];

и теперь это работает как шарм.

person Tomi Seus    schedule 17.12.2011

$image          = $rss->attributes($namespace);

Это говорит: «Дайте мне все атрибуты этого элемента <item>, которые находятся в пространстве имен media». В элементе item нет атрибутов (тем более в пространстве имен мультимедиа), поэтому это ничего не возвращает.

Вы хотите это:

$firstimage = $rss->children($namespace)->thumbnail[0];

Кстати, когда вы используете SimpleXML, вам нужно быть осторожным, чтобы преобразовать SimpleXMLElements в строку, когда вам нужно текстовое значение элемента. Что-то вроде $rss->title — это SimpleXMLElement, а не строка.

person Francis Avila    schedule 16.12.2011
comment
Хорошо, я изменил $image = $rss-›attributes($namespace); to $image = $rss-›children($namespace)-›thumbnail[0]; но я все еще не могу ничего повторить или распечатать (веб-сайт остается пустым). Я что-то упустил здесь? - person Tomi Seus; 17.12.2011

Основа из этого блога с заголовком сообщения Обработка медиа: миниатюра в RSS-каналах с помощью php.

Решение, которое я нашел, работает лучше всего, просто загружает файл xml в виде строки, затем находит и заменяет «media:thumbnail» правильно отформатированным «thumbnail» и, наконец, преобразует его обратно в xml с помощью simplexml_load_string:

$xSource = 'http://feeds.bbci.co.uk/news/rss.xml';
$xsourcefile = file_get_contents( $xSource );

$xsourcefile = str_replace("media:thumbnail","thumbnail",$xsourcefile);
$xml = simplexml_load_string( $xsourcefile );
echo $row['xtitle'] . '<BR>';

foreach ($xml->channel->item as $item) {
echo ':' . $item->title . '<BR>';
echo ':' . $item->thumbnail['url'] . '<BR>';
}
person Kevin Perdana    schedule 30.05.2018