From 683a7a25559d66afc5a1e95df892db4982d86254 Mon Sep 17 00:00:00 2001 From: Felix Stupp Date: Thu, 18 Aug 2022 11:15:26 +0000 Subject: [PATCH] extr/media/ytdl: Add thumbnail of video --- .../extractors/media/ytdl.py | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/server/entertainment_decider/extractors/media/ytdl.py b/server/entertainment_decider/extractors/media/ytdl.py index 82b6b32..b18dd7d 100644 --- a/server/entertainment_decider/extractors/media/ytdl.py +++ b/server/entertainment_decider/extractors/media/ytdl.py @@ -8,6 +8,8 @@ from typing import Dict, Optional from ...models import ( MediaElement, + MediaThumbnail, + thumbnail_sort_key, ) from ..all.ytdl import get_video_info, YtdlErrorException from ..generic import AuthorExtractedData, ExtractedData, ExtractionError, SuitableLevel @@ -69,5 +71,22 @@ class YtdlMediaExtractor(MediaExtractor[Dict]): if "uploader" in data else data["title"] ) + thumb_list = ( + [ + thumb + for thumb in data["thumbnails"] + if "width" in thumb and "height" in thumb + ] + if "thumbnails" in data + else None + ) + if thumb_list: + best_thumb = min( + thumb_list, + key=lambda thumb: thumbnail_sort_key(thumb["width"], thumb["height"]), + ) + object.thumbnail = MediaThumbnail.from_uri(best_thumb["url"]) + elif data.get("thumbnail"): + object.thumbnail = MediaThumbnail.from_uri(data["thumbnail"]) object.release_date = datetime.strptime(data["upload_date"], "%Y%m%d") object.length = int(data["duration"])