diff --git a/hotdog/command/urlinfo_/imdb.py b/hotdog/command/urlinfo_/imdb.py index c3e2aa9..4db2c68 100644 --- a/hotdog/command/urlinfo_/imdb.py +++ b/hotdog/command/urlinfo_/imdb.py @@ -33,7 +33,7 @@ def thumbnail(url, width=182, height=268): The default settings are what IMDb currently uses for desktop display. """ resize = f"UY{height}" # there's also 'UX' to resize on width - offset = "2,0" # by setting non-0 for the first value the image is fitted + offset = "0,0" crop = f"CR{offset},{width},{height}" al = "AL" # not sure what this is, doesn't seem to do much but they use it. @@ -102,10 +102,10 @@ class Extracted: genres: List[str] description: str published: date - duration_s: int - rating_value: float - rating_count: int creators: List[str] + duration_s: Optional[int] = None + rating_value: Optional[float] = None + rating_count: Optional[int] = None async def extractor(info): @@ -120,8 +120,10 @@ async def extractor(info): return ld = json.loads(parser.value) - assert ld["@context"] == "http://schema.org" and ld["@type"] == "Movie" - assert ld["aggregateRating"]["@type"] == "AggregateRating" + assert ld["@context"] == "http://schema.org" and ld["@type"] in ( + "Movie", + "CreativeWork", + ) creators = [] for k in "director", "creator": @@ -136,12 +138,17 @@ async def extractor(info): genres=ld["genre"], description=ld["description"], published=date.fromisoformat(ld["datePublished"]), - duration_s=parse_period(ld["duration"]), - rating_value=float(ld["aggregateRating"]["ratingValue"]), - rating_count=ld["aggregateRating"]["ratingCount"], creators=creators, ) + if "duration" in ld: + info.extracted.duration_s = parse_period(ld["duration"]) + + if "aggregateRating" in ld: + assert ld["aggregateRating"]["@type"] == "AggregateRating" + info.extracted.rating_value = float(ld["aggregateRating"]["ratingValue"]) + info.extracted.rating_count = ld["aggregateRating"]["ratingCount"] + async def handle(message, url, info): ex = clone(info.extracted) @@ -165,10 +172,12 @@ async def handle(message, url, info): details = [ f"🖋 {' ∕ '.join(ex.creators[:2])}", - f"⏱ {pretty_duration(ex.duration_s)}", - f"⭐️ {ex.rating_value:_.01f} ⁄ 10 (👤 {ex.rating_count})", - f"🏷 {' ∕ '.join(ex.genres)}", ] + if ex.duration_s: + details.append(f"⏱ {pretty_duration(ex.duration_s)}") + if ex.rating_count: + details.append(f"⭐️ {ex.rating_value:_.01f} ⁄ 10 (👤 {ex.rating_count})") + details.append(f"🏷 {' ∕ '.join(ex.genres[:3])}") lines = [ f"{ex.title} ({ex.published:%Y})", f"{', '.join(details)}",