Mangagraph
From Mangalib to Telegraph with ❤️
Асинхронный парсер-конвертер манги из 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)
| File | Size | Uploaded | |
|---|---|---|---|
| mangagraph-0.3.0.tar.gz | 23.7 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| 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
|