aboutsummaryrefslogtreecommitdiffstats
path: root/hypervideo_dl/extractor/medaltv.py
diff options
context:
space:
mode:
Diffstat (limited to 'hypervideo_dl/extractor/medaltv.py')
-rw-r--r--hypervideo_dl/extractor/medaltv.py23
1 files changed, 6 insertions, 17 deletions
diff --git a/hypervideo_dl/extractor/medaltv.py b/hypervideo_dl/extractor/medaltv.py
index 82be823..9e57ee2 100644
--- a/hypervideo_dl/extractor/medaltv.py
+++ b/hypervideo_dl/extractor/medaltv.py
@@ -8,12 +8,12 @@ from ..utils import (
float_or_none,
int_or_none,
str_or_none,
- traverse_obj,
+ traverse_obj
)
class MedalTVIE(InfoExtractor):
- _VALID_URL = r'https?://(?:www\.)?medal\.tv/(?P<path>games/[^/?#&]+/clips)/(?P<id>[^/?#&]+)'
+ _VALID_URL = r'https?://(?:www\.)?medal\.tv/games/[^/?#&]+/clips/(?P<id>[^/?#&]+)'
_TESTS = [{
'url': 'https://medal.tv/games/valorant/clips/jTBFnLKdLy15K',
'md5': '6930f8972914b6b9fdc2bb3918098ba0',
@@ -80,25 +80,14 @@ class MedalTVIE(InfoExtractor):
def _real_extract(self, url):
video_id = self._match_id(url)
- path = self._match_valid_url(url).group('path')
webpage = self._download_webpage(url, video_id)
- next_data = self._search_json(
- '<script[^>]*__NEXT_DATA__[^>]*>', webpage,
+ hydration_data = self._search_json(
+ r'<script[^>]*>[^<]*\bhydrationData\s*=', webpage,
'next data', video_id, end_pattern='</script>', fatal=False)
- build_id = next_data.get('buildId')
- if not build_id:
- raise ExtractorError(
- 'Could not find build ID.', video_id=video_id)
-
- locale = next_data.get('locale', 'en')
-
- api_response = self._download_json(
- f'https://medal.tv/_next/data/{build_id}/{locale}/{path}/{video_id}.json', video_id)
-
- clip = traverse_obj(api_response, ('pageProps', 'clip')) or {}
+ clip = traverse_obj(hydration_data, ('clips', ...), get_all=False)
if not clip:
raise ExtractorError(
'Could not find video information.', video_id=video_id)
@@ -152,7 +141,7 @@ class MedalTVIE(InfoExtractor):
# Necessary because the id of the author is not known in advance.
# Won't raise an issue if no profile can be found as this is optional.
- author = traverse_obj(api_response, ('pageProps', 'profile')) or {}
+ author = traverse_obj(hydration_data, ('profiles', ...), get_all=False) or {}
author_id = str_or_none(author.get('userId'))
author_url = format_field(author_id, None, 'https://medal.tv/users/%s')