def test_compat_urllib_parse_urlencode(self): self.assertEqual(compat_urllib_parse_urlencode({'abc': 'def'}), 'abc=def') self.assertEqual(compat_urllib_parse_urlencode({'abc': b'def'}), 'abc=def') self.assertEqual(compat_urllib_parse_urlencode({b'abc': 'def'}), 'abc=def') self.assertEqual(compat_urllib_parse_urlencode({b'abc': b'def'}), 'abc=def') self.assertEqual(compat_urllib_parse_urlencode([('abc', 'def')]), 'abc=def') self.assertEqual(compat_urllib_parse_urlencode([('abc', b'def')]), 'abc=def') self.assertEqual(compat_urllib_parse_urlencode([(b'abc', 'def')]), 'abc=def') self.assertEqual(compat_urllib_parse_urlencode([(b'abc', b'def')]), 'abc=def')
def _real_extract(self, video_id): url = 'https://www.youtube.com/embed/%s' % video_id webpage = self._download_webpage(url, video_id, 'Downloading embed webpage') data = compat_urllib_parse_urlencode({ 'video_id': video_id, 'eurl': 'https://youtube.googleapis.com/v/' + video_id, 'sts': self._search_regex(r'"sts"\s*:\s*(\d+)', webpage, 'sts', default='') }) video_info_url = 'https://www.youtube.com/get_video_info?' + data video_info_webpage = self._download_webpage(video_info_url, video_id, 'Downloading video info webpage') video_info = compat_parse_qs(video_info_webpage) mpd_url = video_info.get('dashmpd')[0] player_url_json = self._search_regex(r'"assets":.+?"js":\s*("[^"]+")', webpage, 'JS player URL') player_url = loads(player_url_json) def decrypt_sig(mobj): s = mobj.group(1) dec_s = self._decrypt_signature(s, video_id, player_url) return '/signature/%s' % dec_s mpd_url = sub(r'/s/([a-fA-F0-9\.]+)', decrypt_sig, mpd_url) mpd = self._download_webpage(mpd_url, video_id, 'Downloading MPD manifest') return mpd