Данный проект нацелен на создание наиболее широкого спектра парсеров на python для различных аниме-плееров в русскоязычном/снг сегменте
Актуальная стабильная версия доступна на pypi или в релизах на гитхабе
- Парсер Kodik (автоматическое получение api ключа)
- Асинхронный парсер Kodik
- Парсер AniBoom (на основе animego, не требует api ключей)
- Асинхронный парсер Aniboom
- Парсер JutSu (без функции поиска, не требует api ключей)
- Парсер Shikimori (с возможностью использовать псевдо-api, не требует api ключей)
- Асинхронный парсер Shikimori
- Стандартная установка:
pip install anime-parsers-ru
- Установка с lxml:
Для использования lxml при инициализации парсера установите параметр
pip install anime-parsers-ru[lxml]
use_lxml = True
- Установка с асинхронными библиотеками (без lxml):
pip install anime-parsers-ru[async]
Установка lxml вручную:
pip install lxml
Important
Если вы хотите использовать функции библиотеки для апи кодика, то вся документация расположена в файле KODIK_API.md
Tip
В большинстве случаев в комментариях к функциям описаны шаблоны и возможные значения возвращаемых данных
-
Установите и импортируйте библиотеку
Стандартно:
pip install anime-parsers-ru
С lxml:
pip install anime-parsers-ru[lxml]
from anime_parsers_ru import KodikParser parser = KodikParser(<ваш api ключ>) # Если нет ключа, оставьте пустым
Для асинхронного кода:
pip install anime-parsers-ru[async]
(Установка без lxml)
from anime_parsers_ru import KodikParserAsync parser = KodikParserAsync(<ваш api ключ>) # Если нет ключа, оставьте пустым # Далее перед всеми функциями дополнительно нужно прописывать await
-
Поиск аниме по названию
parser.search(title="Наруто", limit=None, include_material_data=True, anime_status=None, strict=False, only_anime=False) # список словарей # title - Название аниме/фильма/сериала # limit - количество результатов выдачи (int) (результатов будет сильно меньше чем указанное число, так как в выдаче результаты повторяются) # include_material_data - Добавлять дополнительные данные об элементе # anime_status - Статус выхода аниме (доступно: released, ongoing, None - если ищется не аниме или любой статус) # strict - Исключение названий далеких от оригинального # only_anime - возвращать только элементы где type in ['anime', 'anime-serial']
Возвращает:
[ { "title": "Название", "type": "тип мультимедиа (anime, film, ...)", "year": "Год выпуска фильма", "screenshots": [ "ссылки на скриншоты" ], "shikimori_id": "Id шикимори, если нет - None", "kinopoisk_id": "Id кинопоиска, если нет - None", "imdb_id": "Id imdb, если нет - None", "worldart_link": "ссылка на worldart, если нет - None", "additional_data": { "Здесь будут находится все остальные данные выданные кодиком, не связанные с отдельным переводом" }, "material_data": { "Здесь будут все данные о сериале имеющиеся у кодика. (None если указан параметр include_material_data=False) В том числе оценки на шикимори, статус выхода, даты анонсов, выхода, все возможные названия, жанры, студии и многое другое." }, "link": "ссылка на kodik.info (Пример: //kodik.info/video/20609/e8fd5bc1190b7eb1ee1a3e1c3aec5f62/720p)" }, ]
-
Поиск аниме по id
parser.search_by_id(id="20", id_type="shikimori", limit=None) # id - id аниме на одном из сайтов # id_type - с какого сайта id (Поддерживается: shikimori, kinopoisk, imdb) # limit - количество результатов выдачи (int) (результатов будет сильно меньше чем указанное число, так как в выдаче результаты повторяются)
Возвращает:
[ { "title": "Название", "type": "тип мультимедиа (anime, film, ...)", "year": "Год выпуска фильма", "screenshots": [ "ссылки на скриншоты" ], "shikimori_id": "Id шикимори, если нет - None", "kinopoisk_id": "Id кинопоиска, если нет - None", "imdb_id": "Id imdb, если нет - None", "worldart_link": "ссылка на worldart, если нет - None", "additional_data": { "Здесь будут находится все остальные данные выданные кодиком, не связанные с отдельным переводом" }, "material_data": { "Здесь будут все данные о сериале имеющиеся у кодика. (None если указан параметр include_material_data=False) В том числе оценки на шикимори, статус выхода, даты анонсов, выхода, все возможные названия, жанры, студии и многое другое." }, "link": "ссылка на kodik.info (Пример: //kodik.info/video/20609/e8fd5bc1190b7eb1ee1a3e1c3aec5f62/720p)" }, ]
-
Получить список аниме
data = parser.get_list(limit_per_page=50, pages_to_parse=1, include_material_data=True, anime_status=None, only_anime=False, start_from=None) # limit_per_page - количество результатов на одной странице (итоговых результатов будет сильно меньше чем указан параметр) # pages_to_parse - количество страниц для обработки (каждая страница - отдельный запрос) # include_material_data - включить в результат дополнительные данные # anime_status - Статус выхода аниме (доступно: released, ongoing, None - если ищется не аниме или любой статус) # only_anime - возвращать только элементы где type in ['anime', 'anime-serial'] # start_from - начать поиск со страницы под id (id возвращается вторым элементом результата функции)
Возвращает:
( [ { "title": "Название", "type": "тип мультимедиа (anime, film, ...)", "year": "Год выпуска фильма", "screenshots": [ "ссылки на скриншоты" ], "shikimori_id": "Id шикимори, если нет - None", "kinopoisk_id": "Id кинопоиска, если нет - None", "imdb_id": "Id imdb, если нет - None", "worldart_link": "ссылка на worldart, если нет - None", "additional_data": { "Здесь будут находится все остальные данные выданные кодиком, не связанные с отдельным переводом" }, "material_data": { "Здесь будут все данные о сериале имеющиеся у кодика. (None если указан параметр include_material_data=False) В том числе оценки на шикимори, статус выхода, даты анонсов, выхода, все возможные названия, жанры, студии и многое другое." }, "link": "ссылка на kodik.info (Пример: //kodik.info/video/20609/e8fd5bc1190b7eb1ee1a3e1c3aec5f62/720p)" }, ], "next_page_id": "id следующей страницы (для последовательного парсинга нескольких страниц) (может быть None, если след. страниц нет)" )
-
Получить информацию об аниме
parser.get_info(id="z20", id_type="shikimori") # id - id аниме на одном из сайтов # id_type - с какого сайта id (Поддерживается: shikimori, kinopoisk, imdb)
Возвращает:
{ "series_count": 220, "translations": [ {"id": "735", "type": "Озвучка", "name": "2x2 (220 эп.)"}, {"id": "609", "type": "Озвучка", "name": "AniDUB (220 эп.)"}, {"id": "869", "type": "Субтитры", "name": "Субтитры (220 эп.)"}, {"id": "958", "type": "Озвучка", "name": "AniRise (135 эп.)"}, {"id": "2550", "type": "Озвучка", "name": "ANI.OMNIA (8 эп.)"} ] }
- Получить отдельно кол-во серий:
parser.series_count("z20", "shikimori") # число
- Получить отдельно переводы:
parser.translations("z20", "shikimori") # список словарей
- Получить отдельно кол-во серий:
-
Прямая ссылка на видеофайл
parser.get_link( id="z20", id_type="shikimori", seria_num=1, translation_id="609") # Кортеж # id - id медиа # id_type - тип id (возможные: shikimori, kinopoisk, imdb) # seria_num - номер серии (если фильм или одно видео - 0) # translation_id - id перевода (прим: Anilibria = 610, если неизвестно - 0)
Возвращает кортеж:
("//cloud.kodik-storage.com/useruploads/67b6e546-e51d-43d2-bb11-4d8bfbedc2d7/d6f4716bc90bd30694cf09b0062d07a2:2024062705/", 720)
- Ссылка
Пример:
//cloud.kodik-storage.com/useruploads/67b6e546-e51d-43d2-bb11-4d8bfbedc2d7/d6f4716bc90bd30694cf09b0062d07a2:2024062705/
К данной ссылке в начале нужно добавитьhttp:
илиhttps:
, а в конце качество.mp4 (720.mp4
) (Обычно доступны следующие варианты качества:360
,480
,720
) - Максимально возможное качество
Прим:
720
(1280x720)
- Ссылка
Пример:
Important
В случае, если аниме является фильмом или содержит только одну серию, в параметр seria_num
указывается значение 0
. В случае если перевод/субтитры неизвестны или нет выбора, в параметр translation_id
указывается значение "0"
-
Прямое обращение к апи кодика
parser.api_request ( endpoint="list", filters={ "limit": 5 }, parameters={ "with_episodes_data": True } ) # endpoint - ссылка куда направляется запрос (доступно: "search", "list", "translations") # filters - фильтры запроса # parameters - дополнительные параметры (для удобства можно их записывать в один словарь с фильтрами)
Возвращает необработанный ответ от сервера кодика. Для подробного списка фильтров, параметров и примеров смотрите инструкцию.
-
Получить токен
parser.get_token() # строка # Или KodikParser.get_token()
Использует один из скриптов кодика в котором указан api ключ, поэтому может не работать из-за внесенных изменений
-
Установите и импортируйте библиотеку
pip install anime-parsers-ru
from anime_parsers_ru import AniboomParser parser = AniboomParser() # Если вы знаете что есть актуальное зеркало сайта, можете указать его домен в параметре `mirror` при инициализации класса
Для асинхронного кода:
pip install anime-parsers-ru[async]
from anime_parsers_ru import AniboomParserAsync parser = AniboomParserAsync() # Далее перед всеми функциями дополнительно нужно прописывать await # Если вы знаете что есть актуальное зеркало сайта, можете указать его домен в параметре `mirror` при инициализации класса
-
Поиск по названию
- Быстрый поиск
parser.fast_search("Название аниме")
Возвращает список из словарей в виде:
[ { "title": "Название аниме", "year": "Год выпуска", "other_title": "Другое название(оригинальное название)", "type": "Тип аниме (ТВ сериал, фильм, ...)", "link": "Ссылка на страницу с информацией", "animego_id": "id на анимего (по сути в ссылке на страницу с информацией последняя цифра и есть id)" }, ]
- Поиск с дополнительной информацией / Расширенный поиск
parser.search("Название аниме")
Возвращает список из словарей:
[ { "title": "Название", "other_titles": ["Альтернативное название 1", "..."], "status": "Статус аниме (онгоинг, анонс, вышел, ...)", "type": "Тип аниме (ТВ сериал, фильм, ...)", "genres": ["Жанр1", "Жанр2", "..."], "description": "описание", "episodes": "если аниме вышло, то количество серий, если еще идет, то 'вышло / всего'", "episodes_info": [ { "num": "Номер эпизода", "title": "Название эпизода", "date": "Даты выхода (предполагаемые если анонс)", "status": "'вышло' или 'анонс' (Имеется в виду вышло в оригинале, не переведено)", }, ], "translations": [ { "name": "Название студии", "translation_id": "id перевода в плеере aniboom" }, ], "poster_url": "Ссылка на постер аниме", "trailer": "Ссылка на ютуб embed трейлер", "screenshots": [ "Список ссылок на скриншоты" ], "other_info": { // Данная информация может меняться в зависимости от типа или состояния тайтла "Возрастные ограничения": "(прим: 16+)", "Выпуск": "(прим: с 2 апреля 2024)", "Главные герои": ["Список главных героев"], "Длительность": "(прим: 23 мин. ~ серия)", "Первоисточник": "(прим: Легкая новела)", "Рейтинг MPAA": "(прим: PG-13)", "Сезон": "(прим. Весна 2024)", "Снят по ранобэ": "название ранобэ (Или так же может быть 'Снят по манге')", "Студия": "название студии" }, "link": "Ссылка на страницу с информацией", "animego_id": "id на анимего (по сути в ссылке на страницу с информацией последняя цифра и есть id)" }, ]
-
Данные по эпизодам. Если в аниме 1 эпизод или это фильм, то данных по эпизодам может не быть.
parser.episodes_info('ссылка на страницу аниме на animego.org') # Ссылка доступна из поиска по ключу 'link'
Возвращает отсортированный по номеру серии список:
[ { "num": "Номер эпизода", "title": "Название эпизода", "date": "Даты выхода (предполагаемые если анонс)", "status": "'вышло' или 'анонс' (Имеется в виду вышло в оригинале, не переведено)" }, ]
-
Данные по аниме (как в полном/расширенном поиске)
parser.anime_info('ссылка на страницу аниме на animego.org') # Ссылка доступна из поиска по ключу 'link'
Возвращает словарь:
{ "title": "Название", "other_titles": ["Альтернативное название 1", "..."], "status": "Статус аниме (онгоинг, анонс, вышел, ...)", "type": "Тип аниме (ТВ сериал, фильм, ...)", "genres": ["Жанр1", "Жанр2", "..."], "description": "описание", "episodes": "если аниме вышло, то количество серий, если еще идет, то 'вышло / всего'", "episodes_info": [ { "num": "Номер эпизода", "title": "Название эпизода", "date": "Даты выхода (предполагаемые если анонс)", "status": "'вышло' или 'анонс' (Имеется в виду вышло в оригинале, не переведено)", }, ], "translations": [ { "name": "Название студии", "translation_id": "id перевода в плеере aniboom" }, ], "poster_url": "Ссылка на постер аниме", "trailer": "Ссылка на ютуб embed трейлер", "screenshots": [ "Список ссылок на скриншоты" ], "other_info": { // Данная информация может меняться в зависимости от типа или состояния тайтла "Возрастные ограничения": "(прим: 16+)", "Выпуск": "(прим: с 2 апреля 2024)", "Главные герои": ["Список главных героев"], "Длительность": "(прим: 23 мин. ~ серия)", "Первоисточник": "(прим: Легкая новела)", "Рейтинг MPAA": "(прим: PG-13)", "Сезон": "(прим. Весна 2024)", "Снят по ранобэ": "название ранобэ (Или так же может быть 'Снят по манге')", "Студия": "название студии" }, "link": "Ссылка на страницу с информацией", "animego_id": "id на анимего (по сути в ссылке на страницу с информацией последняя цифра и есть id)" },
-
Данные по переводам (которые есть в плеере aniboom)
parser.get_translation_info('animego_id') # Ссылка доступна из поиска по ключу 'animego_id'
Возвращает список словарей:
[ { "name": "Название студии озвучки", "translation_id": "id перевода в плеере aniboom" } ]
-
Получить контент файла mpd (mp4 файл разбитый на чанки) в виде строки. При сохранении данной строки в .mpd файл и при открытии его плеером, который поддерживает такой формат (прим: VLC PLayer), можно смотреть серию без рекламы. Обратите внимание, что в данном файле находятся именно ссылки на чанки, а не само видео, поэтому потребуется доступ в интернет. (Вы можете использовать ffmpeg для конвертации этого файла в mp4 формат)
parser.get_mpd_playlist('animego_id', 'episode_num', 'translation_id') # animego_id можно найти в результате поиска по ключу 'animego_id' (либо взять последние цифры в ссылке на страницу аниме на animego.org) # episode_num - номер вышедшего эпизода (нужно чтобы эпизод вышел именно с выбранной озвучкой) # translation_id - id перевода в базе aniboom (Можно найти либо в результате поиска, либо через anime_info, либо через get_translation_info)
Возвращает строку - контент mpd файла
Important
В случае, если аниме является фильмом или содержит только одну серию, в параметр episode_num
указывается значение 0
.
- Сохранить mpd файл (Дополняет предыдущую функцию get_mpd_playlist)
Сохраняет файл по указанному имени/пути
parser.get_as_file('animego_id', 'episode_num', 'translation_id', 'filename') # animego_id можно найти в результате поиска по ключу 'animego_id' (либо взять последние цифры в ссылке на страницу аниме на animego.org) # episode_num - номер вышедшего эпизода (нужно чтобы эпизод вышел именно с выбранной озвучкой) # translation_id - id перевода в базе aniboom (Можно найти либо в результате поиска, либо через anime_info, либо через get_translation_info) # filename - имя файла или путь
Important
В случае, если аниме является фильмом или содержит только одну серию, в параметр episode_num
указывается значение 0
.
-
Установите и импортируйте библиотеку
pip install anime-parsers-ru
from anime_parsers_ru import JutsuParser parser = JutsuParser() # Если вы знаете что есть актуальное зеркало сайта, можете указать его домен в параметре `mirror` при инициализации класса
-
Данные по аниме (по ссылке на страницу)
parser.get_anime_info("Ссылка на страницу") # Пример ссылки: https://jut.su/tondemo-skill/ # Для аниме: Кулинарные скитания в параллельном мире
Возвращает словарь:
{ "title": "Название аниме", "origin_title": "Оригинальное название (транслит японского названия на английском)", "age_rating": "Возрастное ограничение", "description": "Описание", "years": ["Год выхода 1 сезона", "Год выхода 2 сезона"], "genres": ["Жанр 1", "Жанр 2"], "poster": "Ссылка на картинку (плохое качество)", "seasons": [ [ // 1 сезон будет обязательно, даже если у аниме нет других сезонов "ссылка на 1 серию 1 сезона (страница с плеером)", "ссылка на 2 серию 1 сезона (страница с плеером)" ], [ // 2 сезон если есть "ссылка на 1 серию 2 сезона (страница с плеером)", "ссылка на 2 серию 2 сезона (страница с плеером)" ], ], "seasons_names": [ // Если у аниме только 1 сезон, этот список будет пустым "Название 1 сезона", "Название 2 сезона" ], "films": [ // Если фильмов нет - список пустой "Ссылка на фильм 1 (страница с плеером)", "Ссылка на фильм 2 (страница с плеером)", ] }
-
Получить ссылку на mp4 файл
parser.get_mp4_link('ссылка на страницу с плеером') # Пример ссылки: https://jut.su/tondemo-skill/episode-1.html # Еще пример ссылки: https://jut.su/ookami-to-koshinryou/season-1/episode-1.html
Возвращает словарь:
{ "360": "ссылка на mp4 файл с качеством 360p", }
Important
Для разных аниме разное количество доступных качеств плеера. (Например для "Наруто" доступно только 360 и 480, для большинства новых аниме доступно качество до 1080) Также jutsu не позволяет выбрать озвучку для аниме.
Note
Для jutsu нет функции поиска, потому что он использует поиск яндекса по сайту и из-за того что он "умный" он может работать абсолютно непредсказуемо. В качестве "поиска" вы можете использовать оригинальное название аниме. Так как ссылка формируется по следующей схеме: Название аниме: Волчица и пряности Оригинальное название: Ookami to Koushinryou Ссылка на страницу: https://jut.su/ookami-to-koshinryou/
- Установите и импортируйте библиотеку
pip install anime-parsers-ru
Для асинхронного кода:from anime_parsers_ru import ShikimoriParser parser = ShikimoriParser() # Если вы знаете что есть актуальное зеркало сайта, можете указать его домен в параметре `mirror` при инициализации класса
pip install anime-parsers-ru[async]
from anime_parsers_ru import ShikimoriParserAsync parser = ShikimoriParserAsync() # Далее перед всеми функциями дополнительно нужно прописывать await # Если вы знаете что есть актуальное зеркало сайта, можете указать его домен в параметре `mirror` при инициализации класса
Note
Шикимори ограничивает частоту запросов на сервер. Если шикимори возвращает код ответа 520, парсер вернет exception TooManyRequests. Для избежания этой ошибки делайте задержку 1-3 секунды между запросами.
-
Поиск аниме по названию
parser.search('Название аниме')
Возвращает список словарей:
[ { "genres": ["Жанр1", "Жанр2"], "link": "Ссылка на страницу аниме", "original_title": "Оригинальное название (транслит японского названия на английском)", "poster": "Ссылка на постер к аниме (плохое качество) (если есть, иначе None)", "shikimori_id": "id шикимори", "status": "статус (вышло, онгоинг, анонс) (если есть, иначе None)", "studio": "студия анимации (если есть, иначе None)", "title": "Название", "type": "тип аниме (TV сериал, OVA, ONA, ...) (если есть, иначе None)", "year": "год выхода (если есть, иначе None)" } ]
-
Информация об аниме
parser.anime_info('shikimori id') # id шикимори можно получить с помощью функции # parser.id_by_link
Возвращает словарь:
{ "dates": "Даты выхода", "description": "Описание", "episode_duration": "Средняя продолжительность серии", "episodes": "Количество эпизодов если статус 'вышло' или 'вышедших эпизодов / анонсировано эпизодов' или None (если фильм)", "genres": ["Жанр1", "Жанр2"], "licensed": "Кто лицензировал в РФ или None", "licensed_in_ru": "Название аниме как лицензировано в РФ или None", "next_episode": "Дата выхода следующего эпизода или None", "original_title": "Оригинальное название", "picture": "Ссылка на jpeg постер", "premiere_in_ru": "Дата премьеры в РФ или None", "rating": "возрастной рейтинг", "score": "оценка на шикимори", "status": "статус выхода", "studio": "студия анимации", "themes": ["Тема1", "Тема2"], "title": "Название на русском", "type": "тип аниме (TV Сериал, Фильм, т.п.)" }
-
Дополнительная информация об аниме (связанные аниме (продолжения, предыстории), авторы, главные персонажи, скриншоты, видео, похожие аниме)
parser.additional_anime_info('Ссылка на страницу шикимори') # прим: https://shikimori.one/animes/z20-naruto
Возвращает словарь:
{ "related": [ { "date": "Даты выхода/сезон", "name": "Название", "picture": "Ссылка на картинку", "relation": "тип связи (продолжение, предыстория, адаптация и т.п.)", "type": "Тип (TV сериал, OVA, ONA, манга, ранобэ и т.д.)", "url": "Ссылка на страницу шикимори" } ], "staff": [ { "name": "Имя человека (на русском)", "roles": ["Роль1", "Роль2"], "link": "ссылка шикимори на человека" } ], "main_characters": [ { "name": "Имя персонажа", "picture": "Картинка (jpeg)" } ], "screenshots": ["Ссылка на скриншот 1", "Ссылка на скриншот 2"], "videos": [ { "name": "Название видео", "link": "Ссылка на видео (обычно ютуб)" } ], "similar": [ { "name": "Название аниме (похожего)", "picture": "Картинка (постер)", "link": "Ссылка на шикимори" } ] }
-
Получить список аниме с шикимори по фильтрам
parser.get_anime_list(status=['статус аниме1', 'статус аниме2'], anime_type=['тип аниме1', 'тип аниме2'], rating='возрастной рейтинг', genres=['Жанр1', 'Жанр2'], start_page='начальная страница', page_limit='количество страниц для парсинга', sort_by='принцип сортировки')
Доступные фильтры:
-
status - текущие статусы выхода (по умолчанию пусто (не учитывается в фильтрах))
Список доступных статусов
- ongoing - онгоинг
- anons - анонс
- released - вышло
- latest - вышло недавно
-
anime_type - типы аниме (по умолчанию пусто (не учитывается в фильтрах))
Список доступных типов
- tv - TV Сериал
- movie - Фильм
- ova - OVA
- ona - ONA
- special - спецвыпуск
- tv_special - TV спецвыпуск
- music - клип
- pv - проморолик
- cm - реклама
-
rating - возрастной рейтинг (по умолчанию None (не учитывается в фильтрах))
Список доступных возрастных рейтингов
- g - нет возрастного ограничения
- pg - рекомендуется присутствие родителей
- pg_13 - детям до 13 просмотр не желателен
- r - Лицам до 17 лет обязательно присутствие взрослого
- r_plus - Лицам до 17 лет просмотр запрещен
(Рейтинг rx - доступен только с аккаунтом (т.к. 18+) для поиска по такому рейтингу воспользуйтесь функцией deep_anime_search (описано ниже))
-
genres - Список жанров аниме (сюда же темы) (по умолчанию пусто (не учитывается в фильтрах))
Список доступных жанров
При передаче аргумента обязательно указывать жанр как указано в списке ниже (То есть "{номер}-{название на английском}")
{ "1-Action": "Экшен", "2-Adventure": "Приключения", "3-Racing": "Гонки", "4-Comedy": "Комедия", "5-Avant-Garde": "Авангард", "6-Mythology": "Мифология", "7-Mystery": "Тайна", "8-Drama": "Драма", "9-Ecchi": "Этти", "10-Fantasy": "Фэнтези", "11-Strategy-Game": "Стратегические игры", "13-Historical": "Исторический", "14-Horror": "Ужасы", "15-Kids": "Детское", "17-Martial-Arts": "Боевые искусства", "18-Mecha": "Меха", "19-Music": "Музыка", "20-Parody": "Пародия", "21-Samurai": "Самураи", "22-Romance": "Романтика", "23-School": "Школа", "24-Sci-Fi": "Фантастика", "25-Shoujo": "Сёдзё", "27-Shounen": "Сёнен", "29-Space": "Космос", "30-Sports": "Спорт", "31-Super-Power": "Супер сила", "32-Vampire": "Вампиры", "35-Harem": "Гарем", "36-Slice-of-Life": "Повседневность", "37-Supernatural": "Сверхъестественное", "38-Military": "Военное", "39-Detective": "Детектив", "40-Psychological": "Психологическое", "42-Seinen": "Сэйнэн", "43-Josei": "Дзёсей", "102-Team-Sports": "Командный спорт", "103-Video-Game": "Видеоигры", "104-Adult-Cast": "Взрослые персонажи", "105-Gore": "Жестокость", "106-Reincarnation": "Реинкарнация", "107-Love-Polygon": "Любовный многоугольник", "108-Visual-Arts": "Изобразительное искусство", "111-Time-Travel": "Путешествие во времени", "112-Gag-Humor": "Гэг-юмор", "114-Award-Winning": "Удостоено наград", "117-Suspense": "Триллер", "118-Combat-Sports": "Спортивные единоборства", "119-CGDCT": "CGDCT", "124-Mahou-Shoujo": "Махо-сёдзё", "125-Reverse-Harem": "Реверс-гарем", "130-Isekai": "Исэкай", "131-Delinquents": "Хулиганы", "134-Childcare": "Забота о детях", "135-Magical-Sex-Shift": "Магическая смена пола", "136-Showbiz": "Шоу-бизнес", "137-Otaku-Culture": "Культура отаку", "138-Organized-Crime": "Организованная преступность", "139-Workplace": "Работа", "140-Iyashikei": "Иясикэй", "141-Survival": "Выживание", "142-Performing-Arts": "Исполнительское искусство", "143-Anthropomorphic": "Антропоморфизм", "144-Crossdressing": "Кроссдрессинг", "145-Idols-(Female)": "Идолы (Жен.)", "146-High-Stakes-Game": "Игра с высокими ставками", "147-Medical": "Медицина", "148-Pets": "Питомцы", "149-Educational": "Образовательное", "150-Idols-(Male)": "Идолы (Муж.)", "151-Romantic-Subtext": "Романтический подтекст", "543-Gourmet": "Гурман" }
-
start_page - начальная страница (начиная с 1) (по умолчанию 1)
-
page_limit - какое количество страниц парсить (по умолчанию 3)
-
sort_by - тип сортировки (по умолчанию rating)
Список доступных сортировок
- rating - по рэйтингу
- popularity - по популярности
- name - по алфавиту
- aired_on - по дате выхода
- ranked_random - случайно
- id_desc - по id шикимори
[!] Если один из переданных параметров будет неверным (не содержится в списке доступных) - программа автоматически пропустит его.
Возвращает список словарей:
{ "original_title": "Оригинальное название (на английском)", "poster": "Ссылка на картинку-постер", "shikimori_id": "id шикимори", "title": "Название на русском", "type": "Тип аниме (TV Сериал, ONA, ...)", "url": "Ссылка на страницу аниме", "year": "год выхода аниме" }
-
-
Вспомогательные функции
- Ссылка на страницу шикимори по id
Возвращает ссылку (id: 53446 результат: https://shikimori.one/animes/53446-tondemo-skill-de-isekai-hourou-meshi)
parser.link_by_id('shikimori_id')
- Id по ссылке на шикимори
Возвращает shikimori_id (ссылка: https://shikimori.one/animes/53446-tondemo-skill-de-isekai-hourou-meshi id: 53446)
parser.id_by_link('ссылка на страницу')
- Ссылка на страницу шикимори по id
-
Поиск аниме и информации по аниме через псевдо api shikimori Данные функции используют предоставленную shikimori тестовую функцию для api. (https://shikimori.one/api/doc/graphql) Подробные примеры запросов и ответов вы можете посмотреть в файле SHIKI_API.md
-
Поиск аниме
parser.deep_search( title='Название аниме', search_parameters={'поисковый параметр 1': 'значение поискового параметра 1'}, return_parameters=['Параметр результата 1', 'параметр результата 2'] )
Возвращает список словарей
-
Информация об аниме по id
parser.deep_anime_info( shikimori_id='id шикимори', return_parameters=['Параметр результата 1', 'параметр результата 2'] )
Возвращает словарь
-
В данной библиотеке добавлены следующие исключения:
-
TokenError Обозначает неверный или отсутствующий токен в тех функциях где он требуется
-
ServiceError Обозначает ошибку сервера. Если сервер не вернул один из ожидаемых кодов или, если нет ожидаемых, не вернул код 200
-
PostArgumentError Обозначает ошибкув данных или их отсутсвие при передаче на сервер (обычно посредством POST запроса)
-
NoResults Обозначает отсутсвие результатов
-
UnexpectedBehaviour Обозначает непредвиденное поведение или ошибку, код-статус которой не был ожидаемым. (В некоторых случаях заменяет ServiceError)
-
QualityNotFound Обозначает что запрашиваемое качество видео не найдено
-
AgeRestricted Обозначает возрастную блокировку (требуется авторизация для доступа к этим данным)
-
TooManyRequests Обозначает http статус 429. То есть сервер заблокировал запрос из-за слишком частого обращения
-
ContentBlocked Обозначает что запрашиваемый контент или плеер заблокирован/недоступен
-
ServiceIsOverloaded Обозначает http статус 520. То есть сервер перегружен и не может ответить на запрос