Поиск 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.
Ответ 2
Как только у вас есть идентификатор, вы можете использовать его в поиске, как определено в
https://www.apple.com/itunes/affiliates/resources/documentation/itunes-store-web-service-search-api.html
Вы должны получить то, что вам нужно, разобрав ответ с помощью JSON
Ответ 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.