PHP,将iTunes RSS转换为JSON

时间:2019-01-24 05:53:20

标签: php json rss simplexml

我正在尝试利用simplexml将iTunes RSS Feed转换为JSON,以便更好地解析它。我遇到的问题是它没有以正确格式的JSON返回。

$feed_url = 'https://podcasts.subsplash.com/c2yjpyh/podcast.rss';
$feed_contents = file_get_contents($feed_url);
$xml = simplexml_load_string($feed_contents); 
$podcasts = json_decode(json_encode($xml));

print_r($podcasts);

是否有更好的方法来尝试此操作以获得正确的结果?

1 个答案:

答案 0 :(得分:1)

感谢IMSoP向我指出正确的方向!这花费了一些时间,但解决方案最终变得非常简单!无需尝试转换为JSON格式,只需使用SimpleXML。但是,由于命名空间的原因,它确实需要额外的一行来映射itunes:前缀。

因此,在我的iTunes feed rss中,存在以下行:xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd因此,我们仅引用此内容即可使访问值变得非常容易。这是一个简单的示例:

$rss = simplexml_load_file('https://podcasts.subsplash.com/c2yjpyh/podcast.rss'); 
foreach ($rss->channel->item as $item){

  // Now we define the map for the itunes: namespace
  $itunes = $item->children('http://www.itunes.com/dtds/podcast-1.0.dtd');

  // This is a value WITHOUT the itunes: namespace
  $title = $item->title;

  // This is a value WITH the itunes: namespace
  $author = $itunes->author;

  echo $title . '<br>';
  echo $author . '<br>';

}

我遇到的另一个小问题是获取属性,例如图像和音频链接的url。这是通过使用attributes()函数来实现的:

// Access attributes WITH itunes: namespace
$image = $itunes->image->attributes();

// Access attributes WITHOUT itunes: namespace
$audio = $item->enclosure->attributes();

// To echo these we simple add the desired attribute in `[]`:
echo $image['href'] . '<br>';
echo $audio['url'] . '<br>';