Skip to main content

Async manga parser-converter from mangalib to telegraph pages

Project description

Mangagraph

From Mangalib to Telegraph with ❤️

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

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

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

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

Пример страницы главы: 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

Project details


Download files

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

Source Distribution

mangagraph-0.2.0.tar.gz (20.1 kB view details)

Uploaded Source

Built Distribution

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

mangagraph-0.2.0-py3-none-any.whl (19.5 kB view details)

Uploaded Python 3

File details

Details for the file mangagraph-0.2.0.tar.gz.

File metadata

  • Download URL: mangagraph-0.2.0.tar.gz
  • Upload date:
  • Size: 20.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.15

File hashes

Hashes for mangagraph-0.2.0.tar.gz
Algorithm Hash digest
SHA256 3dfe5146ba90ae28c8a718bb9dc23708c169dfb6ff31b69f55b9f87ad0767fd5
MD5 ee48976a647b0df193298f2ce38b2f12
BLAKE2b-256 007c31350b18cadb4e1f4343bd66cc52d23b840023e22eae3b6bd93fb6421f63

See more details on using hashes here.

File details

Details for the file mangagraph-0.2.0-py3-none-any.whl.

File metadata

  • Download URL: mangagraph-0.2.0-py3-none-any.whl
  • Upload date:
  • Size: 19.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.15

File hashes

Hashes for mangagraph-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 22b16f084e0e5d58b33de76c2465dea0d82b8ed55b960de126e42d8a4f0a7239
MD5 7007f6e52d444cc0ac8fd9a09e0e44fb
BLAKE2b-256 53f252d1c0720d9fd2abe2d25758e07eae2602948551ac6c8e7a62006d97f3f2

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