Больше нет необходимости ждать от API, чтобы они привели его к «best practices» виду. Теперь Вы можете исправить любое API и использовать его для модуля Серии.
API (Application programming interface) - программный интерфейс приложения, именно через него работают и взаимодействуют между собой программы. Создавая API, многие не до конца понимают, что с API будут работать программы, а не люди. Поэтому не всегда придерживаются каких-либо стандартов или правил, иногда из-за незнания, а иногда из-за того, что API создаются для собственных проектов и программ, поэтому делают его «абы как».
В API не должно быть таких путей, в которые невозможно попасть для получения данных.
На иллюстрации к посту Вы видите как выглядит удачное API, когда к любому значению программа с лёгкостью попадает, и ей не нужно знать заранее о неизвестных ключах.
Неудачное API выглядит так, когда только зная заранее о том, что ключ называется
2
и затем ключ называется 10
, только в таком случае можно пробраться к названию.- Обновите Ваш установочный файл:
cinemapress upd
- Обновите Вашу систему:
cinemapress update
На примере случайного API, давайте сделаем его пригодным для программного использования.
К примеру по адресу:
https://example.com/api?imdb_id=[imdb_id]
Открывается JSON:
JSON:
{
"data": {
"seasons": {
"1": {
"season": 1,
"episodes": {
"1": {
"episode": 1,
"translation": {
"87": {
"translation": "Профессиональный многоголосый"
}
}
}
}
}
}
}
}
В нём никуда невозможно зайти data.seasons.1.episodes.1.translation.87.translation, так как Вы не знаете ключа сезона, эпизода, и перевода.
Поэтому запрос делаете так:
https://example.com/api?imdb_id=[imdb_id] <> data.seasons
И теперь JSON преобразовывается и выглядит так:
JSON:
{
"data": {
"seasons": [
{
"key": "1",
"value": {
"season": 1,
"episodes": {
"1": {
"episode": 1,
"translation": {
"87": {
"translation": "Профессиональный многоголосый"
}
}
}
}
}
}
]
}
}
Вы seasons сделали массовом, в
key
попадает ключ который был раньше у объекта, а в value
- весь прежний объект.Теперь Вы уже имеете возможность пройти дальше data.seasons.0.value.episodes.1.translation.87.translation, но Вы всё еще не знаете ключ эпизода и перевода.
Для этого, через запятую Вы можете преобразовать к правильному виду все нужные объекты в массивы, делается это так:
https://example.com/api?imdb_id=[imdb_id] <> data.seasons, data.seasons.0.value.episodes, data.seasons.0.value.episodes.0.value.translation
И преобразованный API выглядит так:
JSON:
{
"data": {
"seasons": [
{
"key": "1",
"value": {
"season": 1,
"episodes": [
{
"key": "1",
"value": {
"episode": 1,
"translation": [
{
"key": "87",
"value": {
"translation": "Профессиональный многоголосый"
}
}
]
}
}
]
}
}
]
}
}
Для программы открыты все пути, например чтобы получить перевод: data.seasons.0.value.episodes.0.value.translation.0.value.translation
Возможно это довольно трудно для понимания, поэтому вот готовые строки с преобразованием для существующих API.
Получение серий сериала на странице сериала по API
- API Alloha:
https://api.alloha.tv/?token=04941a9a3ca3ac16e2b4327347bbc1&kp=[kp_id] <> data.seasons, data.seasons.0.value.episodes, data.seasons.0.value.episodes.0.value.translation ~ data.seasons.0.key ~ data.seasons.0.value.episodes.0.key ~ data.seasons.0.value.episodes.0.value.translation.0.value.translation
- API Collaps:
https://api.bhcesh.me/franchise/details?token=eedefb541aeba871dcfc756e6b31c02e&kinopoisk_id=[kp_id] ~ seasons.0.season ~ seasons.0.episodes.0.episode ~ seasons.0.episodes.0.voiceActing
- API Bazon:
https://bazon.cc/api/search?token=2848f79ca09d4bbbf419bcdb464b4d11&kp=[kp_id] <> results.0.episodes, results.0.episodes.0.value ~ results.0.episodes.0.key ~ results.0.episodes.0.value.0.key ~ results.0.translation
- API HDVB:
https://apivb.info/api/videos.json?token=5e2fe4c70bafd9a7414c4f170ee1b192&id_kp=[kp_id] ~ 0.serial_episodes.0.season_number ~ 0.serial_episodes.0.episodes.0 ~ 0.translator
- API Kodik:
https://kodikapi.com/search?token=b7cc4293ed475c4ad1fd599d114f4435&with_episodes=true&kinopoisk_id=[kp_id] <> results.0.seasons, results.0.seasons.0.value.episodes ~ results.0.seasons.0.key ~ results.0.seasons.0.value.episodes.0.key ~ results.0.translation.title
- API Alloha:
https://api.alloha.tv/?token=04941a9a3ca3ac16e2b4327347bbc1&order=date&list=serial <> data.0.seasons, data.0.seasons.0.value.episodes, data.0.seasons.0.value.episodes.0.value.translation ~ data.0.id_kp ~ data.0.seasons.0.key ~ data.0.seasons.0.value.episodes.0.key ~ data.0.seasons.0.value.episodes.0.value.translation.0.value.translation
- API Collaps:
https://api.bhcesh.me/list?token=eedefb541aeba871dcfc756e6b31c02e&type=serials&limit=100 ~ results.0.kinopoisk_id ~ results.0.seasons.0.season ~ results.0.seasons.0.episodes.0.episode
- API Bazon:
https://bazon.cc/api/json/?token=2848f79ca09d4bbbf419bcdb464b4d11&type=serial <> results.0.episodes, results.0.episodes.0.value ~ results.0.kinopoisk_id ~ results.0.episodes.0.key ~ results.0.episodes.0.value.0.key ~ results.0.translation
- API HDVB:
https://apivb.info/api/serials_updates.json?token=5e2fe4c70bafd9a7414c4f170ee1b192 ~ items.0.kinopoisk_id ~ items.0.serial_episodes.0.season_number ~ items.0.serial_episodes.0.episodes.0 ~ items.0.translator
- API Kodik:
https://kodikapi.com/list?token=b7cc4293ed475c4ad1fd599d114f4435&limit=100&with_episodes=true <> results.0.seasons, results.0.seasons.0.value.episodes ~ results.0.kinopoisk_id ~ results.0.seasons.0.key ~ results.0.seasons.0.value.episodes.0.key ~ results.0.translation.title
- API Videocdn:
https://videocdn.tv/api/tv-series?api_token=EnbO9h8pv1VyjbCJhg0WM9nG259n7mtz&ordering=id&direction=desc&limit=100 ~ data.0.kinopoisk_id ~ data.0.episodes.0.season_num ~ data.0.episodes.0.num ~ data.0.episodes.0.media.0.translation.short_title