2017-04-16 193 views
1

問題:如何從XML解析<media:content URL="IMG" />PHP - RSS解析器XML

好的。這就好比問爲什麼1 + 1 = 2和2 + 2 =不可用。

原始鏈接: 如何使用SimpleXML和PHP分析XML //作者:John Morris。 https://www.youtube.com/watch?v=_1F1Iq1IIS8

使用他的方法,我可以很容易地達成RSS FEED紐約時報 項目有了下面的代碼:

<!DOCTYPE html> 
<html lang="en"> 
<head> 
    <meta charset="UTF-8"> 
    <title>How to Parse XML with SimpleXML and PHP</title> 
</head> 
<body> 
<?php 
$url = 'http://rss.nytimes.com/services/xml/rss/nyt/Sports.xml'; 
$xml = simplexml_load_file($url) or die("Can't connect to URL"); 

?><pre><?php //print_r($xml); ?></pre><?php 

foreach ($xml->channel->item as $item) { 
    printf('<li><a href="%s">%s</a></li>', $item->link, $item->title); 
} 
?> 
</body> 
</html> 

得出:
斯帕克萊爾碑園?球迷說是,但他不同意
N.B.A.在法國
在職業藍球:「這讓急於醜」:更多季後賽疼痛交付被馬刺
...

到達媒體:內容不能使用simplexml_load_file使用,因爲它沒有按不要抓住任何media.content標籤。

所以......是的,我在Webb上搜索了一下。 我發現StackOverflow上這個例子:
get media:description and media:content url from xml

但使用的代碼:

<?php 
function feeds() 
{ 
    $url = "http://rss.nytimes.com/services/xml/rss/nyt/Sports.xml"; // xmld.xml contains above data 
    $feeds = file_get_contents($url); 
    $rss = simplexml_load_string($feeds); 
    foreach($rss->channel->item as $entry) { 
     if($entry->children('media', true)->content->attributes()) { 
       $md = $entry->children('media', true)->content->attributes(); 
       print_r("$md->url"); 
      } 
    } 
} 
?> 

不給我的錯誤。但也是一個空白頁面。

似乎大多數人(谷歌搜索)幾乎不知道如何真正使用媒體:內容。所以我不得不轉向Stackoverflow,希望有人能提供一個答案。我甚至不願意使用SimpleXML。

我想..是..抓住媒體:內容url圖像和使用他們在外部網站。

另外..如果可能的話。
我想將XML解析的項目放入SQL數據庫中。

回答

2

我想出了這一點:

<?php 
$url = "http://rss.nytimes.com/services/xml/rss/nyt/Sports.xml"; // xmld.xml contains above data 
$feeds = file_get_contents($url); 
$rss = simplexml_load_string($feeds); 

$items = []; 

foreach($rss->channel->item as $entry) { 
    $image = ''; 
    $image = 'N/A'; 
    $description = 'N/A'; 
    foreach ($entry->children('media', true) as $k => $v) { 
     $attributes = $v->attributes(); 

     if ($k == 'content') { 
      if (property_exists($attributes, 'url')) { 
       $image = $attributes->url; 
      } 
     } 
     if ($k == 'description') { 
      $description = $v; 
     } 
    } 

    $items[] = [ 
     'link' => $entry->link, 
     'title' => $entry->title, 
     'image' => $image, 
     'description' => $description, 
    ]; 
} 

print_r($items); 
?> 

,並提供:

Array 
(
    [0] => Array 
     (
      [link] => SimpleXMLElement Object 
       (
        [0] => https://www.nytimes.com/2017/04/17/sports/basketball/a-court-used-for-playing-hoops-since-1893-where-paris.html?partner=rss&emc=rss 
       ) 

      [title] => SimpleXMLElement Object 
       (
        [0] => A Court Used for Playing Hoops Since 1893. Where? Paris. 
       ) 

      [image] => SimpleXMLElement Object 
       (
        [0] => https://static01.nyt.com/images/2017/04/05/sports/basketball/05oldcourt10/05oldcourt10-moth-v13.jpg 
       ) 

      [description] => SimpleXMLElement Object 
       (
        [0] => The Y.M.C.A. in Paris says its basketball court, with its herringbone pattern and loose slats, is the oldest one in the world. It has been continuously functional since the building opened in 1893. 
       ) 

     ) 
..... 

而且你可以遍歷

foreach ($items as $item) { 
    printf('<img src="%s">', $item['image']); 
    printf('<a href="%s">%s</a>', $item['url'], $item['title']); 
} 

希望這有助於。

+0

謝謝對不起,我心煩意亂。我真的在網上尋找解決方案。 你的作品非常漂亮。 只是 '改爲' '的printf( '%s',$項目[ 'URL'],$項目[ '標題']);'到' '的printf( '%s',$項目[ '鏈接'] ,$ item ['title']);'' – xxxx

+0

我怎麼能達到...... 與洋基隊一起贏得兩項世界大賽冠軍的斯帕克萊爾在薩默塞特愛國者隊的球迷節期間簽名。以及? http://rss.nytimes.com/services/xml/rss/nyt/Sports.xml – xxxx

+1

我已經更新了我的答案。 @StephanieHallberg – alistaircol