|
|
@ -2499,29 +2499,6 @@ class YoutubeIE(YoutubeBaseInfoExtractor):
|
|
|
|
'uploader_id': '@abaointokyo',
|
|
|
|
'uploader_id': '@abaointokyo',
|
|
|
|
},
|
|
|
|
},
|
|
|
|
'params': {'skip_download': True}
|
|
|
|
'params': {'skip_download': True}
|
|
|
|
}, {
|
|
|
|
|
|
|
|
# Story. Requires specific player params to work.
|
|
|
|
|
|
|
|
'url': 'https://www.youtube.com/watch?v=vv8qTUWmulI',
|
|
|
|
|
|
|
|
'info_dict': {
|
|
|
|
|
|
|
|
'id': 'vv8qTUWmulI',
|
|
|
|
|
|
|
|
'ext': 'mp4',
|
|
|
|
|
|
|
|
'availability': 'unlisted',
|
|
|
|
|
|
|
|
'view_count': int,
|
|
|
|
|
|
|
|
'channel_id': 'UCzIZ8HrzDgc-pNQDUG6avBA',
|
|
|
|
|
|
|
|
'upload_date': '20220526',
|
|
|
|
|
|
|
|
'categories': ['Education'],
|
|
|
|
|
|
|
|
'title': 'Story',
|
|
|
|
|
|
|
|
'channel': 'IT\'S HISTORY',
|
|
|
|
|
|
|
|
'description': '',
|
|
|
|
|
|
|
|
'duration': 12,
|
|
|
|
|
|
|
|
'playable_in_embed': True,
|
|
|
|
|
|
|
|
'age_limit': 0,
|
|
|
|
|
|
|
|
'live_status': 'not_live',
|
|
|
|
|
|
|
|
'tags': [],
|
|
|
|
|
|
|
|
'thumbnail': 'https://i.ytimg.com/vi_webp/vv8qTUWmulI/maxresdefault.webp',
|
|
|
|
|
|
|
|
'channel_url': 'https://www.youtube.com/channel/UCzIZ8HrzDgc-pNQDUG6avBA',
|
|
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
'skip': 'stories get removed after some period of time',
|
|
|
|
|
|
|
|
}, {
|
|
|
|
}, {
|
|
|
|
'url': 'https://www.youtube.com/watch?v=tjjjtzRLHvA',
|
|
|
|
'url': 'https://www.youtube.com/watch?v=tjjjtzRLHvA',
|
|
|
|
'info_dict': {
|
|
|
|
'info_dict': {
|
|
|
@ -3620,7 +3597,7 @@ class YoutubeIE(YoutubeBaseInfoExtractor):
|
|
|
|
yt_query = {
|
|
|
|
yt_query = {
|
|
|
|
'videoId': video_id,
|
|
|
|
'videoId': video_id,
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if smuggled_data.get('is_story') or _split_innertube_client(client)[0] == 'android':
|
|
|
|
if _split_innertube_client(client)[0] == 'android':
|
|
|
|
yt_query['params'] = self._PLAYER_PARAMS
|
|
|
|
yt_query['params'] = self._PLAYER_PARAMS
|
|
|
|
|
|
|
|
|
|
|
|
yt_query.update(self._generate_player_context(sts))
|
|
|
|
yt_query.update(self._generate_player_context(sts))
|
|
|
@ -4033,8 +4010,6 @@ class YoutubeIE(YoutubeBaseInfoExtractor):
|
|
|
|
webpage = None
|
|
|
|
webpage = None
|
|
|
|
if 'webpage' not in self._configuration_arg('player_skip'):
|
|
|
|
if 'webpage' not in self._configuration_arg('player_skip'):
|
|
|
|
query = {'bpctr': '9999999999', 'has_verified': '1'}
|
|
|
|
query = {'bpctr': '9999999999', 'has_verified': '1'}
|
|
|
|
if smuggled_data.get('is_story'): # XXX: Deprecated
|
|
|
|
|
|
|
|
query['pp'] = self._PLAYER_PARAMS
|
|
|
|
|
|
|
|
webpage = self._download_webpage(
|
|
|
|
webpage = self._download_webpage(
|
|
|
|
webpage_url, video_id, fatal=False, query=query)
|
|
|
|
webpage_url, video_id, fatal=False, query=query)
|
|
|
|
|
|
|
|
|
|
|
@ -7145,22 +7120,6 @@ class YoutubeHistoryIE(YoutubeFeedsInfoExtractor):
|
|
|
|
}]
|
|
|
|
}]
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class YoutubeStoriesIE(InfoExtractor):
|
|
|
|
|
|
|
|
IE_DESC = 'YouTube channel stories; "ytstories:" prefix'
|
|
|
|
|
|
|
|
IE_NAME = 'youtube:stories'
|
|
|
|
|
|
|
|
_VALID_URL = r'ytstories:UC(?P<id>[A-Za-z0-9_-]{21}[AQgw])$'
|
|
|
|
|
|
|
|
_TESTS = [{
|
|
|
|
|
|
|
|
'url': 'ytstories:UCwFCb4jeqaKWnciAYM-ZVHg',
|
|
|
|
|
|
|
|
'only_matching': True,
|
|
|
|
|
|
|
|
}]
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def _real_extract(self, url):
|
|
|
|
|
|
|
|
playlist_id = f'RLTD{self._match_id(url)}'
|
|
|
|
|
|
|
|
return self.url_result(
|
|
|
|
|
|
|
|
smuggle_url(f'https://www.youtube.com/playlist?list={playlist_id}&playnext=1', {'is_story': True}),
|
|
|
|
|
|
|
|
ie=YoutubeTabIE, video_id=playlist_id)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class YoutubeShortsAudioPivotIE(InfoExtractor):
|
|
|
|
class YoutubeShortsAudioPivotIE(InfoExtractor):
|
|
|
|
IE_DESC = 'YouTube Shorts audio pivot (Shorts using audio of a given video)'
|
|
|
|
IE_DESC = 'YouTube Shorts audio pivot (Shorts using audio of a given video)'
|
|
|
|
IE_NAME = 'youtube:shorts:pivot:audio'
|
|
|
|
IE_NAME = 'youtube:shorts:pivot:audio'
|
|
|
|