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.post1

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.post1
File Size Uploaded
mangagraph-0.3.0.post1.tar.gz 23.8 kB Details

Built distribution (wheel)

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

Total release size: 45.9 kB

Release files / mangagraph-0.3.0.post1.tar.gz

Download URL mangagraph-0.3.0.post1.tar.gz
Size 23.8 kB
Tags Source
SHA-256 checksum
How to use checksums
a652630daf5723d510816652827dbd41ce66b17a4fecc47138f5c28ba015bc83
BLAKE2b-256 checksum
How to use checksums
e532d07fa2213ce6f7be9757e74fae57dd845469027d931bfc79ba9ec458563b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.11.16

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

Download URL mangagraph-0.3.0.post1-py3-none-any.whl
Size 22.0 kB
Tags Python 3
SHA-256 checksum
How to use checksums
04ade3eeec7147a37b975691587ac25468477cc730c00b3e02b5db5ec35026c3
BLAKE2b-256 checksum
How to use checksums
a9efba11019b0e351f8403f0c8ee5a65009a1038c7e91dac9dbaee31fae5ff77
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.11.16
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