mirror of
https://github.com/almet/notmyidea.git
synced 2025-04-28 19:42:37 +02:00
57 lines
1.7 KiB
Python
57 lines
1.7 KiB
Python
import logging
|
|
import os
|
|
from pathlib import Path
|
|
|
|
import requests
|
|
from pelican import log, signals
|
|
|
|
log = logging.getLogger(__name__)
|
|
|
|
|
|
def check_or_download_image(isbn, output_dir):
|
|
log.info(f"Downloading cover for {isbn=}")
|
|
|
|
output_dir = Path(output_dir)
|
|
# remote_url = f"https://images.isbndb.com/covers/41/83/{isbn}.jpg"
|
|
image_relative_path = f"images/isbn-covers/{isbn}.jpg"
|
|
image_path = output_dir / image_relative_path
|
|
|
|
if image_path.exists():
|
|
return image_relative_path
|
|
else:
|
|
try:
|
|
remote_url = f"https://www.googleapis.com/books/v1/volumes?q=isbn:{isbn}"
|
|
api_resp = requests.get(remote_url)
|
|
api_resp.raise_for_status()
|
|
|
|
returned = api_resp.json()
|
|
if returned["totalItems"] > 0:
|
|
thumbnail_url = returned["items"][0]["volumeInfo"]["imageLinks"][
|
|
"thumbnail"
|
|
]
|
|
response = requests.get(thumbnail_url, stream=True)
|
|
|
|
os.makedirs(os.path.dirname(image_path), exist_ok=True)
|
|
|
|
with open(image_path, "wb") as fp:
|
|
for chunk in response.iter_content(chunk_size=8192):
|
|
fp.write(chunk)
|
|
|
|
return image_relative_path
|
|
except:
|
|
log.error(
|
|
f"No ISBN cover found for {isbn=}. Look at https://isbnsearch.org/isbn/{isbn}"
|
|
)
|
|
return
|
|
|
|
|
|
def run_for_each_article(generator):
|
|
for article in generator.articles:
|
|
isbn = getattr(article, "isbn", None)
|
|
if isbn:
|
|
isbn = isbn.replace("-", "")
|
|
article.isbn_cover = check_or_download_image(isbn, generator.path)
|
|
|
|
|
|
def register():
|
|
signals.article_generator_finalized.connect(run_for_each_article)
|