使用PHP的RSS解析什么都没有?

时间:2012-09-04 15:22:48

标签: php parsing rss

我正在尝试使用php解析rss-feed,但它没有给我任何帮助。正如你所看到的,我试图回应$ doc和$ itemRSS数组,它没有给我任何东西和“成功!”当从未到达数组中的项目0时。

如果有人能说“你有没有想过[愚蠢的错误]?”,那么我会很激动,所以请把这个问题视为一个菜鸟。谢谢!

  $doc = new DOMDocument();
  $doc->load('http://pipes.yahoo.com/pipes/pipe.run?_id=566903fd393811762dc74aadc701badd&_render=rss');
  $arrFeeds = array();
  foreach ($doc->getElementsByTagName('item') as $node) {
    $itemRSS = array ( 
      'guid' => $node->getElementsByTagName('guid')->item(0)->nodeValue
      );
    array_push($arrFeeds, $itemRSS);
  }

    if ($itemRSS[0] != NULL) {

        echo 'Success!';

    }

echo $itemRSS;
echo $doc; 

由此我的意思是该页面完全空白。没错,没什么。

更新: 显然我的webhost已禁用allow_url_fopen,所以我必须找到另一种方法来执行此操作。 叹息

3 个答案:

答案 0 :(得分:0)

将这些行添加到脚本的末尾并进行检查。

var_dump($itemRSS);
var_dump($arrFeeds);
var_dump($doc);

问题是知道您没有正确显示信息。

答案 1 :(得分:0)

除了尝试回显一个对象和一个数组之外,脚本没有问题,print_r $ arrFeeds你可以看到所有内容

答案 2 :(得分:0)

正如其他答案中所提到的,你做了一些错误的事情,例如尝试回显数组和对象。出于某种原因,你也没有在$ arrFeeds中获得任何结果,尽管你应该这样做。

更简单的方法是将Feed的render方法更改为JSON:http://pipes.yahoo.com/pipes/pipe.run?_id=566903fd393811762dc74aadc701badd&_render=json

然后你可以使用json_decode()来获取所有项目的数组:

$contents = json_decode(file_get_contents('http://pipes.yahoo.com/pipes/pipe.run?_id=566903fd393811762dc74aadc701badd&_render=json'));
foreach($contents['items'] as $item) {
  // use $item['title'], $item['description'] etc... 
}

请注意,您只能回显字符串,整数等,而不是数组或对象等结构化数据。

为了简化操作,您可以在浏览器中打开该URL并分析JSON内容@ http://json.parser.online.fr/ - 然后您将看到阵列的结构。

JSON是一种更容易使用IMO的格式。

编辑:

由于file_get_contents()被禁用,您可以使用cURL(应该安装在大多数服务器上,尤其是禁用allow_url_fopen时):

function file_get_contents_curl($url) {
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); //Set curl to return the data instead of printing it to the browser.
    curl_setopt($ch, CURLOPT_URL, $url);
    $data = curl_exec($ch);
    curl_close($ch);

    return $data;
}