|
|
@ -59,7 +59,6 @@ from ..utils import (
|
|
|
|
unsmuggle_url,
|
|
|
|
unsmuggle_url,
|
|
|
|
update_url_query,
|
|
|
|
update_url_query,
|
|
|
|
url_or_none,
|
|
|
|
url_or_none,
|
|
|
|
urlencode_postdata,
|
|
|
|
|
|
|
|
urljoin,
|
|
|
|
urljoin,
|
|
|
|
variadic,
|
|
|
|
variadic,
|
|
|
|
)
|
|
|
|
)
|
|
|
@ -3168,40 +3167,7 @@ class YoutubeIE(YoutubeBaseInfoExtractor):
|
|
|
|
needs_auth=info['age_limit'] >= 18,
|
|
|
|
needs_auth=info['age_limit'] >= 18,
|
|
|
|
is_unlisted=None if is_private is None else is_unlisted)
|
|
|
|
is_unlisted=None if is_private is None else is_unlisted)
|
|
|
|
|
|
|
|
|
|
|
|
# get xsrf for annotations or comments
|
|
|
|
if self.get_param('getcomments', False):
|
|
|
|
get_annotations = self.get_param('writeannotations', False)
|
|
|
|
|
|
|
|
get_comments = self.get_param('getcomments', False)
|
|
|
|
|
|
|
|
if get_annotations or get_comments:
|
|
|
|
|
|
|
|
xsrf_token = None
|
|
|
|
|
|
|
|
if master_ytcfg:
|
|
|
|
|
|
|
|
xsrf_token = try_get(master_ytcfg, lambda x: x['XSRF_TOKEN'], compat_str)
|
|
|
|
|
|
|
|
if not xsrf_token:
|
|
|
|
|
|
|
|
xsrf_token = self._search_regex(
|
|
|
|
|
|
|
|
r'([\'"])XSRF_TOKEN\1\s*:\s*([\'"])(?P<xsrf_token>(?:(?!\2).)+)\2',
|
|
|
|
|
|
|
|
webpage, 'xsrf token', group='xsrf_token', fatal=False)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# annotations
|
|
|
|
|
|
|
|
if get_annotations:
|
|
|
|
|
|
|
|
invideo_url = get_first(
|
|
|
|
|
|
|
|
player_responses,
|
|
|
|
|
|
|
|
('annotations', 0, 'playerAnnotationsUrlsRenderer', 'invideoUrl'),
|
|
|
|
|
|
|
|
expected_type=str)
|
|
|
|
|
|
|
|
if xsrf_token and invideo_url:
|
|
|
|
|
|
|
|
xsrf_field_name = None
|
|
|
|
|
|
|
|
if master_ytcfg:
|
|
|
|
|
|
|
|
xsrf_field_name = try_get(master_ytcfg, lambda x: x['XSRF_FIELD_NAME'], compat_str)
|
|
|
|
|
|
|
|
if not xsrf_field_name:
|
|
|
|
|
|
|
|
xsrf_field_name = self._search_regex(
|
|
|
|
|
|
|
|
r'([\'"])XSRF_FIELD_NAME\1\s*:\s*([\'"])(?P<xsrf_field_name>\w+)\2',
|
|
|
|
|
|
|
|
webpage, 'xsrf field name',
|
|
|
|
|
|
|
|
group='xsrf_field_name', default='session_token')
|
|
|
|
|
|
|
|
info['annotations'] = self._download_webpage(
|
|
|
|
|
|
|
|
self._proto_relative_url(invideo_url),
|
|
|
|
|
|
|
|
video_id, note='Downloading annotations',
|
|
|
|
|
|
|
|
errnote='Unable to download video annotations', fatal=False,
|
|
|
|
|
|
|
|
data=urlencode_postdata({xsrf_field_name: xsrf_token}))
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if get_comments:
|
|
|
|
|
|
|
|
info['__post_extractor'] = lambda: self._extract_comments(master_ytcfg, video_id, contents, webpage)
|
|
|
|
info['__post_extractor'] = lambda: self._extract_comments(master_ytcfg, video_id, contents, webpage)
|
|
|
|
|
|
|
|
|
|
|
|
self.mark_watched(video_id, player_responses)
|
|
|
|
self.mark_watched(video_id, player_responses)
|
|
|
|