Skip to main content

Anime extractors api implementation

Project description

anicli-api

Программный интерфейс набора парсеров аниме с различных источников.

Присутствует поддержка sync и async методов с помощью httpx библиотеки.

Парсеры работают на REST-API (если у источника есть доступ) или если такой интерфейс отсутствует, то с помощью lxml и regex библиотек.

install

pip install anicli-api

Overview

Структура проекта

  • source - наборы модулей для извлечения информации об аниме тайтлов из источников
  • player - наборы модулей для извлечения прямой ссылки на видео
anicli_api
├── base.py - базовый класс модуля-парсера
├── _http.py - предварительно сконфигурированные классы httpx.Client и httpx.AsyncClient
├── _logger.py - логгер
├── player - модули получения ссылок на видео
│     ├── parsers/... автоматически сгенерированные парсеры html страниц
│     ├── apis/... автоматически сгенерированные LLM rest-api клиенты
│     ├── ...  ready-made модули
│     ...
├── source - модули парсеров с источников
│     ├── parsers/... автоматически сгенерированные парсеры html страниц
│     ├── apis/... автоматически сгенерированные LLM rest-api клиенты
│     ├─ ... ready-made парсеры
│     ...
└── tools - прочие модули
dev/ - служебные модули со swagger документациями API и конфигурацией html парсеров

Схематичный принцип работы модуля из директории source

префикс a_ обозначает асинхронный метод, возвращаемые объекты идентичны

flowchart TD
    E[Extractor] -->|"search('QUERY') | a_search('QUERY')"| S("List[Search]")
    E -->|"ongoing() | a_ongoing()"| O("List[Ongoing]")

    O -->|"get_anime() | a_get_anime()"| A[Anime]
    S -->|"get_anime() | a_get_anime()"| A

    A -->|"get_episodes() | a_get_episodes()"|Ep["List[Episode]"]
    Ep -->|"get_sources() | a_get_sources()"|So["List[Source]"]
    So -->|"get_videos() | a_get_videos()"|V["List[Video]"]

quickstart

  1. вызов из установленного модуля PEP-0338:
python -m anicli-api.tools.dummy_cli <extractor-name>

# пример
python -m anicli-api.tools.dummy_cli animego
  1. вызов из склонированного проекта:
python anicli-api/tools/dummy_cli.py <extrator-name>
# пример
python anicli-api/tools/dummy_cli.py animego
  1. Использование в python коде:
from anicli_api.source.animego import Extractor
from anicli_api.tools import cli

if __name__ == '__main__':
    cli(Extractor())

cli() функция для простого ручного тестирования экстракторов, "имитирует" потенциальное настоящее приложение

Пример своей реализации

from anicli_api.source.animego import Extractor  # can usage any source


def _print_to_rows(items):
    print(*[f"{i}) {r}" for i, r in enumerate(items)], sep="\n")


if __name__ == "__main__":
    ex = Extractor()
    print("PRESS CTRL + C for exit app")
    while True:
        results = ex.search(input("search query > "))
        if not results:
            print("Not founded, try again")
        continue
    _print_to_rows(results)

    anime = results[int(input("anime > "))].get_anime()
    print(anime)

    episodes = anime.get_episodes()
    _print_to_rows(episodes)
    episode = episodes[int(input("episode > "))]

    sources = episode.get_sources()
    _print_to_rows(sources)
    source = sources[int(input("source > "))]

    videos = source.get_videos()
    _print_to_rows(videos)
    video = videos[int(input("video > "))]
    print(video.type, video.quality, video.url, video.headers)

С asyncio аналогично, но все методы получения объектов имеют префикс a_:

import asyncio
from anicli_api.source.animego import Extractor # или любой другой источник

async def main():
    ex = Extractor()
    prompt = input("search query > ")
    # a_ - async prefix.
    # simular in Ongoing, Anime, Episode, Source, Video objects
    results = await ex.a_search(prompt)
    print(*[f"{i}) {r}" for i, r in enumerate(results)], sep="\n")

if __name__ == '__main__':
    asyncio.run(main())

Player

Эти модули можно использовать как экстрактор прямых ссылок на видео

Эти модули минимально реализуют получение ссылок на видео с минимальными метаданными и заголовками для скачивания и не стремятся стать заменой yt-dlp

import asyncio

from anicli_api.player.sibnet import SibNet

async def main():
    videos = await SibNet().a_parse(URL)
    print(*videos)


if __name__ == '__main__':
    URL = 'https://video.sibnet.ru/shell.php?videoid=432356'
    print(*SibNet().parse(URL))
    # asyncio support!
    asyncio.run(main())

source description

  • name - имя модуля
  • type - тип источника получения данных.
    • API - rest-api (или graphql) запросы
    • SSR (server side rendering) - парсинг HTML страницы
  • note - примечания
  • dubbers - тип озвучек.
    • many - от различных авторов.
    • subtitles - только субтитры.
    • once - один вид (случайный)
    • author - своя
name url type dubbers note
animego https://animego.org SSR many источники kodik, animego, не работает на IP отличных от СНГ и стран прибалтики
anilibria https://aniliberty.top API author старое название, актуальное aniliberty
animevost https://animevost.org API author
jutsu https://jut.su SSR once Перешли на платную подписку.
sameband https://sameband.studio SSR author
yummy_anime_org https://yummyanime.in SSR many
yummy_anime https://site.yummyani.me API many
anilib_me https://animelib.org API many (???), при чрезмерной эксплуатации могут дать бан по ip (API запросы возвращают код 403)

players description

  • name - имя плеера
  • max quality - максимальное разрешение выдаваемое источником. Это может быть 0 (аудио, без видео), 144, 240, 360, 480, 720, 1080
  • note - примечания
name max quality note
kodik 720 (на старых тайтлах как ранние One Peace, Evangelion) - 480) работает только на IP СНГ и стран прибалтики
aniboom 1080 работает только на IP СНГ и стран прибалтики. Иногда не возвращает mpd ссылку на видео
sibnet 480
anilibria 720, иногда 1080
animevost 720
jutsu 1080 Запуск видео в сторонних плеерах зависим от используемого user-agent заголовка в API интерфейсе. Некоторые тайтлы заблокированы на территории РФ
sameband 1080
anilib 1080, 2060 (4k) требуется авторизация для доступа к оригинальному плееру, добавить заголовок Authorization: Bearer .... Авторизация через ВК работает на старом домене
okcdn (cdnvideohub) 1080, 2060 (4k?) streamlink/streamlink/issues/6369: IP адрес и user-agent плеера должны совпадать с user-agent и IP, откуда шёл запрос из объектов Extractor

See also

  • docs - lib usage
  • dev - swagger документации и dsl конфиг парсеры с рецептами изготовления

Примечания

  • Этот проект не включает инструменты кеширования и сохранения всех полученных данных, только готовые реализации парсеров и программные интерфейсы
  • Проект разработан преимущественно на личное, некоммерческое использование с client-side стороны. Проект не несет ответственности за поломки, убытки и решение предоставляется "Как есть" в соответствии с MIT лицензией.
  • Основная цель этого проекта — связать автоматизацию и эффективность извлечения того, что предоставляется пользователю в Интернете. Весь контент, доступный в рамках проекта, размещается на внешних неаффилированных источниках.

Project details


Release history Release notifications | RSS feed

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

anicli_api-0.8.22.tar.gz (71.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

anicli_api-0.8.22-py3-none-any.whl (100.5 kB view details)

Uploaded Python 3

File details

Details for the file anicli_api-0.8.22.tar.gz.

File metadata

  • Download URL: anicli_api-0.8.22.tar.gz
  • Upload date:
  • Size: 71.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.0 {"installer":{"name":"uv","version":"0.11.0","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"CachyOS Linux","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for anicli_api-0.8.22.tar.gz
Algorithm Hash digest
SHA256 96a2931d6fc7c9608f91b262112d3491f5bf23c4407c458c06eb4902152f4771
MD5 5c16f31dab42267cb650637c47b25aab
BLAKE2b-256 340c9d47a1522fe43ebc333b51976ad9fa0b4e299d3d8721ad9732e818f05863

See more details on using hashes here.

File details

Details for the file anicli_api-0.8.22-py3-none-any.whl.

File metadata

  • Download URL: anicli_api-0.8.22-py3-none-any.whl
  • Upload date:
  • Size: 100.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.0 {"installer":{"name":"uv","version":"0.11.0","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"CachyOS Linux","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for anicli_api-0.8.22-py3-none-any.whl
Algorithm Hash digest
SHA256 1bc577a77c237e764ab565f74cc5e82842f592184e8ef051e33b60ececc5c779
MD5 87256ad127c012bf93fe8cfba3f632d4
BLAKE2b-256 a53bd44429152f409671f28f545657b6c98561c7fc13fa512fa822bb2c71446c

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page