scripts/downloaders/comic-valkyrie.py

44 lines
1.2 KiB
Python
Executable File

#!/usr/bin/env python3
from PIL import Image
from bs4 import BeautifulSoup
from tqdm import tqdm
import re
import requests
import sys
def parse_filename(filename):
split = re.split(":|,|\+|>", filename)
return map(int, split[1:])
def get_image_urls():
url = sys.argv[1]
soup = BeautifulSoup(requests.get(url).text, "html.parser")
for div in soup.find(id="content").find_all("div"):
yield url + div.get("data-ptimg")
pages = list(get_image_urls())
for metadata_url in tqdm(pages):
image_url = re.sub("\.ptimg\.json$", ".jpg", metadata_url)
ptimg_data = requests.get(metadata_url).json()
image_data = requests.get(image_url, stream=True).raw
scrambled_image = Image.open(image_data)
combined_image = Image.new(
"RGB", (ptimg_data["views"][0]["width"], ptimg_data["views"][0]["height"])
)
for from_x, from_y, width, height, to_x, to_y in map(
parse_filename, ptimg_data["views"][0]["coords"]
):
chunk_data = scrambled_image.crop(
(from_x, from_y, from_x + width, from_y + height)
)
combined_image.paste(chunk_data, (to_x, to_y))
combined_image.save(image_url.split("/")[-1])