Cómo leer un archivo XML en WordPress

4 may 2012, 09:14:45
Vistas: 13.8K
Votos: 3

Tengo un enlace de feed http://www.wdcdn.net/rss/presentation/library/client/iowa/id/128b053b916ea1f7f20233e8a26bc45d y necesito leer todos los elementos del feed incluyendo los créditos. Así es como se muestra el feed:

<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>

He usado este código para leer el contenido pero no puedo obtener todos los créditos con este código:

$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);
}

¿Cómo puedo leer todos los créditos de cada elemento? ¿Alguien puede ayudarme a encontrar una solución para esto? Gracias de antemano.

2
Comentarios

Esto es más una pregunta sobre PHP que sobre WordPress.

fischi fischi
4 may 2012 09:23:59

No creo que esto deba cerrarse. El OP está preguntando cómo hacerlo en WP. Por su código se puede ver que no es la forma correcta en WP. Alguien podría responder esto dando ejemplos usando la forma correcta en WP de leer un feed XML.

Scott Scott
4 may 2012 10:50:41
Todas las respuestas a la pregunta 2
0

WordPress incluye y encapsula la clase SimplePie para la descarga, almacenamiento en caché y procesamiento de feeds. Obtener datos con espacios de nombres sería algo así:

$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 );
}

Consulta fetch_feed() en el Codex.

4 may 2012 10:50:40
0

de todas formas, si haces algo como esto:

$medias = $node->getElementsByTagName('media');
foreach ( $medias as $media ) {
    $media_items[] = $media->nodeValue;
}
$itemRSS = array (
    'medias' => $media_items,
    // todo lo que hayas hecho
);

deberías obtener tus resultados.

4 may 2012 09:27:33