Aleksey

Продвинутый пользователь
Регистрация
04.10.2022
Сообщения
165
Реакции
40
1710791331606.png
1710794034244.png
Официальный сайт - kinopoisk.dev
(НЕ РЕКЛАМА!)


Для наполнения можно использовать уже написанную мной строку, необходимо указать действующий токен (вместо "ТУТ ТОКЕН"):
# Заполнение с API Kinopoisk.dev (ключевая информация)
0 ~ https://api.kinopoisk.dev/v1.4/movie?token=ТУТ ТОКЕН&limit=50&page=[page] ~ docs.0.id ~ https://api.kinopoisk.dev/v1.4/movie/[id]?token=ТУТ ТОКЕН ~ id <> kp_id ~ externalId.imdb <> custom.imdb_id ~ externalId.tmdb <> custom.tmdb_id ~ externalId.kpHD <> custom.kpHD_id ~ type <> type ~ name <> title_ru ~ alternativeName <> title_en ~ year <> year ~ shortDescriptio <> description_short ~ description <> description ~ poster.url <> poster ~ poster.previewUrl <> custom.poster_previewUrl ~ genres <> genre ~ rating.kp <> kp_rating ~ rating.imdb <> imdb_rating ~ rating.filmCritics <> custom.rating.filmCritics ~ rating.russianFilmCritics <> custom.rating.russianFilmCritics ~ rating.await <> custom.rating.await ~ votes.kp <> kp_vote ~ votes.imdb <> imdb_vote ~ votes.filmCritics <> custom.votes.filmCritics ~ votes.russianFilmCritics <> custom.votes.russianFilmCritics ~ votes.await <> custom.votes.await ~ premiere.world <> premiere <> <> <> "_VALUE_".split("T")[0] ~ premiere.russia <> custom.premiere_russia <> <> <> "_VALUE_".split("T")[0] ~ enName <> custom.enName ~ slogan <> custom.slogan ~ networks.items <> custom.studio <> <> <> Object.values(_OBJECT_.map(studio => studio.name)) ~ status <> custom.status ~ ageRating <> custom.age ~ backdrop.url <> custom.backdrop_url ~ backdrop.previewUrl <> custom.backdrop_previewUrl ~ logo.url <> custom.logo ~ budget.value <> custom.budget.value ~ budget.currency <> custom.budget.currency ~ fees.world.value <> custom.fees.world.value ~ fees.world.currency <> custom.fees.world.currency ~ fees.russia.value <> custom.fees.russia.value ~ fees.russia.currency <> custom.fees.russia.currency ~ fees.usa.value <> custom.fees.usa.value ~ fees.usa.currency <> custom.fees.usa.currency ~ genres <> genre <> <> <> Object.values(_OBJECT_.map(genre => genre.name)) ~ countries <> country <> <> <> Object.values(_OBJECT_.map(country => country.name)) ~ similarMovies <> custom.similarMovies <> <> <> Object.values(_OBJECT_.map(similar => similar.id)) ~ persons <> actor <> <> <> Object.values(_OBJECT_.filter(person => person.profession === 'актеры').map(actor => actor.name)) ~ persons <> director <> <> <> Object.values(_OBJECT_.filter(person => person.profession === 'режиссеры').map(director => director.name)) ~ releaseYears.0.start <> custom.releaseYears.start ~ releaseYears.0.end <> custom.releaseYears.end

# Заполнение с API Kinopoisk.dev (Фоны, кадры, скриншоты и т.д.)
0 ~ lastmod ~ kp_id ~ https://api.kinopoisk.dev/v1.4/image?token=ТУТ ТОКЕН&limit=50&page=1&movieId=[id] ~ docs <> pictures <> <> <> Object.values(_OBJECT_.filter(picture => picture.type === 'screenshot').map(picture => picture.url)) ~ docs <> custom.wallpaper <> <> <> Object.values(_OBJECT_.filter(picture => picture.type === 'wallpaper').map(picture => picture.url)) ~ docs <> custom.promo <> <> <> Object.values(_OBJECT_.filter(picture => picture.type === 'promo').map(picture => picture.url)) ~ docs <> custom.cover <> <> <> Object.values(_OBJECT_.filter(picture => picture.type === 'cover').map(picture => picture.url))

Для работы НЕОБХОДИМО приобрести тариф - Unlimited
этот тариф позволит вам постоянно получать нужные обновления не упираясь в потолок запросов в сутки:

Что входит в тариф:
  • ∞ запросов весь месяц
  • Доступ к общему чату
  • Поддержка в общем чате
  • Поддержка в личных сообщениях
  • Консультации с разработчиками API
  • Влияние на разработку API, функционал и данные

⚠️ В работе данной строки замечены баги!
Некоторые франшизы грузятся с не соответствующим описанием и названием, по какой причине это происходит мне в данный момент не понятно, но РЕШЕНИЕ есть.
Необходимо заменить 2 и 3 параметры в строке, вместо:
0 ~ [URL='https://api.kinopoisk.dev/v1.4/movie?token=ТУТ ТОКЕН&limit=50&page=[page]']https://api.kinopoisk.dev/v1.4/movie?token=ТУТ ТОКЕН&limit=50&page=[page][/URL] ~ docs.0.id

пишем в зависимости от того какой балансер используем в качестве основного:
API Collaps:
0 ~ https://apicollaps.cc/list?token=eedefb541aeba871dcfc756e6b31c02e&limit=99&page=[page] ~ results.0.id

API Alloha фильмы:
0 ~ https://api.alloha.tv/?token=04941a9a3ca3ac16e2b4327347bbc1&order=date&list=movie&page=[page] ~ data.0.id_kp

API Alloha сериалы:
0 ~ https://api.alloha.tv/?token=04941a9a3ca3ac16e2b4327347bbc1&order=date&list=serial&page=[page] ~ data.0.id_kp

Если используете Alloha и нужно выгрузить оба типа франшиз (фильмы и сериалы), то просто пишем следующее:
# Заполнение c API Alloha фильмы:
0 ~ https://api.alloha.tv/?token=04941a9a3ca3ac16e2b4327347bbc1&order=date&list=movie&page=[page] ~ data.0.id_kp ~ https://api.kinopoisk.dev/v1.4/movie/[id]?token=ТУТ ТОКЕН ~ id <> kp_id ~ externalId.imdb <> custom.imdb_id ~ externalId.tmdb <> custom.tmdb_id ~ externalId.kpHD <> custom.kpHD_id ~ type <> type ~ name <> title_ru ~ alternativeName <> title_en ~ year <> year ~ shortDescriptio <> description_short ~ description <> description ~ poster.url <> poster ~ poster.previewUrl <> custom.poster_previewUrl ~ genres <> genre ~ rating.kp <> kp_rating ~ rating.imdb <> imdb_rating ~ rating.filmCritics <> custom.rating.filmCritics ~ rating.russianFilmCritics <> custom.rating.russianFilmCritics ~ rating.await <> custom.rating.await ~ votes.kp <> kp_vote ~ votes.imdb <> imdb_vote ~ votes.filmCritics <> custom.votes.filmCritics ~ votes.russianFilmCritics <> custom.votes.russianFilmCritics ~ votes.await <> custom.votes.await ~ premiere.world <> premiere <> <> <> "_VALUE_".split("T")[0] ~ premiere.russia <> custom.premiere_russia <> <> <> "_VALUE_".split("T")[0] ~ enName <> custom.enName ~ slogan <> custom.slogan ~ networks.items <> custom.studio <> <> <> Object.values(_OBJECT_.map(studio => studio.name)) ~ status <> custom.status ~ ageRating <> custom.age ~ backdrop.url <> custom.backdrop_url ~ backdrop.previewUrl <> custom.backdrop_previewUrl ~ logo.url <> custom.logo ~ budget.value <> custom.budget.value ~ budget.currency <> custom.budget.currency ~ fees.world.value <> custom.fees.world.value ~ fees.world.currency <> custom.fees.world.currency ~ fees.russia.value <> custom.fees.russia.value ~ fees.russia.currency <> custom.fees.russia.currency ~ fees.usa.value <> custom.fees.usa.value ~ fees.usa.currency <> custom.fees.usa.currency ~ genres <> genre <> <> <> Object.values(_OBJECT_.map(genre => genre.name)) ~ countries <> country <> <> <> Object.values(_OBJECT_.map(country => country.name)) ~ similarMovies <> custom.similarMovies <> <> <> Object.values(_OBJECT_.map(similar => similar.id)) ~ persons <> actor <> <> <> Object.values(_OBJECT_.filter(person => person.profession === 'актеры').map(actor => actor.name)) ~ persons <> director <> <> <> Object.values(_OBJECT_.filter(person => person.profession === 'режиссеры').map(director => director.name)) ~ releaseYears.0.start <> custom.releaseYears.start ~ releaseYears.0.end <> custom.releaseYears.end

# Заполнение c API Alloha сериалы:
0 ~ https://api.alloha.tv/?token=04941a9a3ca3ac16e2b4327347bbc1&order=date&list=serial&page=[page] ~ data.0.id_kp ~ https://api.kinopoisk.dev/v1.4/movie/[id]?token=ТУТ ТОКЕН ~ id <> kp_id ~ externalId.imdb <> custom.imdb_id ~ externalId.tmdb <> custom.tmdb_id ~ externalId.kpHD <> custom.kpHD_id ~ type <> type ~ name <> title_ru ~ alternativeName <> title_en ~ year <> year ~ shortDescriptio <> description_short ~ description <> description ~ poster.url <> poster ~ poster.previewUrl <> custom.poster_previewUrl ~ genres <> genre ~ rating.kp <> kp_rating ~ rating.imdb <> imdb_rating ~ rating.filmCritics <> custom.rating.filmCritics ~ rating.russianFilmCritics <> custom.rating.russianFilmCritics ~ rating.await <> custom.rating.await ~ votes.kp <> kp_vote ~ votes.imdb <> imdb_vote ~ votes.filmCritics <> custom.votes.filmCritics ~ votes.russianFilmCritics <> custom.votes.russianFilmCritics ~ votes.await <> custom.votes.await ~ premiere.world <> premiere <> <> <> "_VALUE_".split("T")[0] ~ premiere.russia <> custom.premiere_russia <> <> <> "_VALUE_".split("T")[0] ~ enName <> custom.enName ~ slogan <> custom.slogan ~ networks.items <> custom.studio <> <> <> Object.values(_OBJECT_.map(studio => studio.name)) ~ status <> custom.status ~ ageRating <> custom.age ~ backdrop.url <> custom.backdrop_url ~ backdrop.previewUrl <> custom.backdrop_previewUrl ~ logo.url <> custom.logo ~ budget.value <> custom.budget.value ~ budget.currency <> custom.budget.currency ~ fees.world.value <> custom.fees.world.value ~ fees.world.currency <> custom.fees.world.currency ~ fees.russia.value <> custom.fees.russia.value ~ fees.russia.currency <> custom.fees.russia.currency ~ fees.usa.value <> custom.fees.usa.value ~ fees.usa.currency <> custom.fees.usa.currency ~ genres <> genre <> <> <> Object.values(_OBJECT_.map(genre => genre.name)) ~ countries <> country <> <> <> Object.values(_OBJECT_.map(country => country.name)) ~ similarMovies <> custom.similarMovies <> <> <> Object.values(_OBJECT_.map(similar => similar.id)) ~ persons <> actor <> <> <> Object.values(_OBJECT_.filter(person => person.profession === 'актеры').map(actor => actor.name)) ~ persons <> director <> <> <> Object.values(_OBJECT_.filter(person => person.profession === 'режиссеры').map(director => director.name)) ~ releaseYears.0.start <> custom.releaseYears.start ~ releaseYears.0.end <> custom.releaseYears.end

Что делать если вы приобрели тариф с лимитированными запросами:
Запуск наполнения с ежедневным лимитом не позволит вам полностью наполнить базу киносайта т.к. каждый день система будет перебирать одни и те-же франшизы по ID, просто перезаписывая их.
Для успешного наполнения потребуется ежедневный ручной запуск парсера с изменением значения [page] в 1 строке (# Заполнение с API Kinopoisk.dev (ключевая информация)).
Например: Если у вас лимит 2500 запросов в сутки, и в 1 строке заполнения ключевой информации указано limit=50 т.е. из 1 запроса парсер получает 50 идентификаторов, затем он отправляет 50 запросов (не за раз) с использованием полученных идентификаторов и после отправляется так же 50 запросов для получения картинок, скриншотов и т.п. к указанным франшизам. Итог: с каждой страницей тратится 101 запрос. И если у вас лимит к примеру 2500 расчёт такой 2500/101= 25,7 именно столько стран пройдёт парсер за 1 запуск, для удобства рекомендую выставить лимит в строке 49 и перед каждым запуском, в строке увеличивать значение [page] на 25.

Исходя из того что база огромная, которая насчитывает более миллиона франшиз, в сутки удаётся вытягивать оттуда около 80 тыс франшиз, т.е. парсер всю базу сможет загрузить примерно за 2 недели, следовательно стоит запустить парсер не чаще 1 раза в 14 дней, я позже найду способ отслеживать обновления данных, появление новинок и дополню пост для этих запросов, это позволит не парсить всю базу а получать только действительно необходимые обновления что в десятки а то и сотни раз снизит количество запросов и позволит перейти на более дешёвые тарифы
 
Последнее редактирование:

rooting

Активный пользователь
Регистрация
15.03.2024
Сообщения
25
Реакции
0
Посмотреть вложение 487

Официальный сайт - kinopoisk.dev


Для наполнения можно использовать уже написанную мной строку, необходимо указать только действующий токен (вместо "ТУТ ТОКЕН"):
Огромная благодарность!
 

rooting

Активный пользователь
Регистрация
15.03.2024
Сообщения
25
Реакции
0
Посмотреть вложение 487
Посмотреть вложение 488
Официальный сайт - kinopoisk.dev


Для наполнения можно использовать уже написанную мной строку, необходимо указать только действующий токен (вместо "ТУТ ТОКЕН"):



Для работы НЕОБХОДИМО приобрести тариф - Unlimited
этот тариф позволит вам постоянно получать нужные обновления не упираясь в потолок запросов в сутки:
  • Что включено
    • ∞ запросов весь месяц
    • Доступ к общему чату
    • Поддержка в общем чате
    • Поддержка в личных сообщениях
    • Консультации с разработчиками API
    • Влияние на разработку API,
      функционал и данные

Что делать если вы приобрели тариф с лимитированными запросами:
Запуск наполнения с ежедневным лимитом не позволит вам полносттю наполнить базу киносайта т.к. каждый день система будет перебирать одни и те-же франшизы по ID, просто перезаписывая их.
Для успешного наполнения потребуется ежедневный ручной запуск парсера с изменением значения [page] в 1 строке (# Заполнение с API Kinopoisk.dev (ключевая информация)).
Например: Если у вас лимит 2500 запросов в сутки, и в 1 строке заполнения ключевой информации указано limit=50 т.е. из 1 запроса парсер получает 50 идентификаторов, затем он отправляет 50 запросов (не за раз) с использованием полученных идентификаторов и после отправляется так же 50 запросов для получения картинок, скриншотов и т.п. к указанным франшизам. Итог: с каждой страницей тратится 101 запрос. И если у вас лимит к примеру 2500 расчёт такой 2500/101= 25,7 именно столько стран пройдёт парсер за 1 запуск, для удобства рекомендую выставить лимит в строке 49 и перед каждым запуском, в строке увеличивать значение [page] на 25.

Исходя из того что база огромная, которая насчитывает более миллиона франшиз, в сутки удаётся вытягивать оттуда около 80 тыс франшиз, т.е. парсер всю базу сможет загрузить примерно за 2 недели, следовательно стоит запустить парсер не чаще 1 раза в 14 дней, я позже найду способ отслеживать обновления данных, появление новинок и дополню пост для этих запросов, это позволит не парсить всю базу а получать только действительно необходимые обновления - это позволит в дальнейшем использовать более дешёвые тарифы
https://api.kinopoisk.dev/v1.4/movie?token=&limit=50&page=25[next_page]Так получается?
 

Aleksey

Продвинутый пользователь
Регистрация
04.10.2022
Сообщения
165
Реакции
40
Последнее редактирование:

rooting

Активный пользователь
Регистрация
15.03.2024
Сообщения
25
Реакции
0
Не работает к сожалению.
 

Aleksey

Продвинутый пользователь
Регистрация
04.10.2022
Сообщения
165
Реакции
40
Прошу прощения, предложенный мной метод загрузки данных частями не верен. Т.к. указав page=25, будет интерпретировать парсером как: "прочесть и разобрать только 25 страницу". В данный момент пока не придумал как загружать данные порциями
 

rooting

Активный пользователь
Регистрация
15.03.2024
Сообщения
25
Реакции
0
Прошу прощения, предложенный мной метод загрузки данных частями не верен. Т.к. указав page=25, будет интерпретировать парсером как: "прочесть и разобрать только 25 страницу". В данный момент пока не придумал как загружать данные порциями
Вопрос решился, покупкой безлимита.
34528 запроса использовано на загрузку контента для теста.
 

Aleksey

Продвинутый пользователь
Регистрация
04.10.2022
Сообщения
165
Реакции
40
В данном api сегодня заметил небольшие проблемы: для некоторых франшиз грузится название, описание и т.п но постер от другой франшизы.
пока не могу понять почему так выходит.
Возможно проблема локальная
 

Aleksey

Продвинутый пользователь
Регистрация
04.10.2022
Сообщения
165
Реакции
40
⚠️ В работе указанной мной строки замечены баги❗
Некоторые франшизы грузятся с не соответствующим описанием и названием, по какой причине это происходит мне в данный момент не понятно, но РЕШЕНИЕ есть (внес правки в пост см. описание ⬆️).
 
Верх