#!/usr/bin/env python3 from tqdm import tqdm import requests import shutil import simplejson.errors import sys import os if len(sys.argv) < 2: raise Exception("sys.argv[1]") def parse_chapter_api(data): if not data["server"].startswith("http"): data["server"] = "https://mangadex.org/data/" base_url = data["server"] + data["hash"] + "/" return list(map(lambda page: base_url + page, data["page_array"])) for chapter in tqdm(sys.argv[1:]): chapter_api_response = requests.get( f"https://mangadex.org/api/?id={chapter}&type=chapter" ) chapter_number = chapter_api_response.json()["chapter"] os.makedirs(chapter_number, exist_ok=True) try: for image in tqdm(parse_chapter_api(chapter_api_response.json())): r = requests.get(image, stream=True) with open(chapter_number + "/" + image.split("/")[-1], "wb") as f: r.raw.decode_content = True shutil.copyfileobj(r.raw, f) except simplejson.errors.JSONDecodeError as e: if chapter_api_response.status_code != 200: raise Exception( f"API request failed with HTTP status code {chapter_api_response.status_code}" ) from None else: raise e