diff options
author | funniray <funniray10@gmail.com> | 2021-08-09 22:39:20 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-08-10 03:09:20 +0530 |
commit | 245d43cacfea78c04f8ce52e5a03267bb67b988f (patch) | |
tree | 0daf372e118908b93d9311fc7363e6bb0cd57e3c | |
parent | 246fb276e0d9ffd407a962c494f265d5d88c0ff3 (diff) | |
download | hypervideo-pre-245d43cacfea78c04f8ce52e5a03267bb67b988f.tar.lz hypervideo-pre-245d43cacfea78c04f8ce52e5a03267bb67b988f.tar.xz hypervideo-pre-245d43cacfea78c04f8ce52e5a03267bb67b988f.zip |
[crunchyroll] Fix thumbnail (#650)
Authored by: funniray
-rw-r--r-- | yt_dlp/extractor/crunchyroll.py | 27 |
1 files changed, 22 insertions, 5 deletions
diff --git a/yt_dlp/extractor/crunchyroll.py b/yt_dlp/extractor/crunchyroll.py index 98aa1dd9a..091e15e8d 100644 --- a/yt_dlp/extractor/crunchyroll.py +++ b/yt_dlp/extractor/crunchyroll.py @@ -29,6 +29,7 @@ from ..utils import ( merge_dicts, remove_end, sanitized_Request, + try_get, urlencode_postdata, xpath_text, ) @@ -458,6 +459,18 @@ Format: Layer, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text video_description = (self._parse_json(self._html_search_regex( r'<script[^>]*>\s*.+?\[media_id=%s\].+?({.+?"description"\s*:.+?})\);' % video_id, webpage, 'description', default='{}'), video_id) or media_metadata).get('description') + + thumbnails = [] + thumbnail_url = (self._parse_json(self._html_search_regex( + r'<script type="application\/ld\+json">\n\s*(.+?)<\/script>', + webpage, 'thumbnail_url', default='{}'), video_id)).get('image') + if thumbnail_url: + thumbnails.append({ + 'url': thumbnail_url, + 'width': 1920, + 'height': 1080 + }) + if video_description: video_description = lowercase_escape(video_description.replace(r'\r\n', '\n')) video_uploader = self._html_search_regex( @@ -592,21 +605,25 @@ Format: Layer, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text r'(?s)<h\d[^>]+\bid=["\']showmedia_about_episode_num[^>]+>(.+?)</h\d', webpage, 'series', fatal=False) - season = episode = episode_number = duration = thumbnail = None + season = episode = episode_number = duration = None if isinstance(metadata, compat_etree_Element): season = xpath_text(metadata, 'series_title') episode = xpath_text(metadata, 'episode_title') episode_number = int_or_none(xpath_text(metadata, 'episode_number')) duration = float_or_none(media_metadata.get('duration'), 1000) - thumbnail = xpath_text(metadata, 'episode_image_url') if not episode: episode = media_metadata.get('title') if not episode_number: episode_number = int_or_none(media_metadata.get('episode_number')) - if not thumbnail: - thumbnail = media_metadata.get('thumbnail', {}).get('url') + thumbnail_url = try_get(media, lambda x: x['thumbnail']['url']) + if thumbnail_url: + thumbnails.append({ + 'url': thumbnail_url, + 'width': 640, + 'height': 360 + }) season_number = int_or_none(self._search_regex( r'(?s)<h\d[^>]+id=["\']showmedia_about_episode_num[^>]+>.+?</h\d>\s*<h4>\s*Season (\d+)', @@ -619,7 +636,7 @@ Format: Layer, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text 'title': video_title, 'description': video_description, 'duration': duration, - 'thumbnail': thumbnail, + 'thumbnails': thumbnails, 'uploader': video_uploader, 'series': series, 'season': season, |