[Open source, Python] Ищем фильмы, книги и подкасты с помощью Python
Автор
Сообщение
news_bot ®
Стаж: 6 лет 9 месяцев
Сообщений: 27286
Apple не особо афиширует, что у iTunes Store и других каталогов есть кривенькое, но простое поисковое API — поэтому я решил о нём написать. Из этой заметки вы узнаете, что API умеет и как его использовать.
Поиск в каталогах Apple
API ищет по содержимому iTunes Store, iBooks Store, Apple Podcasts и App Store. Соответственно, можно найти песни, фильмы, книги, подкасты и приложения.
API работает по давно забытому принципу JSONP, то есть возвращает Content-Type: text/javascript вместо нормального application/json.
GET /search?media=podcast&term=python HTTP/1.1
Host: itunes.apple.com
Accept: application/json
HTTP/2 200
content-type: text/javascript; charset=utf-8
{...}
Конечно, эту особенность можно просто игнорировать:
import requests
def search(term, media):
url = "https://itunes.apple.com/search"
payload = {"term": term, "media": media}
response = requests.get(url, params=payload)
response.raise_for_status()
results = response.json().get("results", [])
return results
>>> results = search("python", media="podcast")
>>> results[0]["collectionName"]
'Talk Python To Me'
Параметры запроса
Поиск можно настроить:
- term — поисковый запрос, единственный обязательный параметр;
- media — тип произведения (movie, podcast, music, audiobook, software, ebook, all), по умолчанию all;
- country — страна произведения, двухсимвольный ISO-код (us, ru, ...), по умолчанию us;
- limit — максимальное количество результатов, по умолчанию 50.
Пример функции, которая поддерживает все параметры:
import requests
def search(term, media="all", country="us", limit=10):
url = "https://itunes.apple.com/search"
payload = {"term": term, "media": media, "country": country, "limit": limit}
response = requests.get(url, params=payload)
response.raise_for_status()
results = response.json().get("results", [])
return results
Ответ
Общая структура ответа:
{
"resultCount": 10,
"results": [
{
"wrapperType": "track",
"kind": "song",
"artistId": 1495668306,
"collectionId": 527039271,
"trackId": 527039276,
"artistName": "Dodge & Fuski",
"collectionName": "Never Say Die (Deluxe Edition)",
"trackName":"Python",
...
},
{
"wrapperType": "track",
"kind": "podcast",
"collectionId": 979020229,
"trackId": 979020229,
"artistName": "Michael Kennedy (@mkennedy)",
"collectionName": "Talk Python To Me"
...
},
...
]
}
Конкретный набор полей зависит от типа произведения (kind) и полноценно нигде не описан, насколько мне известно. Часто заполнены:
- artistId — идентификатор автора произведения;
- artistName — автор;
- artistViewUrl — ссылка на автора на сайте Apple;
- collectionId — идентификатор альбома;
- collectionName — название альбома;
- collectionViewUrl — ссылка на альбом на сайте Apple;
- trackId — идентификатор композиции;
- trackName — название композиции;
- artworkUrl100 — ссылка на превьюшку произведения 100x100 пикселей;
- country — страна произведения;
- primaryGenreName — жанр произведения.
Для подкастов я сделал типизированную обёртку — пакет podsearch, можно посмотреть набор полей в нём.
Запрос по идентификатору
Если известен идентификатор объекта (artistId, collectionId, trackId), можно вызвать метод lookup по нему:
import requests
def lookup(object_id):
url = "https://itunes.apple.com/lookup"
payload = {"id": object_id}
response = requests.get(url, params=payload)
response.raise_for_status()
results = response.json().get("results", [])
return results
>>> results = lookup(979020229)
>>> results[0]["collectionName"]
'Talk Python To Me'
Нюансы
Про необычный Content-Type ответа я уже упомянул. Кроме того:
- Страна произведения (country) есть как в параметрах запроса, так и в ответе. Но в параметрах это двухсимвольный ISO-код (ru), а в ответе — трёхсимвольный (RUS).
- Схемы ответа не существует.
- Apple ограничивает частоту вызова API 20 запросами в минуту.
Описание API на сайте Apple
Пакет для поиска по подкастам
Если хотите больше интересных штук на Python — подписывайтесь на канал @ohmypy
===========
Источник:
habr.com
===========
Похожие новости:
- [] PVS-Studio впечатлен качеством кода Abbyy NeoML
- [] PVS-Studio Impressed by the Code Quality of ABBYY NeoML
- [Git, GitHub, Open source, Краудсорсинг, Научная фантастика] Альтернативная конституция
- [Godot, Прототипирование, Разработка игр] Godot, 1000 мелочей
- [*nix, C, Open source, Звук, Разработка под Linux] Изучаем VoIP-движок Mediastreamer2. Часть 13, заключительная
- [JavaScript, Python, Проектирование и рефакторинг] Пара слов об именовании переменных и методов
- [NoSQL, Open source] Создатель СУБД Redis уходит от сопровождения проекта
- [Python, Программирование, Карьера в IT-индустрии] Полный список вопросов с собеседований по Python для дата-сайентистов и инженеров (перевод)
- [IT-инфраструктура, Open source, Виртуализация, Разработка под Linux, Сетевые технологии] Интеграция Open vSwitch с Р-виртуализацией
- [Python, Программирование, Учебный процесс в IT] 8 трюков в Python, используемых опытными программистами (перевод)
Теги для поиска: #_open_source, #_python, #_itunes_search_api, #_poisk_v_itunes (поиск в itunes), #_apple_podcasts, #_podsearch, #_open_source, #_python
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 23-Ноя 14:30
Часовой пояс: UTC + 5
Автор | Сообщение |
---|---|
news_bot ®
Стаж: 6 лет 9 месяцев |
|
Apple не особо афиширует, что у iTunes Store и других каталогов есть кривенькое, но простое поисковое API — поэтому я решил о нём написать. Из этой заметки вы узнаете, что API умеет и как его использовать. Поиск в каталогах Apple API ищет по содержимому iTunes Store, iBooks Store, Apple Podcasts и App Store. Соответственно, можно найти песни, фильмы, книги, подкасты и приложения. API работает по давно забытому принципу JSONP, то есть возвращает Content-Type: text/javascript вместо нормального application/json. GET /search?media=podcast&term=python HTTP/1.1
Host: itunes.apple.com Accept: application/json HTTP/2 200 content-type: text/javascript; charset=utf-8 {...} Конечно, эту особенность можно просто игнорировать: import requests
def search(term, media): url = "https://itunes.apple.com/search" payload = {"term": term, "media": media} response = requests.get(url, params=payload) response.raise_for_status() results = response.json().get("results", []) return results >>> results = search("python", media="podcast")
>>> results[0]["collectionName"] 'Talk Python To Me' Параметры запроса Поиск можно настроить:
Пример функции, которая поддерживает все параметры: import requests
def search(term, media="all", country="us", limit=10): url = "https://itunes.apple.com/search" payload = {"term": term, "media": media, "country": country, "limit": limit} response = requests.get(url, params=payload) response.raise_for_status() results = response.json().get("results", []) return results Ответ Общая структура ответа: {
"resultCount": 10, "results": [ { "wrapperType": "track", "kind": "song", "artistId": 1495668306, "collectionId": 527039271, "trackId": 527039276, "artistName": "Dodge & Fuski", "collectionName": "Never Say Die (Deluxe Edition)", "trackName":"Python", ... }, { "wrapperType": "track", "kind": "podcast", "collectionId": 979020229, "trackId": 979020229, "artistName": "Michael Kennedy (@mkennedy)", "collectionName": "Talk Python To Me" ... }, ... ] } Конкретный набор полей зависит от типа произведения (kind) и полноценно нигде не описан, насколько мне известно. Часто заполнены:
Для подкастов я сделал типизированную обёртку — пакет podsearch, можно посмотреть набор полей в нём. Запрос по идентификатору Если известен идентификатор объекта (artistId, collectionId, trackId), можно вызвать метод lookup по нему: import requests
def lookup(object_id): url = "https://itunes.apple.com/lookup" payload = {"id": object_id} response = requests.get(url, params=payload) response.raise_for_status() results = response.json().get("results", []) return results >>> results = lookup(979020229)
>>> results[0]["collectionName"] 'Talk Python To Me' Нюансы Про необычный Content-Type ответа я уже упомянул. Кроме того:
Описание API на сайте Apple Пакет для поиска по подкастам Если хотите больше интересных штук на Python — подписывайтесь на канал @ohmypy =========== Источник: habr.com =========== Похожие новости:
|
|
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 23-Ноя 14:30
Часовой пояс: UTC + 5