diff options
| author | Jaime Marquínez Ferrándiz <jaime.marquinez.ferrandiz@gmail.com> | 2014-02-21 15:15:58 +0100 | 
|---|---|---|
| committer | Jaime Marquínez Ferrándiz <jaime.marquinez.ferrandiz@gmail.com> | 2014-02-21 15:15:58 +0100 | 
| commit | 3489b7d26c727dac604cf9ece562139372da9bb7 (patch) | |
| tree | 88fc50f4b60caea0f26a8618ef7aba75cebadcfc | |
| parent | acd2bcc384cef57cebafd30c2a774f0c4d157f44 (diff) | |
[youtube] Simplify the decryption process for the manifest urls and add a test (closes #2422)
| -rw-r--r-- | youtube_dl/extractor/youtube.py | 27 | 
1 files changed, 21 insertions, 6 deletions
| diff --git a/youtube_dl/extractor/youtube.py b/youtube_dl/extractor/youtube.py index 49cca4c63..e1ef90e38 100644 --- a/youtube_dl/extractor/youtube.py +++ b/youtube_dl/extractor/youtube.py @@ -297,6 +297,23 @@ class YoutubeIE(YoutubeBaseInfoExtractor, SubtitlesInfoExtractor):                  u"format": "141",              },          }, +        # DASH manifest with encrypted signature +        { +            u'url': u'https://www.youtube.com/watch?v=IB3lcPjvWLA', +            u'info_dict': { +                u'id': u'IB3lcPjvWLA', +                u'ext': u'm4a', +                u'title': u'Afrojack - The Spark ft. Spree Wilson', +                u'description': u'md5:3199ed45ee8836572865580804d7ac0f', +                u'uploader': u'AfrojackVEVO', +                u'uploader_id': u'AfrojackVEVO', +                u'upload_date': u'20131011', +            }, +            u"params": { +                u'youtube_include_dash_manifest': True, +                u'format': '141', +            }, +        },      ] @@ -1272,8 +1289,8 @@ class YoutubeIE(YoutubeBaseInfoExtractor, SubtitlesInfoExtractor):              mobj = re.search(r';ytplayer.config = ({.*?});', video_webpage)              if not mobj:                  raise ValueError('Could not find vevo ID') -            info = json.loads(mobj.group(1)) -            args = info['args'] +            ytplayer_config = json.loads(mobj.group(1)) +            args = ytplayer_config['args']              # Easy way to know if the 's' value is in url_encoded_fmt_stream_map              # this signatures are encrypted              if 'url_encoded_fmt_stream_map' not in args: @@ -1374,11 +1391,9 @@ class YoutubeIE(YoutubeBaseInfoExtractor, SubtitlesInfoExtractor):                  # Luckily, it seems, this case uses some kind of default signature (len == 86), so the                  # combination of get_video_info and the _static_decrypt_signature() decryption fallback will work here.                  if age_gate: -                    dash_manifest_url = video_info.get('dashmpd')[0]; +                    dash_manifest_url = video_info.get('dashmpd')[0]                  else: -                    x = re.search(r'ytplayer\.config = ({.*});', video_webpage) -                    x = json.loads(x.group(1)); -                    dash_manifest_url = x['args']['dashmpd'] +                    dash_manifest_url = ytplayer_config['args']['dashmpd']                  def decrypt_sig(mobj):                      s = mobj.group(1)                      dec_s = self._decrypt_signature(s, video_id, player_url, age_gate) | 
