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