Как прочитать XML файл в WordPress?

4 мая 2012 г., 09:14:45
Просмотры: 13.8K
Голосов: 3

У меня есть ссылка на фид http://www.wdcdn.net/rss/presentation/library/client/iowa/id/128b053b916ea1f7f20233e8a26bc45d, и мне нужно прочитать все элементы фида, включая кредиты. Вот как выглядит фид:

<item>
  <title>
    <![CDATA[Dave&#39;s Lawnmower Bish Bash]]>
  </title>
  <link>http://cache.wdcdn.net/cdn/asset/view/client/filmconstruction/package/library/id/918787/format/o/h/503e4d2418da8c167f7a75d25638a35e/?7a6013aef28682d61703dff120d21b12266b54a2a637283d7d4f0a0843a6f755b7d8fa6f17d0ac1585d9530a052e29240a1a3c75fb</link>
  <guid>http://filmconstruction.wdcdn.net/l/p/?presentation=a211defdbe060c7e8f42e884b7e8f584#918787</guid>
  <description>
    <![CDATA[DW_MLA_Lamb_DavesLawnMowerBishBash_30.mov]]>
  </description>
  <pubDate>Mon, 30 Apr 2012 21:49:55 -0700</pubDate>
  <enclosure url="http://cache.wdcdn.net/cdn/asset/view/client/filmconstruction/package/library/id/918787/format/o/h/503e4d2418da8c167f7a75d25638a35e/DW_MLA_Lamb_DavesLawnMowerBishBash_30.mov?7a6013aef28682d61703dff120d21b12266b54a2a637283d7d4f0a0843a6f755b7d8fa6f17d0ac1585d9530a052e29240a1a3c75fb.mov" type="video/quicktime" length="6289971"/>
  <media:content url="http://cache.wdcdn.net/cdn/asset/view/client/filmconstruction/package/library/id/918787/format/o/h/503e4d2418da8c167f7a75d25638a35e/DW_MLA_Lamb_DavesLawnMowerBishBash_30.mov?7a6013aef28682d61703dff120d21b12266b54a2a637283d7d4f0a0843a6f755b7d8fa6f17d0ac1585d9530a052e29240a1a3c75fb.mov" fileSize="6289971" type="video/quicktime" duration="0" height="360" width="640"/>
  <media:thumbnail url="http://cache.wdcdn.net/cdn/asset/view/client/filmconstruction/package/library/id/918787/format/t/size/lg/h/87884cce4f657e643d3df42ccc623101/library_918787_lg.jpg?7a6013aef28682d61703dff120d21b12266b54a2a637283d7d4f0a0843a6f755b7d8fa6f17d0ac1585d9530a052e29240a1a3c75fb.jpg" height="360" width="640"/>
  <media:thumbnail url="http://cache.wdcdn.net/cdn/asset/view/client/filmconstruction/package/library/id/918787/format/t/size/sm/h/87884cce4f657e643d3df42ccc623101/library_918787_sm.jpg?7a6013aef28682d61703dff120d21b12266b54a2a637283d7d4f0a0843a6f755b7d8fa6f17d0ac1585d9530a052e29240a1a3c75fb.jpg" height="101" width="180"/>
  <media:credit role="client" scheme="urn:feeds-wiredrive-com:credits">
    <![CDATA[MLA]]>
  </media:credit>
  <media:credit role="agency" scheme="urn:feeds-wiredrive-com:credits">
    <![CDATA[BMF]]>
  </media:credit>
  <media:credit role="director" scheme="urn:feeds-wiredrive-com:credits">
    <![CDATA[David Wood]]>
  </media:credit>
  <media:keywords>
    <![CDATA[Humour]]>
  </media:keywords>
</item>

Я использовал этот код для чтения содержимого, но не могу получить все кредиты с его помощью:

$file   = file_get_contents('http://www.wdcdn.net/rss/presentation/library/client/iowa/id/128b053b916ea1f7f20233e8a26bc45d'); 
$xml    =  simplexml_load_string($file);

$doc = new DOMDocument();
$doc->load('http://www.wdcdn.net/rss/presentation/library/client/iowa/id/128b053b916ea1f7f20233e8a26bc45d');
$arrFeeds = array();
foreach ($doc->getElementsByTagName('item') as $node) {
        $itemRSS = array ( 
                'title' => $node->getElementsByTagName('title')->item(0)->nodeValue,                
                'guid' => $node->getElementsByTagName('guid')->item(0)->nodeValue,
                'content' => $node->getElementsByTagNameNS('http://search.yahoo.com/mrss/', 'content')->item(0)->getAttribute('url'),
                'vwidth' => $node->getElementsByTagNameNS('http://search.yahoo.com/mrss/', 'content')->item(0)->getAttribute('width'),
                'vheight' => $node->getElementsByTagNameNS('http://search.yahoo.com/mrss/', 'content')->item(0)->getAttribute('height'),
                'thumbnail' => $node->getElementsByTagNameNS('http://search.yahoo.com/mrss/', 'thumbnail')->item(0)->getAttribute('url'),
                'credit' => $node->getElementsByTagNameNS('http://search.yahoo.com/mrss/', 'credit')->item(0)->getAttribute('role') 
        );
        array_push($arrFeeds, $itemRSS);
}

Как мне прочитать все кредиты каждого элемента? Может кто-нибудь помочь найти решение этой проблемы? Заранее спасибо.

2
Комментарии

Это скорее вопрос по PHP, чем по WordPress.

fischi fischi
4 мая 2012 г. 09:23:59

Не думаю, что это следует закрывать. Автор спрашивает, как сделать это в WP. По его коду видно, что это не правильный способ в WordPress. Кто-то мог бы ответить, приведя примеры с использованием правильного WordPress-способа чтения XML-фида.

Scott Scott
4 мая 2012 г. 10:50:41
Все ответы на вопрос 2
0

WordPress включает и использует класс SimplePie для загрузки, кеширования и обработки RSS-лент. Получение данных из пространств имен с его помощью выглядит примерно так:

$feed  = fetch_feed( 'http://www.wdcdn.net/rss/presentation/library/client/iowa/id/128b053b916ea1f7f20233e8a26bc45d' );
$items = $feed->get_items();

foreach ( $items as $item ) {

    $credit = $item->get_item_tags( 'http://search.yahoo.com/mrss/', 'credit' );
    var_dump( $credit );
}

Смотрите fetch_feed() в Кодексе.

4 мая 2012 г. 10:50:40
0

в любом случае, если вы сделаете что-то подобное:

$medias = $node->getElementsByTagName('media');
foreach ( $medias as $media ) {
    $media_items[] = $media->nodeValue;
}
$itemRSS = array (
    'medias' => $media_items,
    // все, что вы сделали
);

вы должны получить свои результаты.

4 мая 2012 г. 09:27:33