projects
/
youtube-dl
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Merge branch 'master' into openload-phantomjs-method
[youtube-dl]
/
youtube_dl
/
extractor
/
common.py
diff --git
a/youtube_dl/extractor/common.py
b/youtube_dl/extractor/common.py
index 359c549c5c13d8c8f26fd82041166e52d0897ae2..76b5378e97620137c286cf156b6e2ac790f04a8a 100644
(file)
--- a/
youtube_dl/extractor/common.py
+++ b/
youtube_dl/extractor/common.py
@@
-245,6
+245,10
@@
class InfoExtractor(object):
specified in the URL.
end_time: Time in seconds where the reproduction should end, as
specified in the URL.
specified in the URL.
end_time: Time in seconds where the reproduction should end, as
specified in the URL.
+ chapters: A list of dictionaries, with the following entries:
+ * "start_time" - The start time of the chapter in seconds
+ * "end_time" - The end time of the chapter in seconds
+ * "title" (optional, string)
The following fields should only be used when the video belongs to some logical
chapter or section:
The following fields should only be used when the video belongs to some logical
chapter or section:
@@
-990,6
+994,7
@@
class InfoExtractor(object):
'tbr': int_or_none(e.get('bitrate')),
'width': int_or_none(e.get('width')),
'height': int_or_none(e.get('height')),
'tbr': int_or_none(e.get('bitrate')),
'width': int_or_none(e.get('width')),
'height': int_or_none(e.get('height')),
+ 'view_count': int_or_none(e.get('interactionCount')),
})
for e in json_ld:
})
for e in json_ld:
@@
-1334,7
+1339,7
@@
class InfoExtractor(object):
if '#EXT-X-FAXS-CM:' in m3u8_doc: # Adobe Flash Access
return []
if '#EXT-X-FAXS-CM:' in m3u8_doc: # Adobe Flash Access
return []
- formats = [
self._m3u8_meta_format(m3u8_url, ext, preference, m3u8_id)
]
+ formats = []
format_url = lambda u: (
u
format_url = lambda u: (
u
@@
-1386,6
+1391,7
@@
class InfoExtractor(object):
f = {
'format_id': '-'.join(format_id),
'url': format_url(media_url),
f = {
'format_id': '-'.join(format_id),
'url': format_url(media_url),
+ 'manifest_url': m3u8_url,
'language': media.get('LANGUAGE'),
'ext': ext,
'protocol': entry_protocol,
'language': media.get('LANGUAGE'),
'ext': ext,
'protocol': entry_protocol,
@@
-1397,7
+1403,9
@@
class InfoExtractor(object):
def build_stream_name():
# Despite specification does not mention NAME attribute for
def build_stream_name():
# Despite specification does not mention NAME attribute for
- # EXT-X-STREAM-INF it still sometimes may be present
+ # EXT-X-STREAM-INF tag it still sometimes may be present (see [1]
+ # or vidio test in TestInfoExtractor.test_parse_m3u8_formats)
+ # 1. http://www.vidio.com/watch/165683-dj_ambred-booyah-live-2015
stream_name = last_stream_inf.get('NAME')
if stream_name:
return stream_name
stream_name = last_stream_inf.get('NAME')
if stream_name:
return stream_name
@@
-1420,7
+1428,9
@@
class InfoExtractor(object):
elif line.startswith('#') or not line.strip():
continue
else:
elif line.startswith('#') or not line.strip():
continue
else:
- tbr = int_or_none(last_stream_inf.get('AVERAGE-BANDWIDTH') or last_stream_inf.get('BANDWIDTH'), scale=1000)
+ tbr = float_or_none(
+ last_stream_inf.get('AVERAGE-BANDWIDTH') or
+ last_stream_inf.get('BANDWIDTH'), scale=1000)
format_id = []
if m3u8_id:
format_id.append(m3u8_id)
format_id = []
if m3u8_id:
format_id.append(m3u8_id)
@@
-1434,7
+1444,7
@@
class InfoExtractor(object):
f = {
'format_id': '-'.join(format_id),
'url': manifest_url,
f = {
'format_id': '-'.join(format_id),
'url': manifest_url,
- 'manifest_url': m
anifest
_url,
+ 'manifest_url': m
3u8
_url,
'tbr': tbr,
'ext': ext,
'fps': float_or_none(last_stream_inf.get('FRAME-RATE')),
'tbr': tbr,
'ext': ext,
'fps': float_or_none(last_stream_inf.get('FRAME-RATE')),
@@
-1850,7
+1860,7
@@
class InfoExtractor(object):
'ext': mimetype2ext(mime_type),
'width': int_or_none(representation_attrib.get('width')),
'height': int_or_none(representation_attrib.get('height')),
'ext': mimetype2ext(mime_type),
'width': int_or_none(representation_attrib.get('width')),
'height': int_or_none(representation_attrib.get('height')),
- 'tbr':
in
t_or_none(bandwidth, 1000),
+ 'tbr':
floa
t_or_none(bandwidth, 1000),
'asr': int_or_none(representation_attrib.get('audioSamplingRate')),
'fps': int_or_none(representation_attrib.get('frameRate')),
'language': lang if lang not in ('mul', 'und', 'zxx', 'mis') else None,
'asr': int_or_none(representation_attrib.get('audioSamplingRate')),
'fps': int_or_none(representation_attrib.get('frameRate')),
'language': lang if lang not in ('mul', 'und', 'zxx', 'mis') else None,
@@
-2229,7
+2239,7
@@
class InfoExtractor(object):
def _find_jwplayer_data(self, webpage, video_id=None, transform_source=js_to_json):
mobj = re.search(
def _find_jwplayer_data(self, webpage, video_id=None, transform_source=js_to_json):
mobj = re.search(
- r'(?s)jwplayer\((?P<quote>[\'"])[^\'" ]+(?P=quote)\).*?\.setup\s*\((?P<options>[^)]+)\)',
+ r'(?s)jwplayer\((?P<quote>[\'"])[^\'" ]+(?P=quote)\)
(?!</script>)
.*?\.setup\s*\((?P<options>[^)]+)\)',
webpage)
if mobj:
try:
webpage)
if mobj:
try:
@@
-2396,10
+2406,12
@@
class InfoExtractor(object):
self._downloader.report_warning(msg)
return res
self._downloader.report_warning(msg)
return res
- def _set_cookie(self, domain, name, value, expire_time=None):
+ def _set_cookie(self, domain, name, value, expire_time=None, port=None,
+ path='/', secure=False, discard=False, rest={}, **kwargs):
cookie = compat_cookiejar.Cookie(
cookie = compat_cookiejar.Cookie(
- 0, name, value, None, None, domain, None,
- None, '/', True, False, expire_time, '', None, None, None)
+ 0, name, value, port, not port is None, domain, True,
+ domain.startswith('.'), path, True, secure, expire_time,
+ discard, None, None, rest)
self._downloader.cookiejar.set_cookie(cookie)
def _get_cookies(self, url):
self._downloader.cookiejar.set_cookie(cookie)
def _get_cookies(self, url):