Parse iTunes RSS Atom с PHP?

Пытается разобрать фид iTunes Atom с помощью PHP-скрипта. Если вы заходите в RSS-генератор iTunes , вы можете создать Atom-канал следующим образом:

http://itunes.apple.com/us/rss/topsongs/limit=10/genre=16/explicit=true/xml

который дает результат подачи RSS-сообщений iTunes следующим образом:

<?xml version="1.0" encoding="utf-8"?> <feed xmlns:im="http://itunes.apple.com/rss" xmlns="http://www.w3.org/2005/Atom" xml:lang="en"> <id>http://itunes.apple.com/us/rss/topsongs/limit=10/genre=16/explicit=true/xml</id><title>iTunes Store: Top Songs in Soundtrack</title><updated>2012-04-01T07:22:41-07:00</updated><link rel="alternate" type="text/html" href="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewTop?id=17&amp;popId=1"/><link rel="self" href="http://itunes.apple.com/us/rss/topsongs/limit=10/genre=16/explicit=true/xml"/><icon>http://phobos.apple.com/favicon.ico</icon><author><name>iTunes Store</name><uri>http://www.apple.com/itunes/</uri></author><rights>Copyright 2008 Apple Inc.</rights> <entry> <updated>2012-04-01T07:22:41-07:00</updated> <id im:id="509605055">http://itunes.apple.com/us/album/eyes-open/id509605019?i=509605055&amp;uo=2</id> <title>Eyes Open - Taylor Swift</title> <im:name>Eyes Open</im:name> <link rel="alternate" type="text/html" href="http://itunes.apple.com/us/album/eyes-open/id509605019?i=509605055&amp;uo=2"/> <im:contentType term="Music" label="Music"><im:contentType term="Track" label="Track"/></im:contentType> <category term="Soundtrack" scheme="http://itunes.apple.com/us/genre/music-soundtrack/id16?uo=2" label="Soundtrack"/> <link title="Preview" rel="enclosure" type="audio/x-m4a" href="http://a2.mzstatic.com/us/r1000/116/Music/88/70/a6/mzi.gcauwkkw.aac.p.m4a" im:assetType="preview"><im:duration>30000</im:duration></link> <im:artist href="http://itunes.apple.com/us/artist/taylor-swift/id159260351?uo=2">Taylor Swift</im:artist> <im:price amount="1.29000" currency="USD">$1.29</im:price> <im:image height="55">http://a3.mzstatic.com/us/r1000/069/Music/v4/15/59/19/15591949-a525-99e8-0c50-45697b0ec78b/UMG_cvrart_00602527969206_01_RGB72_1200x1200_12UMGIM10247.55x55-70.jpg</im:image> <im:image height="60">http://a5.mzstatic.com/us/r1000/069/Music/v4/15/59/19/15591949-a525-99e8-0c50-45697b0ec78b/UMG_cvrart_00602527969206_01_RGB72_1200x1200_12UMGIM10247.60x60-50.jpg</im:image> <im:image height="170">http://a3.mzstatic.com/us/r1000/069/Music/v4/15/59/19/15591949-a525-99e8-0c50-45697b0ec78b/UMG_cvrart_00602527969206_01_RGB72_1200x1200_12UMGIM10247.170x170-75.jpg</im:image> <rights>2012 Universal Republic Records, a division of UMG Recordings, Inc.</rights> <im:releaseDate label="March 20, 2012">2012-03-20T00:00:00-07:00</im:releaseDate> <im:collection><im:name>The Hunger Games (Songs from District 12 and Beyond)</im:name><link rel="alternate" type="text/html" href="http://itunes.apple.com/us/album/hunger-games-songs-from-district/id509605019?uo=2"/><im:contentType term="Music" label="Music"><im:contentType term="Album" label="Album"/></im:contentType></im:collection> 

(и т.д…)

С помощью PHP-скрипта я могу получить результаты для таких вещей, как title , id , im: image для каждой [записи] для использования в выводе скрипта. Мне нужно получить URL-адрес из одной из ссылок . Специально мне нужен URL-адрес из ссылки «Предварительный просмотр»:

 <link title="Preview" rel="enclosure" type="audio/x-m4a" href="http://a2.mzstatic.com/us/r1000/116/Music/88/70/a6/mzi.gcauwkkw.aac.p.m4a" im:assetType="preview"><im:duration>30000</im:duration></link> 

В этом случае нам понадобится ссылка a2.mzstatic.com/us/r1000/116/Music/88/70/a6/mzi.gcauwkkw.aac.p.m4a для использования в результатах скрипта для каждого из 10 записей ,

Как я могу захватить этот href для аудиофайла .m4a аудиофайла «Предварительный просмотр» в вышеуказанном фиде Atom?

Вот часть скрипта PHP, где мы получаем содержимое URL- адреса iTunes Atom, просматриваем 10 результатов и генерируем HTML для каждой записи через $ rssresults, который вызывается в шаблоне сайта.

  $string = file_get_contents('http://itunes.apple.com/us/rss/topsongs/limit=10/genre=16/explicit=true/xml'); // Remove the colon ":" in the <xxx:yyy> to be <xxxyyy> $string = preg_replace("/(<\/?)(\w+):([^>]*>)/", "$1$2$3", $string); if ($f = @fopen($cache_file, 'w')) { fwrite ($f, $string, strlen($string)); fclose($f); } } $xml = simplexml_load_string($string); // Output $rssresults = ''; $count = 1; $max = 11; foreach ($xml->entry as $val) { if ($count < $max) { $rssresults .= ' <a href="'.$val->id.'" title="'.$val->title.'"><img src="'.$val->imimage[2].'" alt="'.$val->title.'"></a> // .m4a preview url? <div><a href=" ">Preview</div> <div><strong>'.$count.'. <a href="'.$val->id.'" title="'.$val->title.'">'.$val->title.'</a></strong></div> <div> from '.$val->imcollection->imname.'</div>; } $count++; } 

Любые идеи о том, как добавить «.m4a preview url» к указанному выше сценарию для каждой записи?

Цените любую помощь.

В вашем цикле foreach try $val->link[1]["href"] даст вам URL-адрес

 foreach ($xml->entry as $val) { // echo the link of Preview echo $val->link[1]["href"]; } 

Объяснение:
Поскольку есть несколько link запись, вы можете получить к ним доступ по индексу массива. Таким образом, индекс 1 используется для доступа ко второй link . Каждому атрибуту элемента можно получить доступ по его имени в качестве ключа к элементу. Следовательно, $val->link[1]["href"] даст вам http://a2.mzstatic.com/us/r1000/116/Music/88/70/a6/mzi.gcauwkkw.aac.p.m4a

Гадюка-7