解析PHP中的Atom Feed

时间:2017-05-27 15:22:53

标签: php xml rss atom-feed

我编写了以下PHP来解析RSS和Atom提要。这种方法与我见过的其他方法不同,它只是在解析的XML中检查项目数组中的几个位置。

function LoadItems($id, $feed)
{
    /* Load items into global $rssItems array */
    $rssItems = array();
    try {
        $rss = simplexml_load_file($feed);
    } catch (Exception $e) {
        echo "<div>Load failed \"" . $feed . "\"</div>\n";
        return;
    }
    if (!($rss->channel->item))
        /* This appears to be where Atom feed item lists are parsed to */
        $items = $rss->item;
    else
        $items = $rss->channel->item;

    foreach ($items as $item) {
        $item = array(
                "id" => $id,
                "feedTitle" => $rss->channel->title,
                "feedLink" => $rss->channel->link,
                "itemTitle" => $item->title,
                "itemPubDate" => $item->pubDate,
                "itemLink" => $item->link,
                "itemDesc" => RemoveLinks($item->description));
        array_push($rssItems, $item);
    }
    /*
     * Sort all items from all feeds in reverse chronological
     * order
     */
    usort($rssItems, 'RSS_CMP');

    return $rssItems;
}

我的问题是这个。我偶然发现了这个。我只是查看解析后的XML文件的print_r输出,并注意到RSS和Atom的不同结构。这是犹太教徒吗?我的意思是,simplexml_load_file是否会将这些项目放在这个地方用于所有原子提要?此解决方案是否适用于使用simplexml_load_file()解析的所有原子提要?

1 个答案:

答案 0 :(得分:0)

正如您已经注意到的,RSS和Atom是两种不同的标准。它们都使用XML,但结构不同。 php中的simplexml_load_file非常易于使用,您可以检查Feed的特定部分(例如原子中的channel或以feed开头的rss。

但是如果你想对饲料数据多做一点,我建议你使用一些支持rss和atom的libary,这样你就不需要搞砸差异。

e.g。使用simplepi,您可以轻松访问Feed数据,并且可以使用这两种标准(有关帮助,请参阅wiki