PHP, конвертировать iTunes RSS в JSON - PullRequest
0 голосов
/ 24 января 2019

Я пытаюсь использовать simplexml для преобразования RSS-канала iTunes в 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 голосов
/ 24 января 2019

Спасибо IMSoP за то, что указал мне правильное направление! Это заняло немного изучения, но решение оказалось очень простым! Вместо того, чтобы пытаться преобразовать в формат JSON, просто используйте SimpleXML. Однако из-за пространств имен для сопоставления itunes требуется дополнительная строка: префикс.

Итак, в моем фиде iTunes есть следующая строка: 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>';
...