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
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
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file mangagraph-0.2.0.post1.tar.gz.
File metadata
- Download URL: mangagraph-0.2.0.post1.tar.gz
- Upload date:
- Size: 20.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.15
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
31062795b73b708f2581ac6cf74e25ca3b1e64955944f0d5ca98b7f5a08a53b1
|
|
| MD5 |
6dce02114cd61c4b985959c40b8f2d1f
|
|
| BLAKE2b-256 |
dc4e2c0acd5459f6d00cbbd6ab8c2b1a36af50a667adc76f03a84c293f456821
|
File details
Details for the file mangagraph-0.2.0.post1-py3-none-any.whl.
File metadata
- Download URL: mangagraph-0.2.0.post1-py3-none-any.whl
- Upload date:
- Size: 19.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.15
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
832c9e1ff9065cd77111e1f9e7b3448f6605dc8d11e5f77e766e7464a422862a
|
|
| MD5 |
91d06663d89686aeadc28982acdf680a
|
|
| BLAKE2b-256 |
393793130eee0f44b8b9d84c7f5514842db3c881f8fd8efc65490edd570c0153
|