Поиск URL-адреса для подкастов из идентификатора iTunes. (iTMS API)

Я рассматриваю способ превращения идентификатора подкаста iTunes в канал RSS, который поддерживает производитель подкастов.

Я знаю генератор RSS который можно использовать для создания фида ссылок на подкасты, но эти ссылки относятся к HTML страницы.

Если у вас открыт iTunes, вы можете вручную экспортировать список подкастов, экспортируя их в OPML, поэтому мы можем предположить, что iTunes в конечном итоге знает, как их декодировать (т.е. они не только проходят через хост iTMS).

Я просмотрел Партнерский API-документ, который дает вам приятный JSON. Это дает вам collectionViewUrl, который является тем же, что и в генераторе RSS, и, кстати, iTunes Link Generator. Он также предоставляет вам id и всю загрузку других вещей, включая предварительный аудиофайл, который не размещен на фобо.

В этот момент я ищу все, что помогло бы мне решить этот вопрос, включая любой язык, неофициальный или нет.

(на самом деле, я бы предпочел, чтобы что-то смутно поддерживалось, а на Java, которое не включало HTML-скребок).

Ответ 1

Благодаря сочетанию ответов этих двух вопросов, я нашел способ сделать то, что я хотите.

Пример поиска подкастов

Сначала: захватите список подкастов из iTunes, используя генератор RSS. Я не уверен, как параметры запроса работают, но вот RSS-канал для топ-технологий подкастов в США.

http://ax.itunes.apple.com/WebObjects/MZStoreServices.woa/ws/RSS/toppodcasts/sf=143441/limit=25/genre=1318/xml
  • sf относится к стране и не является обязательным. Я бы предположил, что это значение по умолчанию является глобальным, если оно отсутствует.
  • genre относится к жанру и не является обязательным. Я бы предположил, что это значение по умолчанию для всех жанров отсутствует.
  • limit является необязательным, и по умолчанию он равен 9.

Это дает вам фид Atom подкастов. Вам нужно будет выполнить сперманг с помощью XPath, чтобы получить идентификатор ITMS подкаста, но вы ищете числовой идентификатор, содержащийся в URL-адресе, найденном в следующем XPath:

/atom:feed/atom:entry/atom:link[@rel='alernate']/@href

Например, отличный JavaPosse имеет идентификатор 81157308.

Ответ на вопрос

Как только у вас есть этот идентификатор, вы можете получить еще один документ, который расскажет вам последний эпизод и исходный URL-адрес канала. Уловка здесь заключается в том, что вам нужно использовать пользовательский агент iTunes для получения этого документа.

например.

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"

Это plist, содержащий некоторые метаданные о подкасте, включая URL-адрес фида.

<key>feedURL</key><string>http://feeds.feedburner.com/javaposse</string>

XPath для этого может быть что-то вроде:

//key[@text='feedURL']/following-sibling::string/text()

Отказ

Не совсем уверен, насколько это стабильно, или насколько оно законно. YMMV.

Ответ 3

Чтобы уточнить ответ @juhariis, здесь основы извлечения корневого URL из 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)

Здесь создан script/модуль, который использует это: https://gist.github.com/theychx/f9fad123bef27bebac665847c7884cd9

Ответ 4

Я искал долгое время, чтобы деконструировать фид подкастов iTunes. Это plist, содержащий метаданные, одним из которых является RSS-канал. Мой блог post Как подписаться на подкасты iTunes на Android есть ссылки на код на php и в javascript для извлечения URL-адреса в RSS-канал от отдельного iTunes.