Trovare l'URL per i feed podcast da un ID iTunes. (API ITMS)
Domanda
Sto guardando un modo per trasformare un ID podcast di iTunes nel feed RSS che serve il produttore di podcast.
Sono a conoscenza del Generatore RSS, che può essere utilizzato per generare un feed di collegamenti ai podcast, ma questi collegamenti sono alle pagine HTML.
Se hai aperto iTunes, puoi esportare manualmente l'elenco dei podcast esportando in OPML, quindi possiamo supporre che iTunes alla fine sappia come decodificarli (cioè non stanno passando esclusivamente attraverso un host ITMS).
Ho guardato il Documento API affiliato Il che ti restituisce un bel JSON. Questo ti dà un collectionViewUrl
che è uguale a quelli indicati nel generatore RSS e, per inciso, il Generatore di collegamenti iTunes. Ti dà anche il id
, e un sacco di altre cose tra cui un file audio di anteprima che non è ospitato sul Phobos.
A questo punto, sto cercando tutto ciò che mi aiuterebbe a risolvere questa domanda, tra cui qualsiasi lingua, non ufficiale o no.
(In realtà, preferirei qualcosa di vagamente supportato, e in Java, che non ha coinvolto HTML rasking).
Soluzione
Attraverso una combinazione di risposte da queste Due Domande, ho trovato il modo di fare quello che voglio.
Esempio di ricerca di podcast
Primo: prendi un elenco di podcast di iTunes, usando il generatore RSS. Non sono ancora sicuro di come funzionino i parametri delle query, ma ecco un feed RSS per i podcast di Top Tech negli Stati Uniti.
http://ax.itunes.apple.com/WebObjects/MZStoreServices.woa/ws/RSS/toppodcasts/sf=143441/limit=25/genre=1318/xml
sf
si riferisce al paese ed è facoltativo. Immagino che questo predefinito sia globale se assente.genre
si riferisce al genere ed è facoltativo. Immagino che questo predefinito sia "tutti i generi" è assente.limit
è facoltativo e sembra default a 9.
Questo ti dà un feed atom di podcast. Dovrai fare un po 'di sperlunking con XPath per arrivare all'ID ITMS di Podcast, ma stai cercando l'ID numerico contenuto nell'URL trovato nel seguente XPath:
/atom:feed/atom:entry/atom:link[@rel='alernate']/@href
Ad esempio, l'eccellente Javaposse ha un ID di 81157308.
La risposta alla domanda
Una volta che hai quell'ID, puoi ottenere un altro documento che ti dirà l'ultimo episodio e l'URL di feed originale. La cattura qui è che devi utilizzare un agente utente iTunes per ottenere questo documento.
per esempio
wget --user-agent iTunes/7.4.1 \
--no-check-certificate \
"https://buy.itunes.apple.com/WebObjects/MZFinance.woa/wa/com.apple.jingle.app.finance.DirectAction/subscribePodcast?id=81157308&wasWarnedAboutPodcasts=true"
Questo è un plist contenente alcuni metadati sul podcast, incluso l'URL di alimentazione.
<key>feedURL</key><string>http://feeds.feedburner.com/javaposse</string>
L'XPath per questo potrebbe essere qualcosa di simile:
//key[@text='feedURL']/following-sibling::string/text()
Disclaimer
Non è del tutto sicuro di quanto sia stabile tutto ciò o quanto sia legale. Ymmv.
Altri suggerimenti
Non appena hai l'ID puoi usarlo nella ricerca come definito in
Dovresti ottenere ciò di cui hai bisogno analizzando la risposta con JSON
Per elaborare la risposta di @juhariis, ecco le basi dell'estrazione dell'URL di feed dal JSON (Python3):
from urllib.request import urlopen
from urllib.parse import urlparse
import codecs
import json
podcast_url = 'https://itunes.apple.com/us/podcast/grow-big-always/id1060318873'
ITUNES_URL = 'https://itunes.apple.com/lookup?id='
parsed = urlparse(podcast_url)
id = parsed.path.split('/')[-1][2:]
reader = codecs.getreader('utf-8')
with urlopen(ITUNES_URL + id) as response:
feed = json.load(reader(response))['results'][0]['feedUrl']
print(feed)
Ecco uno script/modulo che ho realizzato, che utilizza questo: https://gist.github.com/theychx/f9fad123bef27bebac665847c7884cd9
Ho cercato a lungo per decostruire il feed podcast di iTunes. È un plist contenente meta dati, di cui uno di essi è un feed RSS. Il mio post sul blog Come iscriverti ai podcast di iTunes su Android Ha collegamenti al codice in PHP e in JavaScript per estrarre l'URL al feed RSS da un singolo collegamento iTunes.