Browse Source

Merge pull request #6306 from jaimeMF/extract_start_time

[youtube] Extract start_time
totalwebcasting
Sergey M. 10 years ago
parent
commit
cdad742700
2 changed files with 23 additions and 1 deletions
  1. +4
    -0
      youtube_dl/extractor/common.py
  2. +19
    -1
      youtube_dl/extractor/youtube.py

+ 4
- 0
youtube_dl/extractor/common.py View File

@ -183,6 +183,10 @@ class InfoExtractor(object):
["Sports", "Berlin"] ["Sports", "Berlin"]
is_live: True, False, or None (=unknown). Whether this video is a is_live: True, False, or None (=unknown). Whether this video is a
live stream that goes on instead of a fixed-length video. live stream that goes on instead of a fixed-length video.
start_time: Time in seconds where the reproduction should start, as
specified in the url.
end_time: Time in seconds where the reproduction should end, as
specified in the url.
Unless mentioned otherwise, the fields should be Unicode strings. Unless mentioned otherwise, the fields should be Unicode strings.


+ 19
- 1
youtube_dl/extractor/youtube.py View File

@ -19,6 +19,7 @@ from ..compat import (
compat_urllib_parse, compat_urllib_parse,
compat_urllib_parse_unquote, compat_urllib_parse_unquote,
compat_urllib_parse_unquote_plus, compat_urllib_parse_unquote_plus,
compat_urllib_parse_urlparse,
compat_urllib_request, compat_urllib_request,
compat_urlparse, compat_urlparse,
compat_str, compat_str,
@ -31,6 +32,7 @@ from ..utils import (
get_element_by_id, get_element_by_id,
int_or_none, int_or_none,
orderedSet, orderedSet,
parse_duration,
str_to_int, str_to_int,
unescapeHTML, unescapeHTML,
unified_strdate, unified_strdate,
@ -317,7 +319,7 @@ class YoutubeIE(YoutubeBaseInfoExtractor):
IE_NAME = 'youtube' IE_NAME = 'youtube'
_TESTS = [ _TESTS = [
{ {
'url': 'http://www.youtube.com/watch?v=BaW_jenozKc',
'url': 'http://www.youtube.com/watch?v=BaW_jenozKcj&t=1s&end=9',
'info_dict': { 'info_dict': {
'id': 'BaW_jenozKc', 'id': 'BaW_jenozKc',
'ext': 'mp4', 'ext': 'mp4',
@ -329,6 +331,8 @@ class YoutubeIE(YoutubeBaseInfoExtractor):
'categories': ['Science & Technology'], 'categories': ['Science & Technology'],
'like_count': int, 'like_count': int,
'dislike_count': int, 'dislike_count': int,
'start_time': 1,
'end_time': 9,
} }
}, },
{ {
@ -889,6 +893,18 @@ class YoutubeIE(YoutubeBaseInfoExtractor):
'http' if self._downloader.params.get('prefer_insecure', False) 'http' if self._downloader.params.get('prefer_insecure', False)
else 'https') else 'https')
start_time = None
end_time = None
parsed_url = compat_urllib_parse_urlparse(url)
for component in [parsed_url.fragment, parsed_url.query]:
query = compat_parse_qs(component)
if start_time is None and 't' in query:
start_time = parse_duration(query['t'][0])
if start_time is None and 'start' in query:
start_time = parse_duration(query['start'][0])
if end_time is None and 'end' in query:
end_time = parse_duration(query['end'][0])
# Extract original video URL from URL with redirection, like age verification, using next_url parameter # Extract original video URL from URL with redirection, like age verification, using next_url parameter
mobj = re.search(self._NEXT_URL_RE, url) mobj = re.search(self._NEXT_URL_RE, url)
if mobj: if mobj:
@ -1256,6 +1272,8 @@ class YoutubeIE(YoutubeBaseInfoExtractor):
'average_rating': float_or_none(video_info.get('avg_rating', [None])[0]), 'average_rating': float_or_none(video_info.get('avg_rating', [None])[0]),
'formats': formats, 'formats': formats,
'is_live': is_live, 'is_live': is_live,
'start_time': start_time,
'end_time': end_time,
} }


Loading…
Cancel
Save