YaNesyTortiK / AnimeParsers

Библиотека с парсерами аниме/дорам плееров
MIT License
14 stars 1 forks source link
aniboom anime animego jutsu kodik parser parser-library parsing shikimori

AnimeParsers

Описание

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

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

Установка

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

pip install lxml

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

Оглавление

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)"
          },
      ]
    2. Поиск с дополнительной информацией / Расширенный поиск
      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 - Список жанров аниме (сюда же темы) (по умолчанию пусто (не учитывается в фильтрах))

      Список доступных жанров При передаче аргумента обязательно указывать жанр как указано в списке ниже (То есть "{номер}-{название на английском}") ```json { "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']
      )

      Возвращает словарь

Типы исключений

В данной библиотеке добавлены следующие исключения: