diff options
author | Unknown <blackjack4494@web.de> | 2020-09-03 04:40:15 +0200 |
---|---|---|
committer | Unknown <blackjack4494@web.de> | 2020-09-03 04:40:15 +0200 |
commit | 12cd8e8f55b6d4f3e27ec7d0dbbc02317a42bfab (patch) | |
tree | 13cb58d5d1f3c945d57abf169dc2e05df5d3c6fe | |
parent | 53d26f24069590f47985dfd1eb3f4c90642e676a (diff) | |
parent | 22f9b078fd6588ec5fcbb1cfe7d0778b4fab0b49 (diff) | |
download | hypervideo-pre-12cd8e8f55b6d4f3e27ec7d0dbbc02317a42bfab.tar.lz hypervideo-pre-12cd8e8f55b6d4f3e27ec7d0dbbc02317a42bfab.tar.xz hypervideo-pre-12cd8e8f55b6d4f3e27ec7d0dbbc02317a42bfab.zip |
Merge branch 'ssaqua-master'
-rw-r--r-- | youtube_dlc/extractor/extractors.py | 5 | ||||
-rw-r--r-- | youtube_dlc/extractor/pokemon.py | 67 |
2 files changed, 71 insertions, 1 deletions
diff --git a/youtube_dlc/extractor/extractors.py b/youtube_dlc/extractor/extractors.py index 6c281ef26..fa5330b60 100644 --- a/youtube_dlc/extractor/extractors.py +++ b/youtube_dlc/extractor/extractors.py @@ -859,7 +859,10 @@ from .pluralsight import ( PluralsightCourseIE, ) from .podomatic import PodomaticIE -from .pokemon import PokemonIE +from .pokemon import ( + PokemonIE, + PokemonWatchIE, +) from .polskieradio import ( PolskieRadioIE, PolskieRadioCategoryIE, diff --git a/youtube_dlc/extractor/pokemon.py b/youtube_dlc/extractor/pokemon.py index 80222d428..14ee1a72e 100644 --- a/youtube_dlc/extractor/pokemon.py +++ b/youtube_dlc/extractor/pokemon.py @@ -5,8 +5,11 @@ import re from .common import InfoExtractor from ..utils import ( + ExtractorError, extract_attributes, int_or_none, + js_to_json, + merge_dicts, ) @@ -69,3 +72,67 @@ class PokemonIE(InfoExtractor): 'episode_number': int_or_none(video_data.get('data-video-episode')), 'ie_key': 'LimelightMedia', } + + +class PokemonWatchIE(InfoExtractor): + _VALID_URL = r'https?://watch\.pokemon\.com/[a-z]{2}-[a-z]{2}/player\.html\?id=(?P<id>[a-z0-9]{32})' + _API_URL = 'https://www.pokemon.com/api/pokemontv/v2/channels/{0:}' + _TESTS = [{ + 'url': 'https://watch.pokemon.com/en-us/player.html?id=8309a40969894a8e8d5bc1311e9c5667', + 'md5': '62833938a31e61ab49ada92f524c42ff', + 'info_dict': { + 'id': '8309a40969894a8e8d5bc1311e9c5667', + 'ext': 'mp4', + 'title': 'Lillier and the Staff!', + 'description': 'md5:338841b8c21b283d24bdc9b568849f04', + } + }, { + 'url': 'https://watch.pokemon.com/de-de/player.html?id=b3c402e111a4459eb47e12160ab0ba07', + 'only_matching': True + }] + + def _extract_media(self, channel_array, video_id): + for channel in channel_array: + for media in channel.get('media'): + if media.get('id') == video_id: + return media + return None + + def _real_extract(self, url): + video_id = self._match_id(url) + + info = { + '_type': 'url', + 'id': video_id, + 'url': 'limelight:media:%s' % video_id, + 'ie_key': 'LimelightMedia', + } + + # API call can be avoided entirely if we are listing formats + if self._downloader.params.get('listformats', False): + return info + + webpage = self._download_webpage(url, video_id) + build_vars = self._parse_json(self._search_regex( + r'(?s)buildVars\s*=\s*({.*?})', webpage, 'build vars'), + video_id, transform_source=js_to_json) + region = build_vars.get('region') + channel_array = self._download_json(self._API_URL.format(region), video_id) + video_data = self._extract_media(channel_array, video_id) + + if video_data is None: + raise ExtractorError( + 'Video %s does not exist' % video_id, expected=True) + + info['_type'] = 'url_transparent' + images = video_data.get('images') + + return merge_dicts(info, { + 'title': video_data.get('title'), + 'description': video_data.get('description'), + 'thumbnail': images.get('medium') or images.get('small'), + 'series': 'Pokémon', + 'season_number': int_or_none(video_data.get('season')), + 'episode': video_data.get('title'), + 'episode_number': int_or_none(video_data.get('episode')), + }) |