PHP - RSS 解析器 XML

PHP - RSS Parser XML

问题:如何从XML解析<media:content URL="IMG" />

好的。这就像问为什么 1+1 = 2。而 2+2=Not Available。

原版Link: 如何使用简单 XML 和 PHP 解析 XML // 作者:John Morris。 https://www.youtube.com/watch?v=_1F1Iq1IIS8

使用他的方法,我可以轻松访问 RSS FEED New York Times 上的项目 使用以下代码:

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

给予:
纪念碑公园里的 Sparky Lyle?粉丝说好他不同意
N.B.A背后浓重口音的美国人。在法国
关于职业篮球:“匆忙中变得丑陋”:马刺带来更多季后赛痛苦
...

但是

要达到 media:content,您不能使用 simplexml_load_file,因为它不会获取任何 media.content 标签。

所以...是的..我在 Webb 上搜索了一下。 我在 Whosebug 上找到了这个例子:
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");
            }
    }
}
?>

没有给我任何错误。而且还是空白页。

而且似乎大多数人(谷歌搜索)几乎不知道如何真正使用 media:content 。所以我不得不求助于Whosebug,希望有人能提供答案。我什至愿意不使用 SimpleXML。

我想要的是..获取media:content url 图像并在外部站点上使用它们。

另外.. 如果可能的话。
我想将 XML 已解析的项目放入 SQL 数据库中。

我想到了这个:

<?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']);
}

希望对您有所帮助。