Cum să citești un fișier XML în WordPress?

4 mai 2012, 09:14:45
Vizualizări: 13.8K
Voturi: 3

Am un link de feed http://www.wdcdn.net/rss/presentation/library/client/iowa/id/128b053b916ea1f7f20233e8a26bc45d și trebuie să citesc toate elementele feed-ului, inclusiv creditele. Iată cum arată feed-ul:

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

Am folosit acest cod pentru a citi conținutul, dar nu pot obține toate creditele cu acest cod:

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

Cum pot citi toate creditele pentru fiecare element? Poate cineva să mă ajute să găsesc o soluție pentru aceasta? Mulțumesc anticipat

2
Comentarii

Aceasta este mai degrabă o întrebare PHP decât una despre WordPress.

fischi fischi
4 mai 2012 09:23:59

Nu cred că această întrebare ar trebui închisă. Cel care a pus întrebarea întreabă cum să o facă în WP. Din codul său se poate observa că nu este modalitatea corectă în WP. Cineva ar putea răspunde oferind exemple folosind metoda corectă WordPress pentru citirea unui flux XML.

Scott Scott
4 mai 2012 10:50:41
Toate răspunsurile la întrebare 2
0

WordPress include și utilizează clasa SimplePie pentru descărcarea, stocarea în cache și procesarea fluxurilor RSS. Preluarea datelor cu spații de nume ar arăta astfel:

$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ți fetch_feed() în Codex.

4 mai 2012 10:50:40
0

oricum, dacă faci ceva de genul acesta:

$medias = $node->getElementsByTagName('media');
foreach ( $medias as $media ) {
    $media_items[] = $media->nodeValue;
}
$itemRSS = array (
    'medias' => $media_items,
    // toate celelalte date pe care le-ai introdus
);

ar trebui să obții rezultatele dorite.

4 mai 2012 09:27:33