使用php获取wordpress上的最新博客文章?

时间:2010-06-19 12:01:39

标签: php feeds domdocument

我用这个php来获取我博客的最新帖子:

function read_rss($display=0,$url='') {
    $doc = new DOMDocument();
    $doc->load($url);
    $itemArr = array();

    foreach ($doc->getElementsByTagName('item') as $node) {
        if ($display == 0) {
            break;
        }

        $itemRSS = array (
            'title'       => $node->getElementsByTagName('title')->item(0)->nodeValue,
            'description' => $node->getElementsByTagName('description')->item(0)->nodeValue,
            'link'        => $node->getElementsByTagName('link')->item(0)->nodeValue,
        );

         array_push($itemArr, $itemRSS);

        $display--;
    }
    return $itemArr;
}

我从教程中学到了这一点,因为我不确定如何完成这项任务。但是它有效,但我一直在错误日志中打印出这个错误:

[12-Jun-2010 06:13:36] PHP Warning:  DOMDocument::load() [<a href='domdocument.load'>domdocument.load</a>]: Document is empty in http://www.prettyklicks.com/blog/?feed=rss2, line: 1 in public_html/includes/functions.php on line 153
[12-Jun-2010 06:13:36] PHP Warning:  DOMDocument::load() [<a href='domdocument.load'>domdocument.load</a>]: Start tag expected, '&lt;' not found in http://www.prettyklicks.com/blog/?feed=rss2, line: 1 in public_html/includes/functions.php on line 153

有什么想法吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

我有同样的问题,这是解决方案:

替换行:

  

$ doc-&GT;负载($ URL);

  

$ doc-&gt; loadXML(preg_replace(“/&gt; \ s +&lt;”,file_get_contents($ url)));

这样做是将url加载到字符串中,去除标记之间的所有空格,然后将其传递给DOMDocument对象进行加载。

为什么空白很重要?我不确定但似乎WordPress RSS提要包含空格以使其很好地缩进,但这会干扰DOMDocument的解析器并使其看起来像是缺少标记。

归功于http://netweblogic.com/php/domdocument-whitespace-php/,我找到了答案;他们为不同的情况解决了同样的问题。

奇怪(我不明白),我的代码在我的开发服务器上没有解决方法,但在生产服务器上却没有。我不确定为什么,但它必须与版本和&amp; Apache / PHP / WordPress的配置。

无论如何,我希望这有所帮助,现在还为时不晚!

保罗。