mirror of
				https://github.com/yt-dlp/yt-dlp.git
				synced 2025-11-04 08:35:12 +00:00 
			
		
		
		
	Merge pull request #6306 from jaimeMF/extract_start_time
[youtube] Extract start_time
This commit is contained in:
		@@ -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,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,
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user