Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

anime-parsers-ru

Package Overview
Dependencies
Maintainers
1
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

anime-parsers-ru

Python package for parsing russian anime players

  • 1.9.3
  • PyPI
  • Socket score

Maintainers
1

AnimeParsers

Описание

Данный проект нацелен на создание наиболее широкого спектра парсеров на python для различных аниме-плееров в русскоязычном/снг сегменте

Что есть на данный момент

  • Парсер Kodik (автоматическое получение api ключа)
  • Асинхронный парсер Kodik
  • Парсер AniBoom (на основе animego, не требует api ключей)
  • Асинхронный парсер Aniboom
  • Парсер JutSu (без функции поиска, не требует api ключей)
  • Парсер Shikimori (с возможностью использовать псевдо-api, не требует api ключей)
  • Асинхронный парсер Shikimori

Установка

  • Стандартная установка:
    pip install anime-parsers-ru
    
  • Установка с lxml:
    pip install anime-parsers-ru[lxml]
    
    Для использования lxml при инициализации парсера установите параметр use_lxml = True
  • Установка с асинхронными библиотеками (без lxml):
    pip install anime-parsers-ru[async]
    

Установка lxml вручную:

pip install lxml

Инструкция к парсерам

Оглавление

  • Kodik инструкция
  • AniBoom инструкция
  • JutSu инструкция
  • Shikimori инструкция
  • Типы Исключений

Kodik инструкция

[!TIP] В большинстве случаев в комментариях к функциям описаны шаблоны и возможные значения возвращаемых данных

  1. Установите и импортируйте библиотеку

    Стандартно:

    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
    
  2. Поиск аниме по названию

    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)"
    },
    ]
    
  3. Поиск аниме по 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)"
    },
    ]
    
  4. Получить список аниме

    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, если след. страниц нет)"
    )
    
  5. Получить информацию об аниме

    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") # список словарей
      
  6. Прямая ссылка на видеофайл

    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)

    1. Ссылка Пример: //cloud.kodik-storage.com/useruploads/67b6e546-e51d-43d2-bb11-4d8bfbedc2d7/d6f4716bc90bd30694cf09b0062d07a2:2024062705/ К данной ссылке в начале нужно добавить http: или https:, а в конце качество.mp4 (720.mp4) (Обычно доступны следующие варианты качества: 360, 480, 720)
    2. Максимально возможное качество Прим: 720 (1280x720)

[!IMPORTANT] В случае, если аниме является фильмом или содержит только одну серию, в параметр seria_num указывается значение 0. В случае если перевод/субтитры неизвестны или нет выбора, в параметр translation_id указывается значение "0"

  1. Получить токен
    parser.get_token() # строка
    # Или
    KodikParser.get_token()
    
    Использует один из скриптов кодика в котором указан api ключ, поэтому может не работать из-за внесенных изменений

AniBoom инструкция

  1. Установите и импортируйте библиотеку

    pip install anime-parsers-ru
    
    from anime_parsers_ru import AniboomParser
    
    parser = AniboomParser()
    

    Для асинхронного кода:

    pip install anime-parsers-ru[async]
    
    from anime_parsers_ru import AniboomParserAsync
    
    parser = AniboomParserAsync()
    # Далее перед всеми функциями дополнительно нужно прописывать await
    
  2. Поиск по названию

    1. Быстрый поиск
    parser.fast_search("Название аниме")
    

    Возвращает список из словарей в виде:

    [
            {
                "title": "Название аниме",
                "year": "Год выпуска",
                "other_title": "Другое название(оригинальное название)",
                "type": "Тип аниме (ТВ сериалфильм, ...)",
                "link": "Ссылка на страницу с информацией",
                "animego_id": "id на анимего (по сути в ссылке на страницу с информацией последняя цифра и есть id)"
            },
        ]
    
    1. Поиск с дополнительной информацией / Расширенный поиск
    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)"
        },
    ]
    
  3. Данные по эпизодам. Если в аниме 1 эпизод или это фильм, то данных по эпизодам может не быть.

    parser.episodes_info('ссылка на страницу аниме на animego.org') # Ссылка доступна из поиска по ключу 'link'
    

    Возвращает отсортированный по номеру серии список:

    [   
        {
            "num": "Номер эпизода",
            "title": "Название эпизода",
            "date": "Даты выхода (предполагаемые если анонс)",
            "status": "'вышло' или 'анонс' (Имеется в виду вышло в оригинале, не переведено)"
        },
    ]
    
  4. Данные по аниме (как в полном/расширенном поиске)

    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)"
    },
    
  5. Данные по переводам (которые есть в плеере aniboom)

    parser.get_translation_info('animego_id') # Ссылка доступна из поиска по ключу 'animego_id'
    

    Возвращает список словарей:

    [
        {
            "name": "Название студии озвучки",
            "translation_id": "id перевода в плеере aniboom"
        }
    ]
    
  6. Получить контент файла 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.

  1. Сохранить 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.

JutSu инструкция

  1. Установите и импортируйте библиотеку

    pip install anime-parsers-ru
    
    from anime_parsers_ru import JutsuParser
    
    parser = JutsuParser()
    
  2. Данные по аниме (по ссылке на страницу)

    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 (страница с плеером)",
        ]
    }
    
  3. Получить ссылку на 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/

Shikimori инструкция

  1. Установите и импортируйте библиотеку
    pip install anime-parsers-ru
    
    from anime_parsers_ru import ShikimoriParser
    
    parser = ShikimoriParser()
    
    Для асинхронного кода:
    pip install anime-parsers-ru[async]
    
    from anime_parsers_ru import ShikimoriParserAsync
    
    parser = ShikimoriParserAsync(<ваш api ключ>) # Если нет ключа, оставьте пустым
    # Далее перед всеми функциями дополнительно нужно прописывать await
    

[!NOTE] Шикимори ограничивает частоту запросов на сервер. Если шикимори возвращает код ответа 520, парсер вернет exception TooManyRequests. Для избежания этой ошибки делайте задержку 1-3 секунды между запросами.

  1. Поиск аниме по названию

    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)"
        }
    ]
    
  2. Информация об аниме

    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 Сериал, Фильм, т.п.)"
    }
    
  3. Дополнительная информация об аниме (связанные аниме (продолжения, предыстории), авторы, главные персонажи, скриншоты, видео, похожие аниме)

    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": "Ссылка на шикимори"
            }
        ]
    }
    
  4. Получить список аниме с шикимори по фильтрам

    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": "год выхода аниме"
    }
    
  5. Вспомогательные функции

  6. Поиск аниме и информации по аниме через псевдо 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. То есть сервер перегружен и не может ответить на запрос

Keywords

FAQs


Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc