Skip to main content

Mangagraph

From Mangalib to Telegraph with ❤️

PyPI Downloads CI/CD Telegram

Асинхронный парсер-конвертер манги из mangalib api в telegraph

Принцип работы

Даем ссылку на мангу (такого типа: https://mangalib.me/ru/manga/{slug_url}) и название бд куда мы сохраняем (том, главу, наименование главы, ссылку на главу для чтения и зеркало на случаи если главная ссылка не доступна) -> получаем полные данные о главах -> генерируем телеграф страницы на каждую главу -> ссылки на страницу сохраняем в SQLite бд

-> На выходе получаем базу данных готовую к любому использованию и конечную ссылку телеграфа с зеркалом (оглавление) внутри которой находятся все главы с именами и ссылкой для чтения

Пример страницы главы: https://telegra.ph/Vanpanchmen--VanPanchMen-vyhodit-na-scenu-07-02

Пример оглавления: https://graph.org/Vanpanchmen-01-22-3 (ссылки на оглавление также сохраняются в бд, в таблицу ToC_url)

Установка

pip install -U mangagraph

Токен MangaLib

Для поиска манги нужен персональный Bearer-токен MangaLib (как его получить — см. .env.example). Задайте его через переменную окружения:

export MANGALIB_TOKEN="eyJ0eXAiOiJKV1QiLCJh..."

либо положите в файл .env в рабочей директории (см. .env.example), либо передайте напрямую в коде: Mangagraph(token="..."). Обработка глав по прямой ссылке работает и без токена.

Использование

CLI

mangagraph --url https://mangalib.me/ru/manga/706--onepunchman

или

python -m mangagraph --url https://mangalib.me/ru/manga/706--onepunchman

Обработка одной конкретной главы (к примеру вторая)

Важно! При обработки одной главы не создается БД и оглавление, возвращается только кортеж из двух строк (главной ссылки и зеркала)

mangagraph --url https://mangalib.me/ru/manga/706--onepunchman --c 2

Несколько глав, диапазоны и половинные главы:

mangagraph --url https://mangalib.me/ru/manga/706--onepunchman --c "1,2,5,10"
mangagraph --url https://mangalib.me/ru/manga/706--onepunchman --c "1-10"
mangagraph --url https://mangalib.me/ru/manga/706--onepunchman --c "1,5-10,20.5"

Поиск манги

mangagraph --q "Berserk" --limit 10

Raw

from mangagraph import Mangagraph
from mangagraph.exceptions import MangagraphError

async def main():
    try:
        mgraph = Mangagraph()
        # Поиск манги по ключевому слову и с лимитом
        results = await mgraph.search_manga("Berserk", limit=3)

        for idx, result in enumerate(results, 1):
            print(f"{idx}. {result.name} / {result.rus_name}")
            print(f"   Рейтинг: {result.rating.raw_average} ({result.rating.raw_votes} отзывов)")
            print(f"   Год: {result.release_year} | Тип: {result.type} | Статус: {result.status}")
            print(f"   Ссылка: https://mangalib.me/ru/manga/{result.slug_url}")
            print()

        # Парсинг одной конкретной главы
        chapter_num = 97
        result = await mgraph.process_chapters(
            'https://mangalib.me/ru/manga/7965--chainsaw-man',
            chapter_num
        )
        if result:
            url, mirror_url = result
            print(f'Бензочел, глава номер {chapter_num}: {url} | {mirror_url}')

        # Парсинг нескольких глав сразу
        results = await mgraph.process_chapters(
            'https://mangalib.me/ru/manga/7965--chainsaw-man',
            chapter_nums=[90, 91, 92]
        )

        print("Главы:\n")
        for num, (toc, mirror) in results.items():
            print(f"Глава №{num}")
            print(f"   TOC: {toc}")
            print(f"   Mirror: {mirror}\n")

        # Парсинг манги и загрузка телеграф
        result = await mgraph.process_manga('https://mangalib.me/ru/manga/706--onepunchman')

        if result:
            toc_url, mirror_toc_url = result
            print(f"Table of Contents: {toc_url}")
            print(f"Mirror: {mirror_toc_url}")
    except MangagraphError as e:
        print(f"Parser error: {e}")
    except Exception as e:
        print(f"Unexpected error: {e}")

import asyncio

asyncio.run(main())

Прямой доступ к API MangaLib

Все запросы к API живут в MangaLibClient — его можно использовать отдельно, без Telegraph и базы данных (также доступен как mgraph.client):

from mangagraph import MangaLibClient

async with MangaLibClient() as client:   # токен из MANGALIB_TOKEN / .env
    me = await client.me()               # данные текущего пользователя
    results = await client.search("Berserk", limit=3)
    chapters = await client.get_chapters("7965--chainsaw-man")
    pages = await client.get_chapter_pages("7965--chainsaw-man", volume=1, chapter=1)

Новые методы API добавляются в MangaLibClient — один метод на endpoint.

Разработка

git clone https://github.com/damirTAG/mangagraph
cd mangagraph
pip install -e ".[dev]"
pytest

Metadata

Release files for mangagraph 0.3.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for mangagraph 0.3.0
File Size Uploaded
mangagraph-0.3.0.tar.gz 23.7 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for mangagraph 0.3.0
File Interpreter ABI Platform
mangagraph-0.3.0-py3-none-any.whl Python 3 none any Details

Total release size: 45.6 kB

Release files / mangagraph-0.3.0.tar.gz

Download URL mangagraph-0.3.0.tar.gz
Size 23.7 kB
Tags Source
SHA-256 checksum
How to use checksums
413e591cf6230b9a04425b09203d5000fce4409e0a6a98c934662c0bfebe721a
BLAKE2b-256 checksum
How to use checksums
96e121ade007436555e810bb7f3cac2096e8aa73f9e41a8fdfdb4cd812d12e9d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.11.15

Release files / mangagraph-0.3.0-py3-none-any.whl

Download URL mangagraph-0.3.0-py3-none-any.whl
Size 21.8 kB
Tags Python 3
SHA-256 checksum
How to use checksums
492172c9aaa23451c7d23ae2c7ccc457348c55b5dccd2c8be87225896faf1e07
BLAKE2b-256 checksum
How to use checksums
91512b9e1125c69a911117206a21555b880df205c24c206f2f76a8ca882f1b57
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.11.15
Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page