PHP,将 iTunes RSS 转换为 JSON

PHP, Convert iTunes RSS to JSON

我正在尝试利用 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);

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

感谢 IMSoP 为我指明了正确的方向!这需要一些研究,但解决方案最终非常简单!不要尝试转换为 JSON 格式,只需使用 SimpleXML。但是,由于命名空间,它确实需要额外的一行来映射 itunes:prefix.

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

$rss = simplexml_load_file('https://podcasts.example.com/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>';