Merge pull request #6306 from jaimeMF/extract_start_time
authorSergey M. <dstftw@gmail.com>
Thu, 23 Jul 2015 17:33:54 +0000 (23:33 +0600)
committerSergey M. <dstftw@gmail.com>
Thu, 23 Jul 2015 17:33:54 +0000 (23:33 +0600)
[youtube] Extract start_time

1  2 
youtube_dl/extractor/youtube.py

index 323681960e8788a1c9ba735a0e3166f1249a3195,462d244d8881cd2c098f45705b3443e6b16aff04..229fc3a0f762597832d7c2f31f46e64f0772293c
@@@ -19,6 -19,7 +19,7 @@@ from ..compat import 
      compat_urllib_parse,
      compat_urllib_parse_unquote,
      compat_urllib_parse_unquote_plus,
+     compat_urllib_parse_urlparse,
      compat_urllib_request,
      compat_urlparse,
      compat_str,
@@@ -31,6 -32,7 +32,7 @@@ from ..utils import 
      get_element_by_id,
      int_or_none,
      orderedSet,
+     parse_duration,
      str_to_int,
      unescapeHTML,
      unified_strdate,
@@@ -317,7 -319,7 +319,7 @@@ class YoutubeIE(YoutubeBaseInfoExtracto
      IE_NAME = 'youtube'
      _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': {
                  'id': 'BaW_jenozKc',
                  'ext': 'mp4',
                  'categories': ['Science & Technology'],
                  'like_count': int,
                  'dislike_count': int,
+                 'start_time': 1,
+                 'end_time': 9,
              }
          },
          {
              'http' if self._downloader.params.get('prefer_insecure', False)
              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
          mobj = re.search(self._NEXT_URL_RE, url)
          if mobj:
                          video_id, note=False,
                          errnote='unable to download video info webpage')
                      get_video_info = compat_parse_qs(video_info_webpage)
 -                    add_dash_mpd(get_video_info)
 +                    if get_video_info.get('use_cipher_signature') != ['True']:
 +                        add_dash_mpd(get_video_info)
                      if not video_info:
                          video_info = get_video_info
                      if 'token' in get_video_info:
              'average_rating': float_or_none(video_info.get('avg_rating', [None])[0]),
              'formats': formats,
              'is_live': is_live,
+             'start_time': start_time,
+             'end_time': end_time,
          }