【问题标题】:Parsing Atom Feed in PHP在 PHP 中解析 A​​tom 提要
【发布时间】:2017-10-28 08:25:00
【问题描述】:

我编写了以下 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() 解析的原子提要?

【问题讨论】:

    标签: php xml rss atom-feed


    【解决方案1】:

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

    但是如果你想对提要数据做更多的事情,我建议你使用一些支持 rss 和 atom 的库,这样你就不需要搞乱这些差异了。

    例如使用simplepi,访问提要数据非常容易,并且可以处理这两种标准(有关帮助,请参阅wiki

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-09-17
      • 1970-01-01
      • 2012-02-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多