admin

Администратор
Команда форума
Регистрация
30.09.2022
Сообщения
462
Реакции
84
1672747253310.png
Если у Вас после установки сайта уже есть фильмы, Вам их лучше все удалить и заново наполнить с помощью автозаполнения.
  • Удаление всех фильмовиз автоматической базы делается командой:
    • cinemapress zero
  • Удаление всех фильмов, которые Вы видите в админ-панели делается командой:
    • cinemapress zero_realtime
Теперь когда всё обнулилось, можно запускать команды автозаполнения и после этого перевести их на ежечасное автодобавление.

1672747285357.png

Код:
# Заполнение всей информции с kodik, и основным делать ID КиноПоиска.
0 ~ http://kodikapi.com/list?limit=100&with_material_data=true&token=45c53578f11ecfb74e31267b634cc6a8&page=[page][next_page] ~ results ~ ~ kinopoisk_id <> kp_id ~ material_data.title <> title_ru ~ material_data.title_en <> title_en ~ material_data.year <> year ~ material_data.description <> description ~ material_data.poster_url <> poster ~ material_data.screenshots <> pictures ~ material_data.countries <> country ~ material_data.genres <> genre ~ material_data.premiere_world <> premiere ~ material_data.actors <> actor ~ material_data.directors <> director ~ type <> type

# Заполнение ID IMDb для фильмов, у которых уже есть ID КиноПоиска.
0 ~ http://kodikapi.com/list?limit=100&with_material_data=true&token=45c53578f11ecfb74e31267b634cc6a8&page=[page][next_page] ~ results ~ ~ kinopoisk_id <> kp_id ~ imdb_id <> custom.imdb_id

# Заполнение ID Shikimori для фильмов, у которых уже есть ID КиноПоиска.
0 ~ http://kodikapi.com/list?limit=100&with_material_data=true&token=45c53578f11ecfb74e31267b634cc6a8&page=[page][next_page] ~ results ~ ~ kinopoisk_id <> kp_id ~ shikimori_id <> custom.movie_id

# Заполнение ID TMDb + постер + красивое фото для фильмов, у которых уже есть ID IMDb
0 ~ db ~ custom.imdb_id ~ https://api.themoviedb.org/3/find/tt[imdb_id]?api_key=269890f657dddf4635473cf4cf456576&external_source=imdb_id ~ movie_results.0.id <> custom.tmdb_id <> 1 ~ movie_results.0.poster_path <> poster <> 1 ~ movie_results.0.backdrop_path <> pictures <> 1

# Заполнение ID TMDb + постер + красивое фото для сериалов, у которых уже есть ID IMDb
0 ~ db ~ custom.imdb_id ~ https://api.themoviedb.org/3/find/tt[imdb_id]?api_key=269890f657dddf4635473cf4cf456576&external_source=imdb_id ~ tv_results.0.id <> custom.tmdb_id <> 1 ~ tv_results.0.poster_path <> poster <> 1 ~ tv_results.0.backdrop_path <> pictures <> 1

# Заполнение рейтинга КиноПоиск и IMDb, напрямую с КиноПоиска.
0 ~ db ~ kp_id ~ https://rating.kinopoisk.ru/[id].xml ~ rating.kp_rating._attributes.num_vote <> kp_vote ~ rating.kp_rating._text <> kp_rating ~ rating.imdb_rating._attributes.num_vote <> imdb_vote ~ rating.imdb_rating._text <> imdb_rating

После получения, делаете обход только первой страницы для получения новых аниме каждый час (удаляете &page=[page][next_page] )

Код:
# Заполнение всей информции с kodik, и основным делать ID КиноПоиска.
1 ~ http://kodikapi.com/list?limit=100&with_material_data=true&token=45c53578f11ecfb74e31267b634cc6a8 ~ results ~ ~ kinopoisk_id <> kp_id ~ material_data.title <> title_ru ~ material_data.title_en <> title_en ~ material_data.year <> year ~ material_data.description <> description ~ material_data.poster_url <> poster ~ material_data.screenshots <> pictures ~ material_data.countries <> country ~ material_data.genres <> genre ~ material_data.premiere_world <> premiere ~ material_data.actors <> actor ~ material_data.directors <> director ~ type <> type

# Заполнение ID IMDb для фильмов, у которых уже есть ID КиноПоиска.
1 ~ http://kodikapi.com/list?limit=100&with_material_data=true&token=45c53578f11ecfb74e31267b634cc6a8 ~ results ~ ~ kinopoisk_id <> kp_id ~ imdb_id <> custom.imdb_id

# Заполнение ID Shikimori для фильмов, у которых уже есть ID КиноПоиска.
1 ~ http://kodikapi.com/list?limit=100&with_material_data=true&token=45c53578f11ecfb74e31267b634cc6a8 ~ results ~ ~ kinopoisk_id <> kp_id ~ shikimori_id <> custom.movie_id

1672747338114.png
Если Вы будете использовать только базу Kodik, для информации о фильмах, то можете сделать основными несколько ID (IMDb + КиноПоиск + Shikimori), вместо одного ID КиноПоиска. В таком случае Вам удастся выгрузить абсолютно все аниме, которые у них есть. Учтите что у них много повторов, неточностей и дублей контента. Одно и то же аниме может добавиться по несколько раз.

Код:
# Заполнение всей информции с kodik, и основным делать ID КиноПоиска или ID IMDb или ID Shikimori.
0 ~ http://kodikapi.com/list?limit=100&with_material_data=true&token=45c53578f11ecfb74e31267b634cc6a8&page=[page][next_page] ~ results ~ ~ kinopoisk_id <> kp_id ~ imdb_id <> custom.imdb_id ~ shikimori_id <> custom.movie_id ~ material_data.title <> title_ru ~ material_data.title_en <> title_en ~ material_data.year <> year ~ material_data.description <> description ~ material_data.poster_url <> poster ~ material_data.screenshots <> pictures ~ material_data.countries <> country ~ material_data.genres <> genre ~ material_data.premiere_world <> premiere ~ material_data.actors <> actor ~ material_data.directors <> director ~ type <> type

# Заполнение ID TMDb + постер + красивое фото для фильмов, у которых уже есть ID IMDb
# Код выше

# Заполнение ID TMDb + постер + красивое фото для сериалов, у которых уже есть ID IMDb
# Код выше

# Заполнение рейтинга КиноПоиск и IMDb, напрямую с КиноПоиска.
# Код выше

Основные моменты, которые стоит понять, чтобы самому составлять такие строки получения информации.

Параметры разделяются волнистой чертой - ~
Если у параметра несколько функций, разделение знаком меньше-больше - <>

Первый параметр, это кратность часов, с которой система будет выполнять команду:
  • 0 - команду можно запустить только по кнопке
  • 4 - каждые 4 часа
  • 23 - раз в день в 23 часа
Второй параметр, это URL API со списком всех фильмов или Ваша база данных сайта:
  • https://example.com/api?page=1 - зайти только на первую страницу API
  • https://example.com/api?page=[page] - пройтись по всем страницам 1,2,3,... пока API будет отдавать успешные ответы
  • https://example.com/api?page=[page][data.next_page] - переход на след. страницу API по URL, который находится в свойстве {data: {next_page: 'https://example.com/api?page=2'}}
  • database или db или пустое поле - получение всех фильмов с Вашей локальной базы данных
  • xmlpipe2 - получение фильмов с автоматической базы (у Вас там может быть 40к и больше фильмов)
  • saved - получение всех фильмов из JSON файлов в папке /files/saved/
  • lastmod - получение всех фильмов, которые были обновлены в течении последнего часа, например Вы добавляете фильм из разных API у которых рейтинг не всегда актуальный, Вы сразу в след. строке можете прописать им рейтинг, который Вы получите напрямую с КиноПоиска
Третий параметр, это получение ID каждого фильма из всего списка на странице:
  • results.0.id - путь к ID из JSON API списка
  • results - если четвертый параметр пустой, то Вы можете дать путь к массиву и сразу из него получать всю информацию о фильме
  • custom.imdb_id - если второй параметр локальная база, то Вы можете из нее получить любое ID, например IMDb
  • пустое поле - можно оставлять пустым, если получаете из локальной базы, в этом случае ID будет считаться ID КиноПоиска
Четверный параметр, это URL адрес на который зайдет система для получения информации по ID конкретного фильма:
  • https://example.com/api?id=[id] - вместо [id] система подставит ID из третьего параметра
  • https://rating.kinopoisk.ru/[id].xml - Вы можете использовать и XML, который преобразуется в JSON
  • [url] - если второй параметр состоит из массива URL-адресов, то указав , Вы говорите пройтись по всем адресам API
Пятый и последующие параметры, это пути к JSON данным и сопоставление их с Вашей локальной базой:
  • data.actors <> actor - добавление массива actors в поле базы сайта actor
  • results.0.id <> custom.tmdb_id - добавление {results: [ { id: '111' } ]} в кастомное поле базы сайта custom.tmdb_id
  • data.directors <> director <> 1 - добавление только одного режиссера из массива directors в поле базы сайта director
  • data.genres <> genre <> <> <> "_VALUE_".split(",") - если жанры имеют в списке лишние пробелы, например комедия, драма, ужасы Вы можете разделить их по запятой "_VALUE_".split(",") и система сама всё корректно занесет в базу комедия,драма,ужасы. Это eval команда и Вы можете ипользовать в ней любые JS функции. _VALUE_ - используйте если data.genres является строкой и _OBJECT_ - если является объектом.
Объяснение остальных моментов, уже будет дополняться по мере использования.

1672747380509.png

Теперь создаёте новую автоматическую коллекцию, например anime-dorama и выводите её на главной. http://kodikapi.com/list?token=b7cc4293ed475c4ad1fd599d114f4435 ~ results.0.kinopoisk_id ~ anime-dorama
 

Aleksey

Продвинутый пользователь
Регистрация
04.10.2022
Сообщения
165
Реакции
40
Рейтинг у всех заполняется?
У меня прописана строка:
0 ~ db ~ kp_id ~ https://rating.kinopoisk.ru/[id].xml ~ rating.kp_rating._attributes.num_vote <> kp_vote ~ rating.kp_rating._text <> kp_rating ~ rating.imdb_rating._attributes.num_vote <> imdb_vote ~ rating.imdb_rating._text <> imdb_rating

Эффекта 0, ни у 1 франшизы рейтинг не заполнен. В чем может быть проблема?
 

admin

Администратор
Команда форума
Регистрация
30.09.2022
Сообщения
462
Реакции
84
Рейтинг у всех заполняется?
У меня прописана строка:
0 ~ db ~ kp_id ~ https://rating.kinopoisk.ru/[id].xml ~ rating.kp_rating._attributes.num_vote <> kp_vote ~ rating.kp_rating._text <> kp_rating ~ rating.imdb_rating._attributes.num_vote <> imdb_vote ~ rating.imdb_rating._text <> imdb_rating

Эффекта 0, ни у 1 франшизы рейтинг не заполнен. В чем может быть проблема?
Кинопоиск внедрил какое-то перенаправление и из-за этого рейтинг и парсинг сайта перестали работать.
 

Aleksey

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

Aleksey

Продвинутый пользователь
Регистрация
04.10.2022
Сообщения
165
Реакции
40
Ну без рейтингов жить тоже не вариант, есть классный неофициальный API Кинопостка, кто-нибудь пробовал тянуть отсюда какую либо инфу? https://kinopoiskapiunofficial.tech/
Там применяется cURL, в котором передается токен и тип ответа, как запустить его через штатные средства CinemaPress я не знаю :( что то мне подсказывает что не удастся оттуда что либо тянуть
 
Последнее редактирование:

admin

Администратор
Команда форума
Регистрация
30.09.2022
Сообщения
462
Реакции
84
Не пробовал но кажется cUrl уже установлен на сервер.

1682607412572.png
 

Aleksey

Продвинутый пользователь
Регистрация
04.10.2022
Сообщения
165
Реакции
40
Я кажется понял почему рейтинг КП не заполняется если просто прописать
0 ~ db ~ kp_id ~ https://rating.kinopoisk.ru/[id].xml ~ rating.kp_rating._attributes.num_vote <> kp_vote ~ rating.kp_rating._text <> kp_rating ~ rating.imdb_rating._attributes.num_vote <> imdb_vote ~ rating.imdb_rating._text <> imdb_rating

Решение:

1) Топаем сюда -> best-proxies.ru или hidemy.name или free-proxy.cz
2) Выбираем прокси (я тестировал на RU)
3) Пишем в админку прокси и порт
- если купили прокси, пишем: login:pass@IP:Port
- если взяли бесплатный, пишем: @IP:Port
- если нужно использовать прокси только для конкретного сайта, в конце строки дописываем: <> example.ru
(вместо example.ru указываем адрес сайта на котором задействуем прокси, например kinopoisk.ru)

пример записи бесплатного прокси для парсинга Кинопоиск
1683890907705.png

Рекомендую с новой строки, указать еще некоторое кол-во IP прокси, на случай если какой-то из них прекратит работать.
1683894016039.png

Правда я не совсем понял зачем в автонаполнении есть печеньки, подскажите если кто понимает.
С применением прокси скорость наполнения сайта снизится, но зато все будет работать.
 
Последнее редактирование:

admin

Администратор
Команда форума
Регистрация
30.09.2022
Сообщения
462
Реакции
84
Я кажется понял почему рейтинг КП не заполняется если просто прописать

Решение:

1) Топаем сюда -> best-proxies.ru или hidemy.name или free-proxy.cz
2) Выбираем прокси (я тестировал на RU)
3) Пишем в админку прокси и порт
- если купили прокси: login:pass@IP:Port
- если взяли бесплатный: @IP:Port
- если нужно использовать прокси только для конкретного сайта, в конце строки дописываем: <> example.ru
(вместо example.ru указываем адрес сайта на котором задействуем прокси, например rating.kinopoisk.ru)

пример записи бесплатного прокси для парсинга Кинопоиск

Рекомендую с новой строки, указать еще некоторое кол-во IP прокси, на случай если какой-то из них прекратит работать.

Правда я не совсем понял зачем в автонаполнении есть печеньки, подскажите если кто понимает.
С применением прокси скорость наполнения сайта снизится, но зато все будет работать.
Что-то не работает у меня проксирование, рейтинг не обновляется.
 

Aleksey

Продвинутый пользователь
Регистрация
04.10.2022
Сообщения
165
Реакции
40
Что-то не работает у меня проксирование, рейтинг не обновляется.
странно, у меня все рейтинги заполнились, правда долго заполнялись, как будто по 3-4 запроса в минуту проходило
 

admin

Администратор
Команда форума
Регистрация
30.09.2022
Сообщения
462
Реакции
84
странно, у меня все рейтинги заполнились, правда долго заполнялись, как будто по 3-4 запроса в минуту проходило
Не хватало оперативки, освободил немного и заполнение пошло, но тоже медленно.
 

Aleksey

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

Код:
# Заполнение детальной информации о сериалах - Collaps
0 ~ https://api.bhcesh.me/franchise/details?token=265f516a6c27b9ea79b2479c7c95cea7&kinopoisk_id=[id] ~ type <> custom.type! <> <> <> if ("_VALUE_".search('ser')) {"1"} else {""} ~ serial_status <> custom.serial_status ~ seasons.0.season <> custom.seasons.season <> <> <> Object.values(_OBJECT_) ~ seasons.0.season.0.episodes.0.episode <> custom.seasons.season.episodes.episode ~ seasons.0.season.0.episodes.0.name <> custom.seasons.season.episodes.name ~ seasons.0.season.0.episodes.0.release_world <> custom.seasons.season.episodes.release_world
 
Последнее редактирование:

admin

Администратор
Команда форума
Регистрация
30.09.2022
Сообщения
462
Реакции
84
if ("_VALUE_".search('seri')) {"1"} else {""} ~ serial_status

'seri' это часть строки serial_status?
 

admin

Администратор
Команда форума
Регистрация
30.09.2022
Сообщения
462
Реакции
84
Код:
24 ~ https://api1653399847.bhcesh.me/list?token=4c250f7ac0a8c8a658c789186b9a58a5&limit=99 ~ results.0.id ~ https://apicollaps.cc/franchise/details?token=4c250f7ac0a8c8a658c789186b9a58a5&kinopoisk_id=[kp_id] ~ kinopoisk_id <> kp_id ~ imdb_id <> custom.imdb_id ~ name <> title_ru ~ name_eng <> title_en ~ year <> year ~ type <> type ~ quality <> quality ~ premier <> premiere ~ description <> description ~ country <> country <> <> <> Object.values(_OBJECT_) ~ genre <> genre <> <> <> Object.values(_OBJECT_) ~ director.0 <> director ~ actors.0 <> actor <> 5 ~ actors_dubl.0 <> custom.actors_dubl <> 5 ~ voiceActing <> translate <> 1 ~ id <> custom.movie_id ~ world_art_id <> custom.wa_id ~ slogan <> custom.slogan <> <> <> if ("_VALUE_" === "—") {""} ~ age <> custom.age ~ type <> custom.type ~ time <> custom.time <> <> <> if ("_VALUE_" === "—") {""} ~ serial_status <> custom.serial_status ~ budget <> custom.budget ~ fees_use <> custom.fees_use ~ fees_world <> custom.fees_world ~ fees_rus <> custom.fees_rus ~ rate_mpaa <> custom.rate_mpaa ~ trailers.0.iframe_url <> custom.trailer ~ trivia <> custom.trivia ~ "1" <> poster

1685372174337.png
 

Aleksey

Продвинутый пользователь
Регистрация
04.10.2022
Сообщения
165
Реакции
40
if ("_VALUE_".search('ser')) {"1"} else {""} ~ serial_status

'seri' это часть строки serial_status?
нет, это фильтр согласно этой инструкции
1685371766461.png

Строка type <> custom.type! <> <> <> if ("_VALUE_".search('ser')) {"1"} else {""} делает следующее:
  • Взять type
  • Занести его в кастомное поле custom.type и чтобы оно было обязательное custom.type!
  • Если в поле type будет найдено слово содержащее 'ser' (в json по разному отдается, гдето написано serial, serials, series, carton-serial и т.п.) то пишем в поле тип 1 (1-это сериал), в противном случае, сделать пустоту if ("_VALUE_".search('ser')) {"1"} else {""}
Таким образом будут сохранены только сериалы, а если пустота в обязательном поле, то сохранения не будет.
 
Последнее редактирование:

Aleksey

Продвинутый пользователь
Регистрация
04.10.2022
Сообщения
165
Реакции
40
Код:
24 ~ https://api1653399847.bhcesh.me/list?token=4c250f7ac0a8c8a658c789186b9a58a5&limit=99 ~ results.0.id ~ https://apicollaps.cc/franchise/details?token=4c250f7ac0a8c8a658c789186b9a58a5&kinopoisk_id=[kp_id] ~ kinopoisk_id <> kp_id ~ imdb_id <> custom.imdb_id ~ name <> title_ru ~ name_eng <> title_en ~ year <> year ~ type <> type ~ quality <> quality ~ premier <> premiere ~ description <> description ~ country <> country <> <> <> Object.values(_OBJECT_) ~ genre <> genre <> <> <> Object.values(_OBJECT_) ~ director.0 <> director ~ actors.0 <> actor <> 5 ~ actors_dubl.0 <> custom.actors_dubl <> 5 ~ voiceActing <> translate <> 1 ~ id <> custom.movie_id ~ world_art_id <> custom.wa_id ~ slogan <> custom.slogan <> <> <> if ("_VALUE_" === "—") {""} ~ age <> custom.age ~ type <> custom.type ~ time <> custom.time <> <> <> if ("_VALUE_" === "—") {""} ~ serial_status <> custom.serial_status ~ budget <> custom.budget ~ fees_use <> custom.fees_use ~ fees_world <> custom.fees_world ~ fees_rus <> custom.fees_rus ~ rate_mpaa <> custom.rate_mpaa ~ trailers.0.iframe_url <> custom.trailer ~ trivia <> custom.trivia ~ "1" <> poster

Посмотреть вложение 341
Эти параметры получить я могу, там все просто, мне же нужно получить даты релизов епизодов их название, вся сложность в том что это вложенные массивы, обернутые как объекты, я просто не совсем понимаю как к ним подобраться
 

admin

Администратор
Команда форума
Регистрация
30.09.2022
Сообщения
462
Реакции
84

Тут смотрели?

 

Aleksey

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

Тут смотрели?

Спасибо за данный пост, я его не видел ранее. Как выяснилось я почти правильно составил строку для доступа к данным, нашел свою ошибку и теперь строка имеет вид:
Код:
0 ~ https://api.bhcesh.me/list?token=265f516a6c27b9ea79b2479c7c95cea7&limit=99&page=[page] ~ results.0.id ~ https://api.bhcesh.me/franchise/details?token=265f516a6c27b9ea79b2479c7c95cea7&kinopoisk_id=[id] ~ kinopoisk_id <> kp_id ~ type <> custom.type! <> <> <> if ("_VALUE_".search("ser") != -1) {"1"} else {""} ~ serial_status <> custom.serial_status ~ seasons.0.season <> custom.seasons.season ~ seasons.0.season.0.episodes.0.episode <> custom.seasons.season.episodes.episode ~ seasons.0.season.0.episodes.0.name <> custom.seasons.season.episodes.name ~ seasons.0.season.0.episodes.0.release_world <> custom.seasons.season.episodes.release_world

Результат выложил вдруг кому пригодится.
 
Последнее редактирование:

Aleksey

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

Aleksey

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

JSON:
    "seasons": [
        {
            "season":"1",
            "episodes": [
                {
                    "episode": "1",
                    "name": "Тест",
                    "picture": "https://example.ru",
                    "release_world": "2022-02-20",
                    "release_ru": "2022-02-21"
                },
                {
                    "episode": "2",
                    "name": "Тест",
                    "picture": "https://example.ru",
                    "release_world": "2022-02-20",
                    "release_ru": "2022-02-21"
                }
            ]
        },
        {
            "season":"2",
            "episodes": [
                {
                    "episode": "1",
                    "name": "Тест",
                    "picture": "https://example.ru",
                    "release_world": "2022-02-20",
                    "release_ru": "2022-02-21"
                },
                {
                    "episode": "2",
                    "name": "Тест",
                    "picture": "https://example.ru",
                    "release_world": "2022-02-20",
                    "release_ru": "2022-02-21"
                }
            ]
        }
    ]

Для записи использую следующие пути:
custom.seasons.season ~ custom.seasons.episodes.episode ~ custom.seasons.season.episodes.name ~ custom.seasons.season.episodes.picture ~ custom.seasons.season.episodes.release_world ~ custom.seasons.season.episodes.release_ru

Создается впечатление что поле custom - одномерный массив и него соответственно невозможно записать многомерные массивы (максимум одномерные), может есть у кого соображения по данному поводу?
 
Последнее редактирование:
Верх