Merge remote-tracking branch 'upstream/master'
authorAllan Zhou <allanzp@gmail.com>
Wed, 21 Aug 2013 17:53:42 +0000 (10:53 -0700)
committerAllan Zhou <allanzp@gmail.com>
Wed, 21 Aug 2013 17:53:42 +0000 (10:53 -0700)
1  2 
youtube_dl/extractor/youtube.py

index 1599dd484cf79815a6cf9da0069352802b0cad1b,4c9bab4597b0f85e5fc437dfaadd3134e5974d35..7d6d07b17840247f8f873f0f6e3aa564d2a394c6
@@@ -155,19 -155,11 +155,19 @@@ class YoutubeIE(YoutubeBaseInfoExtracto
      # Listed in order of quality
      _available_formats = ['38', '37', '46', '22', '45', '35', '44', '34', '18', '43', '6', '5', '17', '13',
                            '95', '94', '93', '92', '132', '151',
 -                          '85', '84', '102', '83', '101', '82', '100',
 +                          '85', '84', '102', '83', '101', '82', '100',        # 3D
 +                          '138', '137', '136', '135', '134', '133', '160',    # Dash video mp4
 +                          '141', '140', '139',                                # Dash auido mp4
 +                          '248', '247', '246', '245', '244', '243', '242',    # Dash video webm
 +                          '172', '171',                                       # Dash audio webm
                            ]
      _available_formats_prefer_free = ['38', '46', '37', '45', '22', '44', '35', '43', '34', '18', '6', '5', '17', '13',
                                        '95', '94', '93', '92', '132', '151',
                                        '85', '102', '84', '101', '83', '100', '82',
 +                                      '248', '247', '246', '245', '244', '243', '242',    # Dash video webm
 +                                      '172', '171',                                       # Dash audio webm
 +                                      '138', '137', '136', '135', '134', '133', '160',    # Dash video mp4
 +                                      '141', '140', '139',                                # Dash auido mp4
                                        ]
      _video_extensions = {
          '13': '3gp',
          '100': 'webm',
          '101': 'webm',
          '102': 'webm',
 -        
 +
          # videos that use m3u8
          '92': 'mp4',
          '93': 'mp4',
          '96': 'mp4',
          '132': 'mp4',
          '151': 'mp4',
 +
 +        # Dash mp4
 +        '133': 'mp4',
 +        '134': 'mp4',
 +        '135': 'mp4',
 +        '136': 'mp4',
 +        '137': 'mp4',
 +        '138': 'mp4',
 +        '139': 'mp4',
 +        '140': 'mp4',
 +        '141': 'mp4',
 +        '160': 'mp4',
 +
 +        # Dash webm
 +        '171': 'webm',
 +        '172': 'webm',
 +        '242': 'webm',
 +        '243': 'webm',
 +        '244': 'webm',
 +        '245': 'webm',
 +        '246': 'webm',
 +        '247': 'webm',
 +        '248': 'webm',
      }
      _video_dimensions = {
          '5': '240x400',
          '96': '1080p',
          '100': '360p',
          '101': '480p',
 -        '102': '720p',        
 +        '102': '720p',
          '132': '240p',
          '151': '72p',
 +        '133': '240p',
 +        '134': '360p',
 +        '135': '480p',
 +        '136': '720p',
 +        '137': '1080p',
 +        '138': '>1080p',
 +        '139': '48k',
 +        '140': '128k',
 +        '141': '256k',
 +        '160': '192p',
 +        '171': '128k',
 +        '172': '256k',
 +        '242': '240p',
 +        '243': '360p',
 +        '244': '480p',
 +        '245': '480p',
 +        '246': '480p',
 +        '247': '720p',
 +        '248': '1080p',
      }
 -    _3d_itags = ['85', '84', '102', '83', '101', '82', '100']
 +    _special_itags = {
 +        '82': '3D',
 +        '83': '3D',
 +        '84': '3D',
 +        '85': '3D',
 +        '100': '3D',
 +        '101': '3D',
 +        '102': '3D',
 +        '133': 'DASH Video',
 +        '134': 'DASH Video',
 +        '135': 'DASH Video',
 +        '136': 'DASH Video',
 +        '137': 'DASH Video',
 +        '138': 'DASH Video',
 +        '139': 'DASH Audio',
 +        '140': 'DASH Audio',
 +        '141': 'DASH Audio',
 +        '160': 'DASH Video',
 +        '171': 'DASH Audio',
 +        '172': 'DASH Audio',
 +        '242': 'DASH Video',
 +        '243': 'DASH Video',
 +        '244': 'DASH Video',
 +        '245': 'DASH Video',
 +        '246': 'DASH Video',
 +        '247': 'DASH Video',
 +        '248': 'DASH Video',
 +    }
 +
      IE_NAME = u'youtube'
      _TESTS = [
          {
                  u"upload_date": u"20120506",
                  u"title": u"Icona Pop - I Love It (feat. Charli XCX) [OFFICIAL VIDEO]",
                  u"description": u"md5:b085c9804f5ab69f4adea963a2dceb3c",
-                 u"uploader": u"IconaPop",
+                 u"uploader": u"Icona Pop",
                  u"uploader_id": u"IconaPop"
              }
          },
          for x in formats:
              print('%s\t:\t%s\t[%s]%s' %(x, self._video_extensions.get(x, 'flv'),
                                          self._video_dimensions.get(x, '???'),
 -                                        ' (3D)' if x in self._3d_itags else ''))
 +                                        ' ('+self._special_itags[x]+')' if x in self._special_itags else ''))
  
      def _extract_id(self, url):
          mobj = re.match(self._VALID_URL, url, re.VERBOSE)
              if m_s is not None:
                  self.to_screen(u'%s: Encrypted signatures detected.' % video_id)
                  video_info['url_encoded_fmt_stream_map'] = [args['url_encoded_fmt_stream_map']]
 +            m_s = re.search(r'[&,]s=', args.get('adaptive_fmts', u''))
 +            if m_s is not None:
 +                if 'url_encoded_fmt_stream_map' in video_info:
 +                    video_info['url_encoded_fmt_stream_map'][0] += ',' + args['adaptive_fmts']
 +                else:
 +                    video_info['url_encoded_fmt_stream_map'] = [args['adaptive_fmts']]
 +            elif 'adaptive_fmts' in video_info:
 +                if 'url_encoded_fmt_stream_map' in video_info:
 +                    video_info['url_encoded_fmt_stream_map'][0] += ',' + video_info['adaptive_fmts'][0]
 +                else:
 +                    video_info['url_encoded_fmt_stream_map'] = video_info['adaptive_fmts']
          except ValueError:
              pass
  
  
              video_format = '{0} - {1}{2}'.format(format_param if format_param else video_extension,
                                                self._video_dimensions.get(format_param, '???'),
 -                                              ' (3D)' if format_param in self._3d_itags else '')
 +                                              ' ('+self._special_itags[format_param]+')' if format_param in self._special_itags else '')
  
              results.append({
                  'id':       video_id,