From 63bac931c2a23b19a3782ea01b6cd579f7b8c253 Mon Sep 17 00:00:00 2001 From: lazypete365 Date: Mon, 31 Jan 2022 21:54:49 +0100 Subject: [PATCH] [mildom] Fix extractor (#2533) Closes #2519 Authored by: lazypete365 --- yt_dlp/extractor/mildom.py | 71 ++++++++++++++++++++++++++++++++++++-- 1 file changed, 68 insertions(+), 3 deletions(-) diff --git a/yt_dlp/extractor/mildom.py b/yt_dlp/extractor/mildom.py index c147cbbf60..ddeaa70218 100644 --- a/yt_dlp/extractor/mildom.py +++ b/yt_dlp/extractor/mildom.py @@ -12,6 +12,8 @@ from ..utils import ( update_url_query, random_uuidv4, try_get, + float_or_none, + dict_get ) from ..compat import ( compat_str, @@ -22,9 +24,18 @@ class MildomBaseIE(InfoExtractor): _GUEST_ID = None _DISPATCHER_CONFIG = None - def _call_api(self, url, video_id, query={}, note='Downloading JSON metadata', init=False): + def _call_api(self, url, video_id, query=None, note='Downloading JSON metadata', init=False): + query = query or {} + if query: + query['__platform'] = 'web' url = update_url_query(url, self._common_queries(query, init=init)) - return self._download_json(url, video_id, note=note)['body'] + content = self._download_json(url, video_id, note=note) + if content['code'] == 0: + return content['body'] + else: + self.raise_no_formats( + f'Video not found or premium content. {content["code"]} - {content["message"]}', + expected=True) def _common_queries(self, query={}, init=False): dc = self._fetch_dispatcher_config() @@ -148,6 +159,7 @@ class MildomIE(MildomBaseIE): 'id': result_video_id, 'title': title, 'description': description, + 'timestamp': float_or_none(enterstudio.get('live_start_ms'), scale=1000), 'uploader': uploader, 'uploader_id': video_id, 'formats': formats, @@ -158,7 +170,50 @@ class MildomIE(MildomBaseIE): class MildomVodIE(MildomBaseIE): IE_NAME = 'mildom:vod' IE_DESC = 'Download a VOD in Mildom' - _VALID_URL = r'https?://(?:(?:www|m)\.)mildom\.com/playback/(?P\d+)/(?P(?P=user_id)-[a-zA-Z0-9]+)' + _VALID_URL = r'https?://(?:(?:www|m)\.)mildom\.com/playback/(?P\d+)/(?P(?P=user_id)-[a-zA-Z0-9]+-?[0-9]*)' + _TESTS = [{ + 'url': 'https://www.mildom.com/playback/10882672/10882672-1597662269', + 'info_dict': { + 'id': '10882672-1597662269', + 'ext': 'mp4', + 'title': '始めてのミルダム配信じゃぃ!', + 'thumbnail': r're:^https?://.*\.(png|jpg)$', + 'upload_date': '20200817', + 'duration': 4138.37, + 'description': 'ゲームをしたくて!', + 'timestamp': 1597662269.0, + 'uploader_id': '10882672', + 'uploader': 'kson組長(けいそん)', + }, + }, { + 'url': 'https://www.mildom.com/playback/10882672/10882672-1597758589870-477', + 'info_dict': { + 'id': '10882672-1597758589870-477', + 'ext': 'mp4', + 'title': '【kson】感染メイズ!麻酔銃で無双する', + 'thumbnail': r're:^https?://.*\.(png|jpg)$', + 'timestamp': 1597759093.0, + 'uploader': 'kson組長(けいそん)', + 'duration': 4302.58, + 'uploader_id': '10882672', + 'description': 'このステージ絶対乗り越えたい', + 'upload_date': '20200818', + }, + }, { + 'url': 'https://www.mildom.com/playback/10882672/10882672-buha9td2lrn97fk2jme0', + 'info_dict': { + 'id': '10882672-buha9td2lrn97fk2jme0', + 'ext': 'mp4', + 'title': '【kson組長】CART RACER!!!', + 'thumbnail': r're:^https?://.*\.(png|jpg)$', + 'uploader_id': '10882672', + 'uploader': 'kson組長(けいそん)', + 'upload_date': '20201104', + 'timestamp': 1604494797.0, + 'duration': 4657.25, + 'description': 'WTF', + }, + }] def _real_extract(self, url): m = self._match_valid_url(url) @@ -213,6 +268,9 @@ class MildomVodIE(MildomBaseIE): 'id': video_id, 'title': title, 'description': description, + 'timestamp': float_or_none(autoplay['publish_time'], scale=1000), + 'duration': float_or_none(autoplay['video_length'], scale=1000), + 'thumbnail': dict_get(autoplay, ('upload_pic', 'video_pic')), 'uploader': uploader, 'uploader_id': user_id, 'formats': formats, @@ -230,6 +288,13 @@ class MildomUserVodIE(MildomBaseIE): 'title': 'Uploads from ねこばたけ', }, 'playlist_mincount': 351, + }, { + 'url': 'https://www.mildom.com/profile/10882672', + 'info_dict': { + 'id': '10882672', + 'title': 'Uploads from kson組長(けいそん)', + }, + 'playlist_mincount': 191, }] def _entries(self, user_id):