mirror of
https://github.com/l1ving/youtube-dl
synced 2025-03-11 07:27:14 +08:00
Merge branch 'fix.25.12.2018'
This commit is contained in:
commit
7c41b6cce7
@ -243,8 +243,6 @@ class FFmpegFD(ExternalFD):
|
|||||||
# http://trac.ffmpeg.org/ticket/6125#comment:10
|
# http://trac.ffmpeg.org/ticket/6125#comment:10
|
||||||
args += ['-seekable', '1' if seekable else '0']
|
args += ['-seekable', '1' if seekable else '0']
|
||||||
|
|
||||||
args += self._configuration_args()
|
|
||||||
|
|
||||||
# start_time = info_dict.get('start_time') or 0
|
# start_time = info_dict.get('start_time') or 0
|
||||||
# if start_time:
|
# if start_time:
|
||||||
# args += ['-ss', compat_str(start_time)]
|
# args += ['-ss', compat_str(start_time)]
|
||||||
@ -312,6 +310,8 @@ class FFmpegFD(ExternalFD):
|
|||||||
|
|
||||||
args += ['-i', url, '-c', 'copy']
|
args += ['-i', url, '-c', 'copy']
|
||||||
|
|
||||||
|
args += self._configuration_args()
|
||||||
|
|
||||||
if self.params.get('test', False):
|
if self.params.get('test', False):
|
||||||
args += ['-fs', compat_str(self._TEST_FILE_SIZE)]
|
args += ['-fs', compat_str(self._TEST_FILE_SIZE)]
|
||||||
|
|
||||||
|
@ -2816,7 +2816,7 @@ class InfoExtractor(object):
|
|||||||
""" Return a compat_cookies.SimpleCookie with the cookies for the url """
|
""" Return a compat_cookies.SimpleCookie with the cookies for the url """
|
||||||
req = sanitized_Request(url)
|
req = sanitized_Request(url)
|
||||||
self._downloader.cookiejar.add_cookie_header(req)
|
self._downloader.cookiejar.add_cookie_header(req)
|
||||||
return compat_cookies.SimpleCookie(req.get_header('Cookie'))
|
return compat_cookies.SimpleCookie(str(req.get_header('Cookie')))
|
||||||
|
|
||||||
def _apply_first_set_cookie_header(self, url_handle, cookie):
|
def _apply_first_set_cookie_header(self, url_handle, cookie):
|
||||||
"""
|
"""
|
||||||
|
@ -431,6 +431,8 @@ class FacebookIE(InfoExtractor):
|
|||||||
video_title = self._html_search_regex(
|
video_title = self._html_search_regex(
|
||||||
r'(?s)<span class="fbPhotosPhotoCaption".*?id="fbPhotoPageCaption"><span class="hasCaption">(.*?)</span>',
|
r'(?s)<span class="fbPhotosPhotoCaption".*?id="fbPhotoPageCaption"><span class="hasCaption">(.*?)</span>',
|
||||||
webpage, 'alternative title', default=None)
|
webpage, 'alternative title', default=None)
|
||||||
|
if not video_title:
|
||||||
|
video_title = self._og_search_title(webpage, default=None)
|
||||||
if not video_title:
|
if not video_title:
|
||||||
video_title = self._html_search_meta(
|
video_title = self._html_search_meta(
|
||||||
'description', webpage, 'title', default=None)
|
'description', webpage, 'title', default=None)
|
||||||
@ -438,12 +440,13 @@ class FacebookIE(InfoExtractor):
|
|||||||
video_title = limit_length(video_title, 80)
|
video_title = limit_length(video_title, 80)
|
||||||
else:
|
else:
|
||||||
video_title = 'Facebook video #%s' % video_id
|
video_title = 'Facebook video #%s' % video_id
|
||||||
|
|
||||||
uploader = clean_html(get_element_by_id(
|
uploader = clean_html(get_element_by_id(
|
||||||
'fbPhotoPageAuthorName', webpage)) or self._search_regex(
|
'fbPhotoPageAuthorName', webpage)) or self._search_regex(
|
||||||
r'ownerName\s*:\s*"([^"]+)"', webpage, 'uploader',default=None) or \
|
r'ownerName\s*:\s*"([^"]+)"', webpage, 'uploader',default=None) or \
|
||||||
self._og_search_title(webpage, default=None) or self._search_regex(
|
self._search_regex(
|
||||||
r'\"ownerName\":"(.+?)"', tahoe_data.secondary,
|
r'\"ownerName\":"(.+?)"', tahoe_data.secondary,
|
||||||
'uploader_id', fatal=False)
|
'uploader_id', fatal=False) or self._og_search_title(webpage, default=None)
|
||||||
|
|
||||||
|
|
||||||
timestamp = int_or_none(self._search_regex(
|
timestamp = int_or_none(self._search_regex(
|
||||||
@ -457,18 +460,12 @@ class FacebookIE(InfoExtractor):
|
|||||||
'uploader_id', default=None) or self._search_regex(
|
'uploader_id', default=None) or self._search_regex(
|
||||||
r'[\'\"]ownerid[\'\"]\s*:\s*[\'\"](\d+)[\'\"]', tahoe_data.secondary,
|
r'[\'\"]ownerid[\'\"]\s*:\s*[\'\"](\d+)[\'\"]', tahoe_data.secondary,
|
||||||
'uploader_id', fatal=False)
|
'uploader_id', fatal=False)
|
||||||
|
|
||||||
thumbnail = self._og_search_thumbnail(webpage)
|
thumbnail = self._og_search_thumbnail(webpage)
|
||||||
|
|
||||||
view_count = parse_count(self._search_regex(
|
view_count = parse_count(self._extract_meta_count(['postViewCount', 'viewCount'], webpage, tahoe_data, 'likes'))
|
||||||
r'\bpostViewCount\s*:\s*["\']([\d,.]+)', webpage, 'view count',
|
likes_count = parse_count(self._extract_likes(webpage, tahoe_data))
|
||||||
default=None) or self._search_regex(
|
shares_count = parse_count(self._extract_meta_count(['sharecount'], webpage, tahoe_data, 'shares'))
|
||||||
r'[\'\"]postViewCount[\'\"]\s*:\s*(\d+)', tahoe_data.secondary, 'view count',
|
|
||||||
default=None) or self._search_regex(
|
|
||||||
r'\bviewCount\s*:\s*["\']([\d,.]+)', webpage, 'view count',
|
|
||||||
default=None) or self._search_regex(
|
|
||||||
r'[\'\"]viewCount[\'\"]\s*:\s*(\d+)', tahoe_data.secondary, 'view count',
|
|
||||||
default=None)
|
|
||||||
)
|
|
||||||
|
|
||||||
info_dict = {
|
info_dict = {
|
||||||
'id': video_id,
|
'id': video_id,
|
||||||
@ -480,11 +477,42 @@ class FacebookIE(InfoExtractor):
|
|||||||
'view_count': view_count,
|
'view_count': view_count,
|
||||||
'uploader_id': uploader_id,
|
'uploader_id': uploader_id,
|
||||||
'is_live': is_live,
|
'is_live': is_live,
|
||||||
'live_status': live_status
|
'live_status': live_status,
|
||||||
|
'like_count': likes_count,
|
||||||
|
'share_count': shares_count
|
||||||
}
|
}
|
||||||
|
|
||||||
return webpage, info_dict
|
return webpage, info_dict
|
||||||
|
|
||||||
|
def _extract_meta_count(self, fields, webpage, tahoe_data, name, ):
|
||||||
|
value = None
|
||||||
|
|
||||||
|
for f in fields:
|
||||||
|
if value:
|
||||||
|
break
|
||||||
|
value = self._search_regex(
|
||||||
|
r'\b%s\s*:\s*["\']([\d,.]+)' % f, webpage, name,
|
||||||
|
default=None
|
||||||
|
)
|
||||||
|
if value:
|
||||||
|
break
|
||||||
|
|
||||||
|
value = self._search_regex(
|
||||||
|
r'[\'\"]%s[\'\"]\s*:\s*(\d+)' % f, tahoe_data.secondary, name,
|
||||||
|
default=None)
|
||||||
|
|
||||||
|
return value
|
||||||
|
|
||||||
|
def _extract_likes(self, webpage, tahoe_data):
|
||||||
|
values = re.findall(r'\blikecount\s*:\s*["\']([\d,.]+)', webpage)
|
||||||
|
if values:
|
||||||
|
return values[-1]
|
||||||
|
|
||||||
|
|
||||||
|
values = re.findall(r'[\'\"]\blikecount[\'\"]\s*:\s*(\d+)', tahoe_data.secondary)
|
||||||
|
if values:
|
||||||
|
return values[-1]
|
||||||
|
|
||||||
def _real_extract(self, url):
|
def _real_extract(self, url):
|
||||||
video_id = self._match_id(url)
|
video_id = self._match_id(url)
|
||||||
|
|
||||||
|
@ -14,6 +14,7 @@ from ..utils import (
|
|||||||
remove_end,
|
remove_end,
|
||||||
try_get,
|
try_get,
|
||||||
xpath_text,
|
xpath_text,
|
||||||
|
parse_count
|
||||||
)
|
)
|
||||||
|
|
||||||
from .periscope import PeriscopeIE
|
from .periscope import PeriscopeIE
|
||||||
@ -165,6 +166,7 @@ class TwitterCardIE(TwitterBaseIE):
|
|||||||
config = None
|
config = None
|
||||||
formats = []
|
formats = []
|
||||||
duration = None
|
duration = None
|
||||||
|
view_count = None
|
||||||
|
|
||||||
urls = [url]
|
urls = [url]
|
||||||
if path.startswith('cards/'):
|
if path.startswith('cards/'):
|
||||||
@ -239,12 +241,18 @@ class TwitterCardIE(TwitterBaseIE):
|
|||||||
ct0 = self._get_cookies(url).get('ct0')
|
ct0 = self._get_cookies(url).get('ct0')
|
||||||
if ct0:
|
if ct0:
|
||||||
headers['csrf_token'] = ct0.value
|
headers['csrf_token'] = ct0.value
|
||||||
guest_token = self._download_json(
|
guest_token_c = self._get_cookies('http://api.twitter.com/').get('gt')
|
||||||
'%s/guest/activate.json' % self._API_BASE, video_id,
|
if not guest_token_c:
|
||||||
'Downloading guest token', data=b'',
|
guest_token = self._download_json(
|
||||||
headers=headers)['guest_token']
|
'%s/guest/activate.json' % self._API_BASE, video_id,
|
||||||
|
'Downloading guest token', data=b'',
|
||||||
|
headers=headers)['guest_token']
|
||||||
|
self._set_cookie('api.twitter.com', 'gt', guest_token)
|
||||||
|
else:
|
||||||
|
guest_token = guest_token_c.value
|
||||||
|
|
||||||
headers['x-guest-token'] = guest_token
|
headers['x-guest-token'] = guest_token
|
||||||
self._set_cookie('api.twitter.com', 'gt', guest_token)
|
|
||||||
config = self._download_json(
|
config = self._download_json(
|
||||||
'%s/videos/tweet/config/%s.json' % (self._API_BASE, video_id),
|
'%s/videos/tweet/config/%s.json' % (self._API_BASE, video_id),
|
||||||
video_id, headers=headers)
|
video_id, headers=headers)
|
||||||
@ -265,6 +273,7 @@ class TwitterCardIE(TwitterBaseIE):
|
|||||||
title = 'Twitter web player'
|
title = 'Twitter web player'
|
||||||
thumbnail = config.get('posterImage')
|
thumbnail = config.get('posterImage')
|
||||||
duration = float_or_none(track.get('durationMs'), scale=1000)
|
duration = float_or_none(track.get('durationMs'), scale=1000)
|
||||||
|
view_count = parse_count(track.get('viewCount'))
|
||||||
|
|
||||||
self._remove_duplicate_formats(formats)
|
self._remove_duplicate_formats(formats)
|
||||||
self._sort_formats(formats)
|
self._sort_formats(formats)
|
||||||
@ -275,6 +284,7 @@ class TwitterCardIE(TwitterBaseIE):
|
|||||||
'thumbnail': thumbnail,
|
'thumbnail': thumbnail,
|
||||||
'duration': duration,
|
'duration': duration,
|
||||||
'formats': formats,
|
'formats': formats,
|
||||||
|
'view_count': view_count
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -1,3 +1,3 @@
|
|||||||
from __future__ import unicode_literals
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
__version__ = 'vc.2019.06.08'
|
__version__ = 'vc.2019.06.19'
|
||||||
|
Loading…
x
Reference in New Issue
Block a user