update gitignore

This commit is contained in:
simon987 2019-05-08 20:37:44 -04:00
parent b588c0eb11
commit 0acffff609
2 changed files with 122 additions and 1 deletions

3
.gitignore vendored
View File

@ -125,4 +125,5 @@ in/
repo/
tmp/
workspace/
worker.json
worker.json
*.db

120
caa/run Executable file
View File

@ -0,0 +1,120 @@
#!/usr/bin/env python
import json
import os
import random
import sqlite3
import sys
import traceback
from io import BytesIO
from pathlib import Path
import PIL
import requests
from PIL import Image
PIL.Image.MAX_IMAGE_PIXELS = 933120000
current_mbid = ""
def should_download(image: dict):
return image["front"] is True
def thumb(cover_blob):
with Image.open(BytesIO(cover_blob)) as image:
# https://stackoverflow.com/questions/43978819
if image.mode == "I;16":
image.mode = "I"
image.point(lambda i: i * (1. / 256)).convert('L')
image.thumbnail((256, 256), Image.BICUBIC)
canvas = Image.new("RGB", image.size, 0x000000)
if image.mode in ('RGBA', 'LA') or (image.mode == 'P' and 'transparency' in image.info):
try:
canvas.paste(image, mask=image.split()[-1])
except ValueError:
canvas.paste(image)
else:
canvas.paste(image)
blob = BytesIO()
canvas.save(blob, "JPEG", quality=85, optimize=True)
canvas.close()
return blob.getvalue()
def download(mbid):
global current_mbid
current_mbid = mbid
r = requests.get("https://archive.org/metadata/mbid-" + mbid)
meta = r.json()
if "files" not in meta or "workable_servers" not in meta or not meta["workable_servers"]:
return
directory = "https://" + random.choice(meta["workable_servers"]) + meta["dir"]
index = directory + "/index.json"
r = requests.get(index)
if r.status_code == 404:
mb_meta = meta
urls = [
directory + "/" + f["name"]
for f in meta["files"] if "thumb" not in f["name"] and
not f["name"].endswith((".xml", ".txt", ".json", ".torrent"))
]
else:
mb_meta = r.json()
urls = [
directory + "/mbid-" + mbid + "-" + image["image"][image["image"].rfind("/") + 1:]
for image in mb_meta["images"] if should_download(image)
]
if not urls:
return
cover = requests.get(urls[0]).content
if cover:
dbfile = "/mnt/Data7/caa_p2.db"
if not os.path.exists(dbfile):
with sqlite3.connect(dbfile, timeout=30000) as conn:
c = conn.cursor()
c.execute(
"CREATE TABLE covers(id TEXT, cover BLOB, tn BLOB, meta TEXT, ts TEXT default CURRENT_TIMESTAMP)")
try:
tn = thumb(cover)
except:
tn = None
with sqlite3.connect(dbfile, timeout=30000) as conn:
c = conn.cursor()
c.execute("INSERT INTO covers (id, cover, tn, meta) VALUES (?,?,?,?)",
(mbid, cover, tn, json.dumps(mb_meta),))
try:
task_str = sys.argv[1]
task = json.loads(task_str)
mbids = json.loads(task["recipe"])
for mbid in mbids:
download(mbid)
except Exception as e:
print(json.dumps({
"result": 1,
"logs": [
{"message": str(e) + "$$" + current_mbid + "$$" + traceback.format_exc(), "level": 3}
]
}))
quit(2)
print(json.dumps({
"result": 0,
}))