Example #1
0
def download_and_convert(issue):
    downloader = get_downloader()
    ie = YoutubeIE(downloader=downloader)
    try:
        info = ie.extract(issue.youtube_url)
    except ExtractorError:
        return False

    tmp_dir = os.path.join(settings.TMP_DIR)
    tmp_video_fn = mktemp(suffix="." + settings.YOUTUBE_EXT, dir=tmp_dir)
    try:
        downloader.download(tmp_video_fn, [x for x in info["formats"] if x["format_id"] == settings.YOUTUBE_FORMAT][0])
    finally:
        try:
            os.remove(tmp_video_fn + ".part")
        except FileNotFoundError:
            pass
    result_fn = mktemp(suffix=".mp3", dir=tmp_dir)
    call([os.path.join(settings.BASE_DIR, "scripts", "extract-speedup-file.sh"),
          tmp_video_fn, settings.YOUTUBE_EXT, settings.SPEEDUP, tmp_dir, result_fn])

    with open(result_fn, "rb") as f:
        issue.file.save("{0}.mp3".format(issue.youtube_id), File(f))
        issue.length_audio = get_audio_length(issue.file.path)
        issue.save()

    os.remove(result_fn)
    return True
 def test_youtube_subtitles(self):
     DL = FakeDownloader()
     DL.params['writesubtitles'] = True
     IE = YoutubeIE(DL)
     info_dict = IE.extract('QRS8MkLhQmM')
     sub = info_dict[0]['subtitles'][0]
     self.assertEqual(md5(sub[2]), '4cd9278a35ba2305f47354ee13472260')
 def test_youtube_no_subtitles(self):
     DL = FakeDownloader()
     DL.params['writesubtitles'] = False
     IE = YoutubeIE(DL)
     info_dict = IE.extract('QRS8MkLhQmM')
     subtitles = info_dict[0]['subtitles']
     self.assertEqual(subtitles, None)
 def test_youtube_no_subtitles(self):
     DL = FakeYDL()
     DL.params["writesubtitles"] = False
     IE = YoutubeIE(DL)
     info_dict = IE.extract("QRS8MkLhQmM")
     subtitles = info_dict[0]["subtitles"]
     self.assertEqual(subtitles, None)
 def test_youtube_allsubtitles(self):
     DL = FakeDownloader()
     DL.params['allsubtitles'] = True
     IE = YoutubeIE(DL)
     info_dict = IE.extract('QRS8MkLhQmM')
     subtitles = info_dict[0]['subtitles']
     self.assertEqual(len(subtitles), 13)
 def test_youtube_allsubtitles(self):
     DL = FakeYDL()
     DL.params["allsubtitles"] = True
     IE = YoutubeIE(DL)
     info_dict = IE.extract("QRS8MkLhQmM")
     subtitles = info_dict[0]["subtitles"]
     self.assertEqual(len(subtitles), 13)
 def test_youtube_matching(self):
     self.assertTrue(YoutubeIE.suitable('PLtS2H6bU1M'))
     self.assertFalse(YoutubeIE.suitable('https://www.youtube.com/watch?v=AV6J6_AeFEQ&playnext=1&list=PL4023E734DA416012'))  # 668
     self.assertMatch('http://youtu.be/BaW_jenozKc', ['youtube'])
     self.assertMatch('http://www.youtube.com/v/BaW_jenozKc', ['youtube'])
     self.assertMatch('https://youtube.googleapis.com/v/BaW_jenozKc', ['youtube'])
     self.assertMatch('http://www.cleanvideosearch.com/media/action/yt/watch?videoId=8v_4O44sfjM', ['youtube'])
Example #8
0
def get_video_info(url):
    downloader = get_downloader()
    ie = YoutubeIE(downloader=downloader)
    try:
        return ie.extract(url)
    except ExtractorError:
        return None
 def test_youtube_subtitles(self):
     DL = FakeYDL()
     DL.params["writesubtitles"] = True
     IE = YoutubeIE(DL)
     info_dict = IE.extract("QRS8MkLhQmM")
     sub = info_dict[0]["subtitles"][0]
     self.assertEqual(md5(sub[2]), "4cd9278a35ba2305f47354ee13472260")
 def test_youtube_automatic_captions(self):
     DL = FakeYDL()
     DL.params['writeautomaticsub'] = True
     DL.params['subtitleslangs'] = ['it']
     IE = YoutubeIE(DL)
     info_dict = IE.extract('8YoUxe5ncPo')
     sub = info_dict[0]['subtitles']['it']
     self.assertTrue(sub is not None)
 def test_youtube_subtitles_vtt_format(self):
     DL = FakeYDL()
     DL.params['writesubtitles'] = True
     DL.params['subtitlesformat'] = 'vtt'
     IE = YoutubeIE(DL)
     info_dict = IE.extract('QRS8MkLhQmM')
     sub = info_dict[0]['subtitles']['en']
     self.assertEqual(md5(sub), '356cdc577fde0c6783b9b822e7206ff7')
Example #12
0
 def test_youtube_matching(self):
     self.assertTrue(YoutubeIE.suitable("PLtS2H6bU1M"))
     self.assertFalse(
         YoutubeIE.suitable("https://www.youtube.com/watch?v=AV6J6_AeFEQ&playnext=1&list=PL4023E734DA416012")
     )  # 668
     self.assertMatch("http://youtu.be/BaW_jenozKc", ["youtube"])
     self.assertMatch("http://www.youtube.com/v/BaW_jenozKc", ["youtube"])
     self.assertMatch("https://youtube.googleapis.com/v/BaW_jenozKc", ["youtube"])
 def test_youtube_subtitles_it(self):
     DL = FakeYDL()
     DL.params["writesubtitles"] = True
     DL.params["subtitleslang"] = "it"
     IE = YoutubeIE(DL)
     info_dict = IE.extract("QRS8MkLhQmM")
     sub = info_dict[0]["subtitles"][0]
     self.assertEqual(md5(sub[2]), "164a51f16f260476a05b50fe4c2f161d")
 def test_youtube_subtitles_sbv_format(self):
     DL = FakeYDL()
     DL.params["writesubtitles"] = True
     DL.params["subtitlesformat"] = "sbv"
     IE = YoutubeIE(DL)
     info_dict = IE.extract("QRS8MkLhQmM")
     sub = info_dict[0]["subtitles"][0]
     self.assertEqual(md5(sub[2]), "13aeaa0c245a8bed9a451cb643e3ad8b")
 def test_youtube_subtitles_vtt_format(self):
     DL = FakeYDL()
     DL.params["writesubtitles"] = True
     DL.params["subtitlesformat"] = "vtt"
     IE = YoutubeIE(DL)
     info_dict = IE.extract("QRS8MkLhQmM")
     sub = info_dict[0]["subtitles"][0]
     self.assertEqual(md5(sub[2]), "356cdc577fde0c6783b9b822e7206ff7")
 def test_youtube_subtitles_format(self):
     DL = FakeDownloader()
     DL.params['writesubtitles'] = True
     DL.params['subtitlesformat'] = 'sbv'
     IE = YoutubeIE(DL)
     info_dict = IE.extract('QRS8MkLhQmM')
     sub = info_dict[0]['subtitles'][0]
     self.assertEqual(md5(sub[2]), '13aeaa0c245a8bed9a451cb643e3ad8b')
 def test_youtube_automatic_captions(self):
     DL = FakeYDL()
     DL.params["writeautomaticsub"] = True
     DL.params["subtitleslang"] = "it"
     IE = YoutubeIE(DL)
     info_dict = IE.extract("8YoUxe5ncPo")
     sub = info_dict[0]["subtitles"][0]
     self.assertTrue(sub[2] is not None)
 def test_youtube_subtitles_it(self):
     DL = FakeDownloader()
     DL.params['writesubtitles'] = True
     DL.params['subtitleslang'] = 'it'
     IE = YoutubeIE(DL)
     info_dict = IE.extract('QRS8MkLhQmM')
     sub = info_dict[0]['subtitles'][0]
     self.assertEqual(md5(sub[2]), '164a51f16f260476a05b50fe4c2f161d')
 def test_youtube_automatic_captions(self):
     DL = FakeDownloader()
     DL.params['writesubtitles'] = True
     DL.params['subtitleslang'] = 'it'
     IE = YoutubeIE(DL)
     info_dict = IE.extract('8YoUxe5ncPo')
     sub = info_dict[0]['subtitles'][0]
     self.assertTrue(sub[2] is not None)
 def test_youtube_multiple_langs(self):
     DL = FakeYDL()
     DL.params['writesubtitles'] = True
     langs = ['it', 'fr', 'de']
     DL.params['subtitleslangs'] = langs
     IE = YoutubeIE(DL)
     subtitles = IE.extract('QRS8MkLhQmM')[0]['subtitles']
     for lang in langs:
         self.assertTrue(subtitles.get(lang) is not None, u'Subtitles for \'%s\' not extracted' % lang)
 def test_youtube_course(self):
     dl = FakeYDL()
     ie = YoutubePlaylistIE(dl)
     # TODO find a > 100 (paginating?) videos course
     result = ie.extract('https://www.youtube.com/course?list=ECUl4u3cNGP61MdtwGTqZA0MreSaDybji8')
     entries = list(result['entries'])
     self.assertEqual(YoutubeIE().extract_id(entries[0]['url']), 'j9WZyLZCBzs')
     self.assertEqual(len(entries), 25)
     self.assertEqual(YoutubeIE().extract_id(entries[-1]['url']), 'rYefUsYuEp0')
Example #22
0
 def test_youtube_matching(self):
     self.assertTrue(YoutubeIE.suitable(u'PLtS2H6bU1M'))
     self.assertFalse(
         YoutubeIE.suitable(
             u'https://www.youtube.com/watch?v=AV6J6_AeFEQ&playnext=1&list=PL4023E734DA416012'
         ))  #668
     self.assertMatch('http://youtu.be/BaW_jenozKc', ['youtube'])
     self.assertMatch('http://www.youtube.com/v/BaW_jenozKc', ['youtube'])
     self.assertMatch('https://youtube.googleapis.com/v/BaW_jenozKc',
                      ['youtube'])
    def test_format_selection_audio_exts(self):
        formats = [
            {'format_id': 'mp3-64', 'ext': 'mp3', 'abr': 64, 'url': 'http://_', 'vcodec': 'none'},
            {'format_id': 'ogg-64', 'ext': 'ogg', 'abr': 64, 'url': 'http://_', 'vcodec': 'none'},
            {'format_id': 'aac-64', 'ext': 'aac', 'abr': 64, 'url': 'http://_', 'vcodec': 'none'},
            {'format_id': 'mp3-32', 'ext': 'mp3', 'abr': 32, 'url': 'http://_', 'vcodec': 'none'},
            {'format_id': 'aac-32', 'ext': 'aac', 'abr': 32, 'url': 'http://_', 'vcodec': 'none'},
        ]

        info_dict = _make_result(formats)
        ydl = YDL({'format': 'best'})
        ie = YoutubeIE(ydl)
        ie._sort_formats(info_dict['formats'])
        ydl.process_ie_result(copy.deepcopy(info_dict))
        downloaded = ydl.downloaded_info_dicts[0]
        self.assertEqual(downloaded['format_id'], 'aac-64')

        ydl = YDL({'format': 'mp3'})
        ie = YoutubeIE(ydl)
        ie._sort_formats(info_dict['formats'])
        ydl.process_ie_result(copy.deepcopy(info_dict))
        downloaded = ydl.downloaded_info_dicts[0]
        self.assertEqual(downloaded['format_id'], 'mp3-64')

        ydl = YDL({'prefer_free_formats': True})
        ie = YoutubeIE(ydl)
        ie._sort_formats(info_dict['formats'])
        ydl.process_ie_result(copy.deepcopy(info_dict))
        downloaded = ydl.downloaded_info_dicts[0]
        self.assertEqual(downloaded['format_id'], 'ogg-64')
    def test_func(self):
        basename = 'player-%s.js' % test_id
        fn = os.path.join(self.TESTDATA_DIR, basename)

        if not os.path.exists(fn):
            compat_urlretrieve(url, fn)

        ydl = FakeYDL()
        ie = YoutubeIE(ydl)
        with io.open(fn, encoding='utf-8') as testf:
            jscode = testf.read()
        func = ie._parse_sig_js(jscode)
        src_sig = (compat_str(string.printable[:sig_input]) if isinstance(
            sig_input, int) else sig_input)
        got_sig = func(src_sig)
        self.assertEqual(got_sig, expected_sig)
 def test_youtube_extract_player_info(self):
     PLAYER_URLS = (
         ('https://www.youtube.com/s/player/64dddad9/player_ias.vflset/en_US/base.js',
          '64dddad9'),
         ('https://www.youtube.com/s/player/64dddad9/player_ias.vflset/fr_FR/base.js',
          '64dddad9'),
         ('https://www.youtube.com/s/player/64dddad9/player-plasma-ias-phone-en_US.vflset/base.js',
          '64dddad9'),
         ('https://www.youtube.com/s/player/64dddad9/player-plasma-ias-phone-de_DE.vflset/base.js',
          '64dddad9'),
         ('https://www.youtube.com/s/player/64dddad9/player-plasma-ias-tablet-en_US.vflset/base.js',
          '64dddad9'),
         # obsolete
         ('https://www.youtube.com/yts/jsbin/player_ias-vfle4-e03/en_US/base.js',
          'vfle4-e03'),
         ('https://www.youtube.com/yts/jsbin/player_ias-vfl49f_g4/en_US/base.js',
          'vfl49f_g4'),
         ('https://www.youtube.com/yts/jsbin/player_ias-vflCPQUIL/en_US/base.js',
          'vflCPQUIL'),
         ('https://www.youtube.com/yts/jsbin/player-vflzQZbt7/en_US/base.js',
          'vflzQZbt7'),
         ('https://www.youtube.com/yts/jsbin/player-en_US-vflaxXRn1/base.js',
          'vflaxXRn1'),
         ('https://s.ytimg.com/yts/jsbin/html5player-en_US-vflXGBaUN.js',
          'vflXGBaUN'),
         ('https://s.ytimg.com/yts/jsbin/html5player-en_US-vflKjOTVq/html5player.js',
          'vflKjOTVq'),
     )
     for player_url, expected_player_id in PLAYER_URLS:
         player_id = YoutubeIE._extract_player_info(player_url)
         self.assertEqual(player_id, expected_player_id)
 def test_youtube_playlist_noplaylist(self):
     dl = FakeYDL()
     dl.params['noplaylist'] = True
     ie = YoutubePlaylistIE(dl)
     result = ie.extract('https://www.youtube.com/watch?v=FXxLjLQi3Fg&list=PLwiyx1dc3P2JR9N8gQaQN_BCvlSlap7re')
     self.assertEqual(result['_type'], 'url')
     self.assertEqual(YoutubeIE().extract_id(result['url']), 'FXxLjLQi3Fg')
Example #27
0
 def get_subtitle_languages(self):
     with youtube_dl.YoutubeDL({"listsubtitles": True}) as ydl:
         try:
             return list(
                 YoutubeIE(ydl).extract(
                     self.translated_youtube_id)["subtitles"].keys())
         except youtube_dl.utils.ExtractorError:
             return []
 def test_youtube_extract(self):
     assertExtractId = lambda url, id: self.assertEqual(YoutubeIE.extract_id(url), id)
     assertExtractId('http://www.youtube.com/watch?&v=BaW_jenozKc', 'BaW_jenozKc')
     assertExtractId('https://www.youtube.com/watch?&v=BaW_jenozKc', 'BaW_jenozKc')
     assertExtractId('https://www.youtube.com/watch?feature=player_embedded&v=BaW_jenozKc', 'BaW_jenozKc')
     assertExtractId('https://www.youtube.com/watch_popup?v=BaW_jenozKc', 'BaW_jenozKc')
     assertExtractId('http://www.youtube.com/watch?v=BaW_jenozKcsharePLED17F32AD9753930', 'BaW_jenozKc')
     assertExtractId('BaW_jenozKc', 'BaW_jenozKc')
Example #29
0
 def test_youtube_extract(self):
     assertExtractId = lambda url, id: self.assertEqual(YoutubeIE.extract_id(url), id)
     assertExtractId('http://www.youtube.com/watch?&v=BaW_jenozKc', 'BaW_jenozKc')
     assertExtractId('https://www.youtube.com/watch?&v=BaW_jenozKc', 'BaW_jenozKc')
     assertExtractId('https://www.youtube.com/watch?feature=player_embedded&v=BaW_jenozKc', 'BaW_jenozKc')
     assertExtractId('https://www.youtube.com/watch_popup?v=BaW_jenozKc', 'BaW_jenozKc')
     assertExtractId('http://www.youtube.com/watch?v=BaW_jenozKcsharePLED17F32AD9753930', 'BaW_jenozKc')
     assertExtractId('BaW_jenozKc', 'BaW_jenozKc')
 def test_youtube_playlist(self):
     dl = FakeYDL()
     ie = YoutubePlaylistIE(dl)
     result = ie.extract('https://www.youtube.com/playlist?list=PLwiyx1dc3P2JR9N8gQaQN_BCvlSlap7re')[0]
     self.assertIsPlaylist(result)
     self.assertEqual(result['title'], 'ytdl test PL')
     ytie_results = [YoutubeIE()._extract_id(url['url']) for url in result['entries']]
     self.assertEqual(ytie_results, [ 'bV9L5Ht9LgY', 'FXxLjLQi3Fg', 'tU3Bgo5qJZE'])
 def test_youtube_playlist_with_deleted(self):
     #651
     dl = FakeYDL()
     ie = YoutubePlaylistIE(dl)
     result = ie.extract('https://www.youtube.com/playlist?list=PLwP_SiAcdui0KVebT0mU9Apz359a4ubsC')[0]
     ytie_results = [YoutubeIE()._extract_id(url['url']) for url in result['entries']]
     self.assertFalse('pElCt5oNDuI' in ytie_results)
     self.assertFalse('KdPEApIVdWM' in ytie_results)
Example #32
0
 def test_youtube_playlist_noplaylist(self):
     dl = FakeYDL()
     dl.params['noplaylist'] = True
     dl.params['format'] = 'best'
     ie = YoutubePlaylistIE(dl)
     result = ie.extract('https://www.youtube.com/watch?v=FXxLjLQi3Fg&list=PLwiyx1dc3P2JR9N8gQaQN_BCvlSlap7re')
     self.assertEqual(result['_type'], 'url')
     result = dl.extract_info(result['url'], download=False, ie_key=result.get('ie_key'), process=False)
     self.assertEqual(YoutubeIE().extract_id(result['url']), 'FXxLjLQi3Fg')
    def test_func(self):
        fn = os.path.join(self.TESTDATA_DIR, basename)

        if not os.path.exists(fn):
            compat_urlretrieve(url, fn)

        ie = YoutubeIE()
        if stype == 'js':
            with io.open(fn, encoding='utf-8') as testf:
                jscode = testf.read()
            func = ie._parse_sig_js(jscode)
        else:
            assert stype == 'swf'
            with open(fn, 'rb') as testf:
                swfcode = testf.read()
            func = ie._parse_sig_swf(swfcode)
        src_sig = compat_str(string.printable[:sig_length])
        got_sig = func(src_sig)
        self.assertEqual(got_sig, expected_sig)
    def test_func(self):
        fn = os.path.join(self.TESTDATA_DIR, basename)

        if not os.path.exists(fn):
            compat_urlretrieve(url, fn)

        ie = YoutubeIE()
        if stype == 'js':
            with io.open(fn, encoding='utf-8') as testf:
                jscode = testf.read()
            func = ie._parse_sig_js(jscode)
        else:
            assert stype == 'swf'
            with open(fn, 'rb') as testf:
                swfcode = testf.read()
            func = ie._parse_sig_swf(swfcode)
        src_sig = compat_str(string.printable[:sig_length])
        got_sig = func(src_sig)
        self.assertEqual(got_sig, expected_sig)
Example #35
0
    def test_func(self):
        fn = os.path.join(self.TESTDATA_DIR, basename)

        if not os.path.exists(fn):
            compat_urlretrieve(url, fn)

        ie = YoutubeIE()
        if stype == "js":
            with io.open(fn, encoding="utf-8") as testf:
                jscode = testf.read()
            func = ie._parse_sig_js(jscode)
        else:
            assert stype == "swf"
            with open(fn, "rb") as testf:
                swfcode = testf.read()
            func = ie._parse_sig_swf(swfcode)
        src_sig = compat_str(string.printable[:sig_input]) if isinstance(sig_input, int) else sig_input
        got_sig = func(src_sig)
        self.assertEqual(got_sig, expected_sig)
Example #36
0
    def test_func(self):
        basename = 'player-%s.%s' % (test_id, stype)
        fn = os.path.join(self.TESTDATA_DIR, basename)

        if not os.path.exists(fn):
            compat_urlretrieve(url, fn)

        ie = YoutubeIE()
        if stype == 'js':
            with io.open(fn, encoding='utf-8') as testf:
                jscode = testf.read()
            func = ie._parse_sig_js(jscode)
        else:
            assert stype == 'swf'
            with open(fn, 'rb') as testf:
                swfcode = testf.read()
            func = ie._parse_sig_swf(swfcode)
        src_sig = (compat_str(string.printable[:sig_input]) if isinstance(
            sig_input, int) else sig_input)
        got_sig = func(src_sig)
        self.assertEqual(got_sig, expected_sig)
Example #37
0
    def test_youtube_format_selection(self):
        order = [
            '38', '37', '46', '22', '45', '35', '44', '18', '34', '43', '6', '5', '36', '17', '13',
            # Apple HTTP Live Streaming
            '96', '95', '94', '93', '92', '132', '151',
            # 3D
            '85', '84', '102', '83', '101', '82', '100',
            # Dash video
            '138', '137', '248', '136', '247', '135', '246',
            '245', '244', '134', '243', '133', '242', '160',
            # Dash audio
            '141', '172', '140', '139', '171',
        ]

        for f1id, f2id in zip(order, order[1:]):
            f1 = YoutubeIE._formats[f1id].copy()
            f1['format_id'] = f1id
            f2 = YoutubeIE._formats[f2id].copy()
            f2['format_id'] = f2id

            info_dict = {'formats': [f1, f2], 'extractor': 'youtube'}
            ydl = YDL()
            yie = YoutubeIE(ydl)
            yie._sort_formats(info_dict['formats'])
            ydl.process_ie_result(info_dict)
            downloaded = ydl.downloaded_info_dicts[0]
            self.assertEqual(downloaded['format_id'], f1id)

            info_dict = {'formats': [f2, f1], 'extractor': 'youtube'}
            ydl = YDL()
            yie = YoutubeIE(ydl)
            yie._sort_formats(info_dict['formats'])
            ydl.process_ie_result(info_dict)
            downloaded = ydl.downloaded_info_dicts[0]
            self.assertEqual(downloaded['format_id'], f1id)
    def test_func(self):
        basename = 'player-%s.%s' % (test_id, stype)
        fn = os.path.join(self.TESTDATA_DIR, basename)

        if not os.path.exists(fn):
            compat_urlretrieve(url, fn)

        ie = YoutubeIE()
        if stype == 'js':
            with io.open(fn, encoding='utf-8') as testf:
                jscode = testf.read()
            func = ie._parse_sig_js(jscode)
        else:
            assert stype == 'swf'
            with open(fn, 'rb') as testf:
                swfcode = testf.read()
            func = ie._parse_sig_swf(swfcode)
        src_sig = (
            compat_str(string.printable[:sig_input])
            if isinstance(sig_input, int) else sig_input)
        got_sig = func(src_sig)
        self.assertEqual(got_sig, expected_sig)
Example #39
0
 def __init__(self, config):
     self._br = mechanize.Browser()
     self._cj = mechanize.LWPCookieJar()
     csrftoken = makeCsrf()
     self._cj.set_cookie(csrfCookie(csrftoken))
     self._br.set_handle_robots(False)
     self._br.set_cookiejar(self._cj)
     self._br.addheaders.append(('X-CSRFToken', csrftoken))
     self._br.addheaders.append(('Referer', base_url))
     self._logged_in = False
     self._fd = YoutubeDL(config.YDL_PARAMS)
     self._fd.add_info_extractor(YoutubeIE())
     self._config = config
Example #40
0
    def test_youtube_format_selection(self):
        order = [
            '38', '37', '46', '22', '45', '35', '44', '18', '34', '43', '6', '5', '36', '17', '13',
            # Apple HTTP Live Streaming
            '96', '95', '94', '93', '92', '132', '151',
            # 3D
            '85', '84', '102', '83', '101', '82', '100',
            # Dash video
            '138', '137', '248', '136', '247', '135', '246',
            '245', '244', '134', '243', '133', '242', '160',
            # Dash audio
            '141', '172', '140', '139', '171',
        ]

        for f1id, f2id in zip(order, order[1:]):
            f1 = YoutubeIE._formats[f1id].copy()
            f1['format_id'] = f1id
            f1['url'] = 'url:' + f1id
            f2 = YoutubeIE._formats[f2id].copy()
            f2['format_id'] = f2id
            f2['url'] = 'url:' + f2id

            info_dict = _make_result([f1, f2], extractor='youtube')
            ydl = YDL()
            yie = YoutubeIE(ydl)
            yie._sort_formats(info_dict['formats'])
            ydl.process_ie_result(info_dict)
            downloaded = ydl.downloaded_info_dicts[0]
            self.assertEqual(downloaded['format_id'], f1id)

            info_dict = _make_result([f2, f1], extractor='youtube')
            ydl = YDL()
            yie = YoutubeIE(ydl)
            yie._sort_formats(info_dict['formats'])
            ydl.process_ie_result(info_dict)
            downloaded = ydl.downloaded_info_dicts[0]
            self.assertEqual(downloaded['format_id'], f1id)
Example #41
0
    def test_prefer_free_formats(self):
        # Same resolution => download webm
        ydl = YDL()
        ydl.params['prefer_free_formats'] = True
        formats = [
            {
                'ext': 'webm',
                'height': 460,
                'url': TEST_URL
            },
            {
                'ext': 'mp4',
                'height': 460,
                'url': TEST_URL
            },
        ]
        info_dict = _make_result(formats)
        yie = YoutubeIE(ydl)
        yie._sort_formats(info_dict['formats'])
        ydl.process_ie_result(info_dict)
        downloaded = ydl.downloaded_info_dicts[0]
        self.assertEqual(downloaded['ext'], 'webm')

        # Different resolution => download best quality (mp4)
        ydl = YDL()
        ydl.params['prefer_free_formats'] = True
        formats = [
            {
                'ext': 'webm',
                'height': 720,
                'url': TEST_URL
            },
            {
                'ext': 'mp4',
                'height': 1080,
                'url': TEST_URL
            },
        ]
        info_dict['formats'] = formats
        yie = YoutubeIE(ydl)
        yie._sort_formats(info_dict['formats'])
        ydl.process_ie_result(info_dict)
        downloaded = ydl.downloaded_info_dicts[0]
        self.assertEqual(downloaded['ext'], 'mp4')

        # No prefer_free_formats => prefer mp4 and flv for greater compatibility
        ydl = YDL()
        ydl.params['prefer_free_formats'] = False
        formats = [
            {
                'ext': 'webm',
                'height': 720,
                'url': TEST_URL
            },
            {
                'ext': 'mp4',
                'height': 720,
                'url': TEST_URL
            },
            {
                'ext': 'flv',
                'height': 720,
                'url': TEST_URL
            },
        ]
        info_dict['formats'] = formats
        yie = YoutubeIE(ydl)
        yie._sort_formats(info_dict['formats'])
        ydl.process_ie_result(info_dict)
        downloaded = ydl.downloaded_info_dicts[0]
        self.assertEqual(downloaded['ext'], 'mp4')

        ydl = YDL()
        ydl.params['prefer_free_formats'] = False
        formats = [
            {
                'ext': 'flv',
                'height': 720,
                'url': TEST_URL
            },
            {
                'ext': 'webm',
                'height': 720,
                'url': TEST_URL
            },
        ]
        info_dict['formats'] = formats
        yie = YoutubeIE(ydl)
        yie._sort_formats(info_dict['formats'])
        ydl.process_ie_result(info_dict)
        downloaded = ydl.downloaded_info_dicts[0]
        self.assertEqual(downloaded['ext'], 'flv')
Example #42
0
    def test_youtube_format_selection(self):
        order = [
            '38',
            '37',
            '46',
            '22',
            '45',
            '35',
            '44',
            '18',
            '34',
            '43',
            '6',
            '5',
            '17',
            '36',
            '13',
            # Apple HTTP Live Streaming
            '96',
            '95',
            '94',
            '93',
            '92',
            '132',
            '151',
            # 3D
            '85',
            '84',
            '102',
            '83',
            '101',
            '82',
            '100',
            # Dash video
            '137',
            '248',
            '136',
            '247',
            '135',
            '246',
            '245',
            '244',
            '134',
            '243',
            '133',
            '242',
            '160',
            # Dash audio
            '141',
            '172',
            '140',
            '171',
            '139',
        ]

        def format_info(f_id):
            info = YoutubeIE._formats[f_id].copy()

            # XXX: In real cases InfoExtractor._parse_mpd_formats() fills up 'acodec'
            # and 'vcodec', while in tests such information is incomplete since
            # commit a6c2c24479e5f4827ceb06f64d855329c0a6f593
            # test_YoutubeDL.test_youtube_format_selection is broken without
            # this fix
            if 'acodec' in info and 'vcodec' not in info:
                info['vcodec'] = 'none'
            elif 'vcodec' in info and 'acodec' not in info:
                info['acodec'] = 'none'

            info['format_id'] = f_id
            info['url'] = 'url:' + f_id
            return info

        formats_order = [format_info(f_id) for f_id in order]

        info_dict = _make_result(list(formats_order), extractor='youtube')
        ydl = YDL({'format': 'bestvideo+bestaudio'})
        yie = YoutubeIE(ydl)
        yie._sort_formats(info_dict['formats'])
        ydl.process_ie_result(info_dict)
        downloaded = ydl.downloaded_info_dicts[0]
        self.assertEqual(downloaded['format_id'], '137+141')
        self.assertEqual(downloaded['ext'], 'mp4')

        info_dict = _make_result(list(formats_order), extractor='youtube')
        ydl = YDL({'format': 'bestvideo[height>=999999]+bestaudio/best'})
        yie = YoutubeIE(ydl)
        yie._sort_formats(info_dict['formats'])
        ydl.process_ie_result(info_dict)
        downloaded = ydl.downloaded_info_dicts[0]
        self.assertEqual(downloaded['format_id'], '38')

        info_dict = _make_result(list(formats_order), extractor='youtube')
        ydl = YDL({'format': 'bestvideo/best,bestaudio'})
        yie = YoutubeIE(ydl)
        yie._sort_formats(info_dict['formats'])
        ydl.process_ie_result(info_dict)
        downloaded_ids = [
            info['format_id'] for info in ydl.downloaded_info_dicts
        ]
        self.assertEqual(downloaded_ids, ['137', '141'])

        info_dict = _make_result(list(formats_order), extractor='youtube')
        ydl = YDL(
            {'format': '(bestvideo[ext=mp4],bestvideo[ext=webm])+bestaudio'})
        yie = YoutubeIE(ydl)
        yie._sort_formats(info_dict['formats'])
        ydl.process_ie_result(info_dict)
        downloaded_ids = [
            info['format_id'] for info in ydl.downloaded_info_dicts
        ]
        self.assertEqual(downloaded_ids, ['137+141', '248+141'])

        info_dict = _make_result(list(formats_order), extractor='youtube')
        ydl = YDL({
            'format':
            '(bestvideo[ext=mp4],bestvideo[ext=webm])[height<=720]+bestaudio'
        })
        yie = YoutubeIE(ydl)
        yie._sort_formats(info_dict['formats'])
        ydl.process_ie_result(info_dict)
        downloaded_ids = [
            info['format_id'] for info in ydl.downloaded_info_dicts
        ]
        self.assertEqual(downloaded_ids, ['136+141', '247+141'])

        info_dict = _make_result(list(formats_order), extractor='youtube')
        ydl = YDL(
            {'format': '(bestvideo[ext=none]/bestvideo[ext=webm])+bestaudio'})
        yie = YoutubeIE(ydl)
        yie._sort_formats(info_dict['formats'])
        ydl.process_ie_result(info_dict)
        downloaded_ids = [
            info['format_id'] for info in ydl.downloaded_info_dicts
        ]
        self.assertEqual(downloaded_ids, ['248+141'])

        for f1, f2 in zip(formats_order, formats_order[1:]):
            info_dict = _make_result([f1, f2], extractor='youtube')
            ydl = YDL({'format': 'best/bestvideo'})
            yie = YoutubeIE(ydl)
            yie._sort_formats(info_dict['formats'])
            ydl.process_ie_result(info_dict)
            downloaded = ydl.downloaded_info_dicts[0]
            self.assertEqual(downloaded['format_id'], f1['format_id'])

            info_dict = _make_result([f2, f1], extractor='youtube')
            ydl = YDL({'format': 'best/bestvideo'})
            yie = YoutubeIE(ydl)
            yie._sort_formats(info_dict['formats'])
            ydl.process_ie_result(info_dict)
            downloaded = ydl.downloaded_info_dicts[0]
            self.assertEqual(downloaded['format_id'], f1['format_id'])
Example #43
0
    def test_format_selection_audio_exts(self):
        formats = [
            {
                'format_id': 'mp3-64',
                'ext': 'mp3',
                'abr': 64,
                'url': 'http://_',
                'vcodec': 'none'
            },
            {
                'format_id': 'ogg-64',
                'ext': 'ogg',
                'abr': 64,
                'url': 'http://_',
                'vcodec': 'none'
            },
            {
                'format_id': 'aac-64',
                'ext': 'aac',
                'abr': 64,
                'url': 'http://_',
                'vcodec': 'none'
            },
            {
                'format_id': 'mp3-32',
                'ext': 'mp3',
                'abr': 32,
                'url': 'http://_',
                'vcodec': 'none'
            },
            {
                'format_id': 'aac-32',
                'ext': 'aac',
                'abr': 32,
                'url': 'http://_',
                'vcodec': 'none'
            },
        ]

        info_dict = _make_result(formats)
        ydl = YDL({'format': 'best'})
        ie = YoutubeIE(ydl)
        ie._sort_formats(info_dict['formats'])
        ydl.process_ie_result(copy.deepcopy(info_dict))
        downloaded = ydl.downloaded_info_dicts[0]
        self.assertEqual(downloaded['format_id'], 'aac-64')

        ydl = YDL({'format': 'mp3'})
        ie = YoutubeIE(ydl)
        ie._sort_formats(info_dict['formats'])
        ydl.process_ie_result(copy.deepcopy(info_dict))
        downloaded = ydl.downloaded_info_dicts[0]
        self.assertEqual(downloaded['format_id'], 'mp3-64')

        ydl = YDL({'prefer_free_formats': True})
        ie = YoutubeIE(ydl)
        ie._sort_formats(info_dict['formats'])
        ydl.process_ie_result(copy.deepcopy(info_dict))
        downloaded = ydl.downloaded_info_dicts[0]
        self.assertEqual(downloaded['format_id'], 'ogg-64')
 def getInfoDict(self):
     IE = YoutubeIE(self.DL)
     info_dict = IE.extract(self.url)
     return info_dict
Example #45
0
def n_sig(jscode, sig_input):
    funcname = YoutubeIE(FakeYDL())._extract_n_function_name(jscode)
    return JSInterpreter(jscode).call_function(funcname, sig_input)
    def test_youtube_format_selection(self):
        order = [
            '38', '37', '46', '22', '45', '35', '44', '18', '34', '43', '6', '5', '36', '17', '13',
            # Apple HTTP Live Streaming
            '96', '95', '94', '93', '92', '132', '151',
            # 3D
            '85', '84', '102', '83', '101', '82', '100',
            # Dash video
            '137', '248', '136', '247', '135', '246',
            '245', '244', '134', '243', '133', '242', '160',
            # Dash audio
            '141', '172', '140', '171', '139',
        ]

        def format_info(f_id):
            info = YoutubeIE._formats[f_id].copy()
            info['format_id'] = f_id
            info['url'] = 'url:' + f_id
            return info
        formats_order = [format_info(f_id) for f_id in order]

        info_dict = _make_result(list(formats_order), extractor='youtube')
        ydl = YDL({'format': 'bestvideo+bestaudio'})
        yie = YoutubeIE(ydl)
        yie._sort_formats(info_dict['formats'])
        ydl.process_ie_result(info_dict)
        downloaded = ydl.downloaded_info_dicts[0]
        self.assertEqual(downloaded['format_id'], '137+141')
        self.assertEqual(downloaded['ext'], 'mp4')

        info_dict = _make_result(list(formats_order), extractor='youtube')
        ydl = YDL({'format': 'bestvideo[height>=999999]+bestaudio/best'})
        yie = YoutubeIE(ydl)
        yie._sort_formats(info_dict['formats'])
        ydl.process_ie_result(info_dict)
        downloaded = ydl.downloaded_info_dicts[0]
        self.assertEqual(downloaded['format_id'], '38')

        info_dict = _make_result(list(formats_order), extractor='youtube')
        ydl = YDL({'format': 'bestvideo/best,bestaudio'})
        yie = YoutubeIE(ydl)
        yie._sort_formats(info_dict['formats'])
        ydl.process_ie_result(info_dict)
        downloaded_ids = [info['format_id'] for info in ydl.downloaded_info_dicts]
        self.assertEqual(downloaded_ids, ['137', '141'])

        info_dict = _make_result(list(formats_order), extractor='youtube')
        ydl = YDL({'format': '(bestvideo[ext=mp4],bestvideo[ext=webm])+bestaudio'})
        yie = YoutubeIE(ydl)
        yie._sort_formats(info_dict['formats'])
        ydl.process_ie_result(info_dict)
        downloaded_ids = [info['format_id'] for info in ydl.downloaded_info_dicts]
        self.assertEqual(downloaded_ids, ['137+141', '248+141'])

        info_dict = _make_result(list(formats_order), extractor='youtube')
        ydl = YDL({'format': '(bestvideo[ext=mp4],bestvideo[ext=webm])[height<=720]+bestaudio'})
        yie = YoutubeIE(ydl)
        yie._sort_formats(info_dict['formats'])
        ydl.process_ie_result(info_dict)
        downloaded_ids = [info['format_id'] for info in ydl.downloaded_info_dicts]
        self.assertEqual(downloaded_ids, ['136+141', '247+141'])

        info_dict = _make_result(list(formats_order), extractor='youtube')
        ydl = YDL({'format': '(bestvideo[ext=none]/bestvideo[ext=webm])+bestaudio'})
        yie = YoutubeIE(ydl)
        yie._sort_formats(info_dict['formats'])
        ydl.process_ie_result(info_dict)
        downloaded_ids = [info['format_id'] for info in ydl.downloaded_info_dicts]
        self.assertEqual(downloaded_ids, ['248+141'])

        for f1, f2 in zip(formats_order, formats_order[1:]):
            info_dict = _make_result([f1, f2], extractor='youtube')
            ydl = YDL({'format': 'best/bestvideo'})
            yie = YoutubeIE(ydl)
            yie._sort_formats(info_dict['formats'])
            ydl.process_ie_result(info_dict)
            downloaded = ydl.downloaded_info_dicts[0]
            self.assertEqual(downloaded['format_id'], f1['format_id'])

            info_dict = _make_result([f2, f1], extractor='youtube')
            ydl = YDL({'format': 'best/bestvideo'})
            yie = YoutubeIE(ydl)
            yie._sort_formats(info_dict['formats'])
            ydl.process_ie_result(info_dict)
            downloaded = ydl.downloaded_info_dicts[0]
            self.assertEqual(downloaded['format_id'], f1['format_id'])
    def test_prefer_free_formats(self):
        # Same resolution => download webm
        ydl = YDL()
        ydl.params['prefer_free_formats'] = True
        formats = [
            {'ext': 'webm', 'height': 460, 'url': TEST_URL},
            {'ext': 'mp4', 'height': 460, 'url': TEST_URL},
        ]
        info_dict = _make_result(formats)
        yie = YoutubeIE(ydl)
        yie._sort_formats(info_dict['formats'])
        ydl.process_ie_result(info_dict)
        downloaded = ydl.downloaded_info_dicts[0]
        self.assertEqual(downloaded['ext'], 'webm')

        # Different resolution => download best quality (mp4)
        ydl = YDL()
        ydl.params['prefer_free_formats'] = True
        formats = [
            {'ext': 'webm', 'height': 720, 'url': TEST_URL},
            {'ext': 'mp4', 'height': 1080, 'url': TEST_URL},
        ]
        info_dict['formats'] = formats
        yie = YoutubeIE(ydl)
        yie._sort_formats(info_dict['formats'])
        ydl.process_ie_result(info_dict)
        downloaded = ydl.downloaded_info_dicts[0]
        self.assertEqual(downloaded['ext'], 'mp4')

        # No prefer_free_formats => prefer mp4 and flv for greater compatibility
        ydl = YDL()
        ydl.params['prefer_free_formats'] = False
        formats = [
            {'ext': 'webm', 'height': 720, 'url': TEST_URL},
            {'ext': 'mp4', 'height': 720, 'url': TEST_URL},
            {'ext': 'flv', 'height': 720, 'url': TEST_URL},
        ]
        info_dict['formats'] = formats
        yie = YoutubeIE(ydl)
        yie._sort_formats(info_dict['formats'])
        ydl.process_ie_result(info_dict)
        downloaded = ydl.downloaded_info_dicts[0]
        self.assertEqual(downloaded['ext'], 'mp4')

        ydl = YDL()
        ydl.params['prefer_free_formats'] = False
        formats = [
            {'ext': 'flv', 'height': 720, 'url': TEST_URL},
            {'ext': 'webm', 'height': 720, 'url': TEST_URL},
        ]
        info_dict['formats'] = formats
        yie = YoutubeIE(ydl)
        yie._sort_formats(info_dict['formats'])
        ydl.process_ie_result(info_dict)
        downloaded = ydl.downloaded_info_dicts[0]
        self.assertEqual(downloaded['ext'], 'flv')
    def test_youtube_format_selection(self):
        order = [
            '38', '37', '46', '22', '45', '35', '44', '18', '34', '43', '6', '5', '17', '36', '13',
            # Apple HTTP Live Streaming
            '96', '95', '94', '93', '92', '132', '151',
            # 3D
            '85', '84', '102', '83', '101', '82', '100',
            # Dash video
            '137', '248', '136', '247', '135', '246',
            '245', '244', '134', '243', '133', '242', '160',
            # Dash audio
            '141', '172', '140', '171', '139',
        ]

        def format_info(f_id):
            info = YoutubeIE._formats[f_id].copy()

            # XXX: In real cases InfoExtractor._parse_mpd_formats() fills up 'acodec'
            # and 'vcodec', while in tests such information is incomplete since
            # commit a6c2c24479e5f4827ceb06f64d855329c0a6f593
            # test_YoutubeDL.test_youtube_format_selection is broken without
            # this fix
            if 'acodec' in info and 'vcodec' not in info:
                info['vcodec'] = 'none'
            elif 'vcodec' in info and 'acodec' not in info:
                info['acodec'] = 'none'

            info['format_id'] = f_id
            info['url'] = 'url:' + f_id
            return info
        formats_order = [format_info(f_id) for f_id in order]

        info_dict = _make_result(list(formats_order), extractor='youtube')
        ydl = YDL({'format': 'bestvideo+bestaudio'})
        yie = YoutubeIE(ydl)
        yie._sort_formats(info_dict['formats'])
        ydl.process_ie_result(info_dict)
        downloaded = ydl.downloaded_info_dicts[0]
        self.assertEqual(downloaded['format_id'], '137+141')
        self.assertEqual(downloaded['ext'], 'mp4')

        info_dict = _make_result(list(formats_order), extractor='youtube')
        ydl = YDL({'format': 'bestvideo[height>=999999]+bestaudio/best'})
        yie = YoutubeIE(ydl)
        yie._sort_formats(info_dict['formats'])
        ydl.process_ie_result(info_dict)
        downloaded = ydl.downloaded_info_dicts[0]
        self.assertEqual(downloaded['format_id'], '38')

        info_dict = _make_result(list(formats_order), extractor='youtube')
        ydl = YDL({'format': 'bestvideo/best,bestaudio'})
        yie = YoutubeIE(ydl)
        yie._sort_formats(info_dict['formats'])
        ydl.process_ie_result(info_dict)
        downloaded_ids = [info['format_id'] for info in ydl.downloaded_info_dicts]
        self.assertEqual(downloaded_ids, ['137', '141'])

        info_dict = _make_result(list(formats_order), extractor='youtube')
        ydl = YDL({'format': '(bestvideo[ext=mp4],bestvideo[ext=webm])+bestaudio'})
        yie = YoutubeIE(ydl)
        yie._sort_formats(info_dict['formats'])
        ydl.process_ie_result(info_dict)
        downloaded_ids = [info['format_id'] for info in ydl.downloaded_info_dicts]
        self.assertEqual(downloaded_ids, ['137+141', '248+141'])

        info_dict = _make_result(list(formats_order), extractor='youtube')
        ydl = YDL({'format': '(bestvideo[ext=mp4],bestvideo[ext=webm])[height<=720]+bestaudio'})
        yie = YoutubeIE(ydl)
        yie._sort_formats(info_dict['formats'])
        ydl.process_ie_result(info_dict)
        downloaded_ids = [info['format_id'] for info in ydl.downloaded_info_dicts]
        self.assertEqual(downloaded_ids, ['136+141', '247+141'])

        info_dict = _make_result(list(formats_order), extractor='youtube')
        ydl = YDL({'format': '(bestvideo[ext=none]/bestvideo[ext=webm])+bestaudio'})
        yie = YoutubeIE(ydl)
        yie._sort_formats(info_dict['formats'])
        ydl.process_ie_result(info_dict)
        downloaded_ids = [info['format_id'] for info in ydl.downloaded_info_dicts]
        self.assertEqual(downloaded_ids, ['248+141'])

        for f1, f2 in zip(formats_order, formats_order[1:]):
            info_dict = _make_result([f1, f2], extractor='youtube')
            ydl = YDL({'format': 'best/bestvideo'})
            yie = YoutubeIE(ydl)
            yie._sort_formats(info_dict['formats'])
            ydl.process_ie_result(info_dict)
            downloaded = ydl.downloaded_info_dicts[0]
            self.assertEqual(downloaded['format_id'], f1['format_id'])

            info_dict = _make_result([f2, f1], extractor='youtube')
            ydl = YDL({'format': 'best/bestvideo'})
            yie = YoutubeIE(ydl)
            yie._sort_formats(info_dict['formats'])
            ydl.process_ie_result(info_dict)
            downloaded = ydl.downloaded_info_dicts[0]
            self.assertEqual(downloaded['format_id'], f1['format_id'])
Example #49
0
def _init_ycl(request):
    global ydl, ie, y
    if y == None:
        ydl = YoutubeDL()
        ie  = YoutubeIE(ydl)
        y = Youtube(request.scheme + "://" + request.get_host() + "/oauth2callback")
 def getInfoDict(self):
     IE = YoutubeIE(self.DL)
     info_dict = IE.extract(self.url)
     return info_dict
Example #51
0
 def test_ie_key(self):
     self.assertEqual(get_info_extractor(YoutubeIE.ie_key()), YoutubeIE)
Example #52
0
 def test_youtube_chapters(self):
     for description, duration, expected_chapters in self._TEST_CASES:
         ie = YoutubeIE()
         expect_value(self, ie._extract_chapters(description, duration),
                      expected_chapters, None)
def signature(jscode, sig_input):
    func = YoutubeIE(FakeYDL())._parse_sig_js(jscode)
    src_sig = (compat_str(string.printable[:sig_input]) if isinstance(
        sig_input, int) else sig_input)
    return func(src_sig)
Example #54
0
 def test_ie_key(self):
     self.assertEqual(get_info_extractor(YoutubeIE.ie_key()), YoutubeIE)
Example #55
0
def extract_base_identifier(url: str) -> str:
    netloc = urllib.parse.urlparse(url)["netloc"]
    if netloc == "www.youtube.com":
        return YoutubeIE.extract_id(url)
    else:
        return _unique_file_url(url, handlers)