From 9a117f94b4bfe84cfe1d904d5132aefcf41511c9 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Rog=C3=A9rio=20Brito?= Date: Thu, 4 Jul 2013 08:48:28 -0300 Subject: [PATCH] Imported Upstream version 2013.07.02 --- README.md | 23 +- README.txt | 27 +- devscripts/youtube_genalgo.py | 7 + setup.py | 43 +- test/helper.py | 13 +- test/test_all_urls.py | 14 +- test/test_download.py | 27 +- test/test_youtube_lists.py | 8 +- test/tests.json | 718 ------------------------ youtube-dl | Bin 118827 -> 140233 bytes youtube-dl.1 | 36 +- youtube-dl.bash-completion | 2 +- youtube_dl/YoutubeDL.py | 9 +- youtube_dl/__init__.py | 56 +- youtube_dl/extractor/__init__.py | 90 +-- youtube_dl/extractor/ard.py | 9 + youtube_dl/extractor/arte.py | 63 ++- youtube_dl/extractor/auengine.py | 38 ++ youtube_dl/extractor/bandcamp.py | 9 + youtube_dl/extractor/bliptv.py | 11 + youtube_dl/extractor/breakcom.py | 8 + youtube_dl/extractor/comedycentral.py | 14 +- youtube_dl/extractor/common.py | 5 + youtube_dl/extractor/cspan.py | 9 + youtube_dl/extractor/dailymotion.py | 9 + youtube_dl/extractor/eighttracks.py | 71 +++ youtube_dl/extractor/escapist.py | 10 + youtube_dl/extractor/facebook.py | 9 + youtube_dl/extractor/flickr.py | 10 + youtube_dl/extractor/funnyordie.py | 9 + youtube_dl/extractor/gamespot.py | 45 ++ youtube_dl/extractor/gametrailers.py | 9 + youtube_dl/extractor/generic.py | 16 +- youtube_dl/extractor/googleplus.py | 14 +- youtube_dl/extractor/googlesearch.py | 2 +- youtube_dl/extractor/hotnewhiphop.py | 48 ++ youtube_dl/extractor/howcast.py | 9 + youtube_dl/extractor/hypem.py | 8 + youtube_dl/extractor/ina.py | 8 + youtube_dl/extractor/infoq.py | 12 + youtube_dl/extractor/instagram.py | 42 ++ youtube_dl/extractor/justintv.py | 11 + youtube_dl/extractor/keek.py | 9 + youtube_dl/extractor/liveleak.py | 10 + youtube_dl/extractor/metacafe.py | 13 + youtube_dl/extractor/myspass.py | 9 + youtube_dl/extractor/myvideo.py | 8 + youtube_dl/extractor/nba.py | 9 + youtube_dl/extractor/photobucket.py | 10 + youtube_dl/extractor/pornotube.py | 9 + youtube_dl/extractor/rbmaradio.py | 12 + youtube_dl/extractor/redtube.py | 8 + youtube_dl/extractor/ringtv.py | 37 ++ youtube_dl/extractor/soundcloud.py | 79 ++- youtube_dl/extractor/spiegel.py | 8 + youtube_dl/extractor/stanfordoc.py | 13 +- youtube_dl/extractor/statigram.py | 11 +- youtube_dl/extractor/steam.py | 20 + youtube_dl/extractor/teamcoco.py | 9 + youtube_dl/extractor/ted.py | 9 + youtube_dl/extractor/tf1.py | 35 ++ youtube_dl/extractor/traileraddict.py | 49 ++ youtube_dl/extractor/tudou.py | 8 + youtube_dl/extractor/tumblr.py | 10 +- youtube_dl/extractor/tutv.py | 41 ++ youtube_dl/extractor/ustream.py | 9 + youtube_dl/extractor/vbox7.py | 8 + youtube_dl/extractor/vevo.py | 10 + youtube_dl/extractor/vimeo.py | 14 +- youtube_dl/extractor/vine.py | 9 + youtube_dl/extractor/wat.py | 84 +++ youtube_dl/extractor/wimp.py | 8 + youtube_dl/extractor/worldstarhiphop.py | 10 +- youtube_dl/extractor/xhamster.py | 10 + youtube_dl/extractor/xnxx.py | 8 + youtube_dl/extractor/xvideos.py | 8 + youtube_dl/extractor/yahoo.py | 14 +- youtube_dl/extractor/youjizz.py | 8 + youtube_dl/extractor/youku.py | 12 + youtube_dl/extractor/youporn.py | 11 + youtube_dl/extractor/youtube.py | 80 ++- youtube_dl/update.py | 2 +- youtube_dl/utils.py | 14 +- youtube_dl/version.py | 2 +- 84 files changed, 1398 insertions(+), 930 deletions(-) delete mode 100644 test/tests.json create mode 100644 youtube_dl/extractor/auengine.py create mode 100644 youtube_dl/extractor/gamespot.py create mode 100644 youtube_dl/extractor/hotnewhiphop.py create mode 100644 youtube_dl/extractor/instagram.py create mode 100644 youtube_dl/extractor/ringtv.py create mode 100644 youtube_dl/extractor/tf1.py create mode 100644 youtube_dl/extractor/traileraddict.py create mode 100644 youtube_dl/extractor/tutv.py create mode 100644 youtube_dl/extractor/wat.py diff --git a/README.md b/README.md index 81b86e2..b246d3c 100644 --- a/README.md +++ b/README.md @@ -18,19 +18,13 @@ which means you can modify it, redistribute it or use it however you like. --version print program version and exit -U, --update update this program to latest version -i, --ignore-errors continue on download errors - -r, --rate-limit LIMIT maximum download rate (e.g. 50k or 44.6m) - -R, --retries RETRIES number of retries (default is 10) - --buffer-size SIZE size of download buffer (e.g. 1024 or 16k) - (default is 1024) - --no-resize-buffer do not automatically adjust the buffer size. By - default, the buffer size is automatically resized - from an initial value of SIZE. --dump-user-agent display the current browser identification --user-agent UA specify a custom user agent --referer REF specify a custom referer, use if the video access is restricted to one domain --list-extractors List all supported extractors and the URLs they would handle + --extractor-descriptions Output descriptions of all supported extractors --proxy URL Use the specified HTTP/HTTPS proxy --no-check-certificate Suppress HTTPS certificate validation. @@ -50,6 +44,15 @@ which means you can modify it, redistribute it or use it however you like. --datebefore DATE download only videos uploaded before this date --dateafter DATE download only videos uploaded after this date +## Download Options: + -r, --rate-limit LIMIT maximum download rate (e.g. 50k or 44.6m) + -R, --retries RETRIES number of retries (default is 10) + --buffer-size SIZE size of download buffer (e.g. 1024 or 16k) + (default is 1024) + --no-resize-buffer do not automatically adjust the buffer size. By + default, the buffer size is automatically resized + from an initial value of SIZE. + ## Filesystem Options: -t, --title use title in file name (default) --id use only video ID in file name @@ -168,7 +171,7 @@ The `-o` option allows users to indicate a template for the output file names. T - `playlist`: The name or the id of the playlist that contains the video. - `playlist_index`: The index of the video in the playlist, a five-digit number. -The current default template is `%(id)s.%(ext)s`, but that will be switchted to `%(title)s-%(id)s.%(ext)s` (which can be requested with `-t` at the moment). +The current default template is `%(title)s-%(id)s.%(ext)s`. In some cases, you don't want special characters such as 中, spaces, or &, such as when transferring the downloaded filename to a Windows system or the filename through an 8bit-unsafe channel. In these cases, add the `--restrict-filenames` flag to get a shorter title: @@ -194,11 +197,11 @@ Examples: ### Can you please put the -b option back? -Most people asking this question are not aware that youtube-dl now defaults to downloading the highest available quality as reported by YouTube, which will be 1080p or 720p in some cases, so you no longer need the -b option. For some specific videos, maybe YouTube does not report them to be available in a specific high quality format you''re interested in. In that case, simply request it with the -f option and youtube-dl will try to download it. +Most people asking this question are not aware that youtube-dl now defaults to downloading the highest available quality as reported by YouTube, which will be 1080p or 720p in some cases, so you no longer need the `-b` option. For some specific videos, maybe YouTube does not report them to be available in a specific high quality format you're interested in. In that case, simply request it with the `-f` option and youtube-dl will try to download it. ### I get HTTP error 402 when trying to download a video. What's this? -Apparently YouTube requires you to pass a CAPTCHA test if you download too much. We''re [considering to provide a way to let you solve the CAPTCHA](https://github.com/rg3/youtube-dl/issues/154), but at the moment, your best course of action is pointing a webbrowser to the youtube URL, solving the CAPTCHA, and restart youtube-dl. +Apparently YouTube requires you to pass a CAPTCHA test if you download too much. We're [considering to provide a way to let you solve the CAPTCHA](https://github.com/rg3/youtube-dl/issues/154), but at the moment, your best course of action is pointing a webbrowser to the youtube URL, solving the CAPTCHA, and restart youtube-dl. ### I have downloaded a video but how can I play it? diff --git a/README.txt b/README.txt index 239709b..8f08dd2 100644 --- a/README.txt +++ b/README.txt @@ -25,19 +25,13 @@ OPTIONS --version print program version and exit -U, --update update this program to latest version -i, --ignore-errors continue on download errors - -r, --rate-limit LIMIT maximum download rate (e.g. 50k or 44.6m) - -R, --retries RETRIES number of retries (default is 10) - --buffer-size SIZE size of download buffer (e.g. 1024 or 16k) - (default is 1024) - --no-resize-buffer do not automatically adjust the buffer size. By - default, the buffer size is automatically resized - from an initial value of SIZE. --dump-user-agent display the current browser identification --user-agent UA specify a custom user agent --referer REF specify a custom referer, use if the video access is restricted to one domain --list-extractors List all supported extractors and the URLs they would handle + --extractor-descriptions Output descriptions of all supported extractors --proxy URL Use the specified HTTP/HTTPS proxy --no-check-certificate Suppress HTTPS certificate validation. @@ -59,6 +53,17 @@ Video Selection: --datebefore DATE download only videos uploaded before this date --dateafter DATE download only videos uploaded after this date +Download Options: +----------------- + + -r, --rate-limit LIMIT maximum download rate (e.g. 50k or 44.6m) + -R, --retries RETRIES number of retries (default is 10) + --buffer-size SIZE size of download buffer (e.g. 1024 or 16k) + (default is 1024) + --no-resize-buffer do not automatically adjust the buffer size. By + default, the buffer size is automatically resized + from an initial value of SIZE. + Filesystem Options: ------------------- @@ -205,9 +210,7 @@ lowercase S. Allowed names are: - playlist_index: The index of the video in the playlist, a five-digit number. -The current default template is %(id)s.%(ext)s, but that will be -switchted to %(title)s-%(id)s.%(ext)s (which can be requested with -t at -the moment). +The current default template is %(title)s-%(id)s.%(ext)s. In some cases, you don't want special characters such as 中, spaces, or &, such as when transferring the downloaded filename to a Windows system @@ -244,14 +247,14 @@ Most people asking this question are not aware that youtube-dl now defaults to downloading the highest available quality as reported by YouTube, which will be 1080p or 720p in some cases, so you no longer need the -b option. For some specific videos, maybe YouTube does not -report them to be available in a specific high quality format you''re +report them to be available in a specific high quality format you're interested in. In that case, simply request it with the -f option and youtube-dl will try to download it. I get HTTP error 402 when trying to download a video. What's this? Apparently YouTube requires you to pass a CAPTCHA test if you download -too much. We''re considering to provide a way to let you solve the +too much. We're considering to provide a way to let you solve the CAPTCHA, but at the moment, your best course of action is pointing a webbrowser to the youtube URL, solving the CAPTCHA, and restart youtube-dl. diff --git a/devscripts/youtube_genalgo.py b/devscripts/youtube_genalgo.py index b168cea..c3d69e6 100644 --- a/devscripts/youtube_genalgo.py +++ b/devscripts/youtube_genalgo.py @@ -5,18 +5,25 @@ import sys tests = [ + # 88 ("qwertyuioplkjhgfdsazxcvbnm1234567890QWERTYUIOPLKJHGFDSAZXCVBNM!@#$%^&*()_-+={[]}|:;?/>.<", "J:|}][{=+-_)(*&;%$#@>MNBVCXZASDFGH^KLPOIUYTREWQ0987654321mnbvcxzasdfghrklpoiuytej"), + # 87 ("qwertyuioplkjhgfdsazxcvbnm1234567890QWERTYUIOPLKJHGFDSAZXCVBNM!@#$^&*()_-+={[]}|:;?/>.<", "!?;:|}][{=+-_)(*&^$#@/MNBVCXZASqFGHJKLPOIUYTREWQ0987654321mnbvcxzasdfghjklpoiuytr"), + # 86 - vfl_ymO4Z 2013/06/27 ("qwertyuioplkjhgfdsazxcvbnm1234567890QWERTYUIOPLKJHGFDSAZXCVBNM!@#$%^&*()_-+={[|};?/>.<", "ertyuioplkjhgfdsazxcvbnm1234567890QWERTYUIOPLKJHGFDSAZXCVBNM!/#$%^&*()_-+={[|};?@"), + # 85 ("qwertyuioplkjhgfdsazxcvbnm1234567890QWERTYUIOPLKJHGFDSAZXCVBNM!@#$%^&*()_-+={[};?/>.<", "{>/?;}[.=+-_)(*&^%$#@!MqBVCXZASDFwHJKLPOIUYTREWQ0987654321mnbvcxzasdfghjklpoiuytr"), + # 84 ("qwertyuioplkjhgfdsazxcvbnm1234567890QWERTYUIOPLKJHGFDSAZXCVBNM!@#$%^&*()_-+={[};?>.<", "<.>?;}[{=+-_)(*&^%$#@!MNBVCXZASDFGHJKLPOIUYTREWe098765432rmnbvcxzasdfghjklpoiuyt1"), + # 83 ("qwertyuioplkjhgfdsazxcvbnm1234567890QWERTYUIOPLKJHGFDSAZXCVBNM!#$%^&*()_+={[};?/>.<", "D.>/?;}[{=+_)(*&^%$#!MNBVCXeAS.<", "Q>/?;}[{=+-(*<^%$#@!MNBVCXZASDFGHKLPOIUY8REWT0q&7654321mnbvcxzasdfghjklpoiuytrew9"), ] diff --git a/setup.py b/setup.py index 61435fc..3b6dc2d 100644 --- a/setup.py +++ b/setup.py @@ -12,8 +12,9 @@ except ImportError: from distutils.core import setup try: + # This will create an exe that needs Microsoft Visual C++ 2008 + # Redistributable Package import py2exe - """This will create an exe that needs Microsoft Visual C++ 2008 Redistributable Package""" except ImportError: if len(sys.argv) >= 2 and sys.argv[1] == 'py2exe': print("Cannot import py2exe", file=sys.stderr) @@ -26,13 +27,15 @@ py2exe_options = { "dist_dir": '.', "dll_excludes": ['w9xpopen.exe'], } + py2exe_console = [{ "script": "./youtube_dl/__main__.py", "dest_base": "youtube-dl", }] + py2exe_params = { 'console': py2exe_console, - 'options': { "py2exe": py2exe_options }, + 'options': {"py2exe": py2exe_options}, 'zipfile': None } @@ -41,30 +44,34 @@ if len(sys.argv) >= 2 and sys.argv[1] == 'py2exe': else: params = { 'scripts': ['bin/youtube-dl'], - 'data_files': [('etc/bash_completion.d', ['youtube-dl.bash-completion']), # Installing system-wide would require sudo... - ('share/doc/youtube_dl', ['README.txt']), - ('share/man/man1/', ['youtube-dl.1'])] + 'data_files': [ # Installing system-wide would require sudo... + ('etc/bash_completion.d', ['youtube-dl.bash-completion']), + ('share/doc/youtube_dl', ['README.txt']), + ('share/man/man1/', ['youtube-dl.1']) + ] } # Get the version from youtube_dl/version.py without importing the package -exec(compile(open('youtube_dl/version.py').read(), 'youtube_dl/version.py', 'exec')) +exec(compile(open('youtube_dl/version.py').read(), + 'youtube_dl/version.py', 'exec')) setup( - name = 'youtube_dl', - version = __version__, - description = 'YouTube video downloader', - long_description = 'Small command-line program to download videos from YouTube.com and other video sites.', - url = 'https://github.com/rg3/youtube-dl', - author = 'Ricardo Garcia', - maintainer = 'Philipp Hagemeister', - maintainer_email = 'phihag@phihag.de', - packages = ['youtube_dl', 'youtube_dl.extractor'], + name='youtube_dl', + version=__version__, + description='YouTube video downloader', + long_description='Small command-line program to download videos from' + ' YouTube.com and other video sites.', + url='https://github.com/rg3/youtube-dl', + author='Ricardo Garcia', + maintainer='Philipp Hagemeister', + maintainer_email='phihag@phihag.de', + packages=['youtube_dl', 'youtube_dl.extractor'], # Provokes warning on most systems (why?!) - #test_suite = 'nose.collector', - #test_requires = ['nosetest'], + # test_suite = 'nose.collector', + # test_requires = ['nosetest'], - classifiers = [ + classifiers=[ "Topic :: Multimedia :: Video", "Development Status :: 5 - Production/Stable", "Environment :: Console", diff --git a/test/helper.py b/test/helper.py index 842ffc2..a2b468b 100644 --- a/test/helper.py +++ b/test/helper.py @@ -2,6 +2,7 @@ import io import json import os.path +import youtube_dl.extractor from youtube_dl import YoutubeDL, YoutubeDLHandler from youtube_dl.utils import ( compat_cookiejar, @@ -30,4 +31,14 @@ class FakeYDL(YoutubeDL): def trouble(self, s, tb=None): raise Exception(s) def download(self, x): - self.result.append(x) \ No newline at end of file + self.result.append(x) + +def get_testcases(): + for ie in youtube_dl.extractor.gen_extractors(): + t = getattr(ie, '_TEST', None) + if t: + t['name'] = type(ie).__name__[:-len('IE')] + yield t + for t in getattr(ie, '_TESTS', []): + t['name'] = type(ie).__name__[:-len('IE')] + yield t diff --git a/test/test_all_urls.py b/test/test_all_urls.py index d3ee296..39a5ee3 100644 --- a/test/test_all_urls.py +++ b/test/test_all_urls.py @@ -7,7 +7,8 @@ import unittest import os sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) -from youtube_dl.extractor import YoutubeIE, YoutubePlaylistIE, YoutubeChannelIE, JustinTVIE +from youtube_dl.extractor import YoutubeIE, YoutubePlaylistIE, YoutubeChannelIE, JustinTVIE, gen_extractors +from helper import get_testcases class TestAllURLsMatching(unittest.TestCase): def test_youtube_playlist_matching(self): @@ -50,5 +51,16 @@ class TestAllURLsMatching(unittest.TestCase): self.assertEqual(YoutubeIE()._extract_id('https://www.youtube.com/watch?&v=BaW_jenozKc'), 'BaW_jenozKc') self.assertEqual(YoutubeIE()._extract_id('https://www.youtube.com/watch?feature=player_embedded&v=BaW_jenozKc'), 'BaW_jenozKc') + def test_no_duplicates(self): + ies = gen_extractors() + for tc in get_testcases(): + url = tc['url'] + for ie in ies: + if type(ie).__name__ in ['GenericIE', tc['name'] + 'IE']: + self.assertTrue(ie.suitable(url), '%s should match URL %r' % (type(ie).__name__, url)) + else: + self.assertFalse(ie.suitable(url), '%s should not match URL %r' % (type(ie).__name__, url)) + + if __name__ == '__main__': unittest.main() diff --git a/test/test_download.py b/test/test_download.py index 067bde4..21cb2e6 100644 --- a/test/test_download.py +++ b/test/test_download.py @@ -14,10 +14,8 @@ import binascii sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) import youtube_dl.YoutubeDL -import youtube_dl.extractor from youtube_dl.utils import * -DEF_FILE = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'tests.json') PARAMETERS_FILE = os.path.join(os.path.dirname(os.path.abspath(__file__)), "parameters.json") RETRIES = 3 @@ -56,8 +54,9 @@ def _file_md5(fn): with open(fn, 'rb') as f: return hashlib.md5(f.read()).hexdigest() -with io.open(DEF_FILE, encoding='utf-8') as deff: - defs = json.load(deff) +from helper import get_testcases +defs = get_testcases() + with io.open(PARAMETERS_FILE, encoding='utf-8') as pf: parameters = json.load(pf) @@ -73,22 +72,23 @@ def generator(test_case): def test_template(self): ie = youtube_dl.extractor.get_info_extractor(test_case['name']) + def print_skipping(reason): + print('Skipping %s: %s' % (test_case['name'], reason)) if not ie._WORKING: - print('Skipping: IE marked as not _WORKING') + print_skipping('IE marked as not _WORKING') return if 'playlist' not in test_case and not test_case['file']: - print('Skipping: No output file specified') + print_skipping('No output file specified') return if 'skip' in test_case: - print('Skipping: {0}'.format(test_case['skip'])) + print_skipping(test_case['skip']) return params = self.parameters.copy() params.update(test_case.get('params', {})) ydl = YoutubeDL(params) - for ie in youtube_dl.extractor.gen_extractors(): - ydl.add_info_extractor(ie) + ydl.add_default_info_extractors() finished_hook_called = set() def _hook(status): if status['status'] == 'finished': @@ -155,9 +155,12 @@ def generator(test_case): ### And add them to TestDownload for n, test_case in enumerate(defs): test_method = generator(test_case) - test_method.__name__ = "test_{0}".format(test_case["name"]) - if getattr(TestDownload, test_method.__name__, False): - test_method.__name__ = "test_{0}_{1}".format(test_case["name"], n) + tname = 'test_' + str(test_case['name']) + i = 1 + while hasattr(TestDownload, tname): + tname = 'test_' + str(test_case['name']) + '_' + str(i) + i += 1 + test_method.__name__ = tname setattr(TestDownload, test_method.__name__, test_method) del test_method diff --git a/test/test_youtube_lists.py b/test/test_youtube_lists.py index 4486b7e..dd9e292 100644 --- a/test/test_youtube_lists.py +++ b/test/test_youtube_lists.py @@ -8,7 +8,7 @@ import json import os sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) -from youtube_dl.extractor import YoutubeUserIE, YoutubePlaylistIE, YoutubeIE, YoutubeChannelIE +from youtube_dl.extractor import YoutubeUserIE, YoutubePlaylistIE, YoutubeIE, YoutubeChannelIE, YoutubeShowIE from youtube_dl.utils import * from helper import FakeYDL @@ -88,5 +88,11 @@ class TestYoutubeLists(unittest.TestCase): result = ie.extract('PLtPgu7CB4gbY9oDN3drwC3cMbJggS7dKl')[0] self.assertEqual(len(result['entries']), 2) + def test_youtube_show(self): + dl = FakeYDL() + ie = YoutubeShowIE(dl) + result = ie.extract('http://www.youtube.com/show/airdisasters') + self.assertTrue(len(result) >= 4) + if __name__ == '__main__': unittest.main() diff --git a/test/tests.json b/test/tests.json deleted file mode 100644 index ebc7a12..0000000 --- a/test/tests.json +++ /dev/null @@ -1,718 +0,0 @@ -[ - { - "name": "Youtube", - "url": "http://www.youtube.com/watch?v=BaW_jenozKc", - "file": "BaW_jenozKc.mp4", - "info_dict": { - "title": "youtube-dl test video \"'/\\ä↭𝕐", - "uploader": "Philipp Hagemeister", - "uploader_id": "phihag", - "upload_date": "20121002", - "description": "test chars: \"'/\\ä↭𝕐\n\nThis is a test video for youtube-dl.\n\nFor more information, contact phihag@phihag.de ." - } - }, - { - "name": "Youtube", - "url": "http://www.youtube.com/watch?v=1ltcDfZMA3U", - "file": "1ltcDfZMA3U.flv", - "note": "Test VEVO video (#897)", - "info_dict": { - "upload_date": "20070518", - "title": "Maps - It Will Find You", - "description": "Music video by Maps performing It Will Find You.", - "uploader": "MuteUSA", - "uploader_id": "MuteUSA" - } - }, - { - "name": "Youtube", - "url": "http://www.youtube.com/watch?v=UxxajLWwzqY", - "file": "UxxajLWwzqY.mp4", - "note": "Test generic use_cipher_signature video (#897)", - "info_dict": { - "upload_date": "20120506", - "title": "Icona Pop - I Love It (feat. Charli XCX) [OFFICIAL VIDEO]", - "description": "md5:b085c9804f5ab69f4adea963a2dceb3c", - "uploader": "IconaPop", - "uploader_id": "IconaPop" - } - }, - { - "name": "Dailymotion", - "md5": "392c4b85a60a90dc4792da41ce3144eb", - "url": "http://www.dailymotion.com/video/x33vw9_tutoriel-de-youtubeur-dl-des-video_tech", - "file": "x33vw9.mp4", - "info_dict": { - "uploader": "Alex and Van .", - "title": "Tutoriel de Youtubeur\"DL DES VIDEO DE YOUTUBE\"" - } - }, - { - "name": "Metacafe", - "add_ie": ["Youtube"], - "url": "http://metacafe.com/watch/yt-_aUehQsCQtM/the_electric_company_short_i_pbs_kids_go/", - "file": "_aUehQsCQtM.flv", - "info_dict": { - "upload_date": "20090102", - "title": "The Electric Company | \"Short I\" | PBS KIDS GO!", - "description": "md5:2439a8ef6d5a70e380c22f5ad323e5a8", - "uploader": "PBS", - "uploader_id": "PBS" - } - }, - { - "name": "BlipTV", - "md5": "b2d849efcf7ee18917e4b4d9ff37cafe", - "url": "http://blip.tv/cbr/cbr-exclusive-gotham-city-imposters-bats-vs-jokerz-short-3-5796352", - "file": "5779306.m4v", - "info_dict": { - "upload_date": "20111205", - "description": "md5:9bc31f227219cde65e47eeec8d2dc596", - "uploader": "Comic Book Resources - CBR TV", - "title": "CBR EXCLUSIVE: \"Gotham City Imposters\" Bats VS Jokerz Short 3" - } - }, - { - "name": "XVideos", - "md5": "1d0c835822f0a71a7bf011855db929d0", - "url": "http://www.xvideos.com/video939581/funny_porns_by_s_-1", - "file": "939581.flv", - "info_dict": { - "title": "Funny Porns By >>>>S<<<<<< -1" - } - }, - { - "name": "YouPorn", - "md5": "c37ddbaaa39058c76a7e86c6813423c1", - "url": "http://www.youporn.com/watch/505835/sex-ed-is-it-safe-to-masturbate-daily/", - "file": "505835.mp4", - "info_dict": { - "upload_date": "20101221", - "description": "Love & Sex Answers: http://bit.ly/DanAndJenn -- Is It Unhealthy To Masturbate Daily?", - "uploader": "Ask Dan And Jennifer", - "title": "Sex Ed: Is It Safe To Masturbate Daily?" - } - }, - { - "name": "Pornotube", - "md5": "374dd6dcedd24234453b295209aa69b6", - "url": "http://pornotube.com/c/173/m/1689755/Marilyn-Monroe-Bathing", - "file": "1689755.flv", - "info_dict": { - "upload_date": "20090708", - "title": "Marilyn-Monroe-Bathing" - } - }, - { - "name": "YouJizz", - "md5": "07e15fa469ba384c7693fd246905547c", - "url": "http://www.youjizz.com/videos/zeichentrick-1-2189178.html", - "file": "2189178.flv", - "info_dict": { - "title": "Zeichentrick 1" - } - }, - { - "name": "Vimeo", - "md5": "8879b6cc097e987f02484baf890129e5", - "url": "http://vimeo.com/56015672", - "file": "56015672.mp4", - "info_dict": { - "title": "youtube-dl test video - ★ \" ' 幸 / \\ ä ↭ 𝕐", - "uploader": "Filippo Valsorda", - "uploader_id": "user7108434", - "upload_date": "20121220", - "description": "This is a test case for youtube-dl.\nFor more information, see github.com/rg3/youtube-dl\nTest chars: ★ \" ' 幸 / \\ ä ↭ 𝕐" - } - }, - { - "name": "Soundcloud", - "md5": "ebef0a451b909710ed1d7787dddbf0d7", - "url": "http://soundcloud.com/ethmusic/lostin-powers-she-so-heavy", - "file": "62986583.mp3", - "info_dict": { - "upload_date": "20121011", - "description": "No Downloads untill we record the finished version this weekend, i was too pumped n i had to post it , earl is prolly gonna b hella p.o'd", - "uploader": "E.T. ExTerrestrial Music", - "title": "Lostin Powers - She so Heavy (SneakPreview) Adrian Ackers Blueprint 1" - } - }, - { - "name": "StanfordOpenClassroom", - "md5": "544a9468546059d4e80d76265b0443b8", - "url": "http://openclassroom.stanford.edu/MainFolder/VideoPage.php?course=PracticalUnix&video=intro-environment&speed=100", - "file": "PracticalUnix_intro-environment.mp4", - "info_dict": { - "title": "Intro Environment" - } - }, - { - "name": "XNXX", - "md5": "0831677e2b4761795f68d417e0b7b445", - "url": "http://video.xnxx.com/video1135332/lida_naked_funny_actress_5_", - "file": "1135332.flv", - "info_dict": { - "title": "lida » Naked Funny Actress (5)" - } - }, - { - "name": "Youku", - "url": "http://v.youku.com/v_show/id_XNDgyMDQ2NTQw.html", - "file": "XNDgyMDQ2NTQw_part00.flv", - "md5": "ffe3f2e435663dc2d1eea34faeff5b5b", - "params": { "test": false }, - "info_dict": { - "title": "youtube-dl test video \"'/\\ä↭𝕐" - } - }, - { - "name": "NBA", - "url": "http://www.nba.com/video/games/nets/2012/12/04/0021200253-okc-bkn-recap.nba/index.html", - "file": "0021200253-okc-bkn-recap.nba.mp4", - "md5": "c0edcfc37607344e2ff8f13c378c88a4", - "info_dict": { - "description": "Kevin Durant scores 32 points and dishes out six assists as the Thunder beat the Nets in Brooklyn.", - "title": "Thunder vs. Nets" - } - }, - { - "name": "JustinTV", - "url": "http://www.twitch.tv/thegamedevhub/b/296128360", - "file": "296128360.flv", - "md5": "ecaa8a790c22a40770901460af191c9a", - "info_dict": { - "upload_date": "20110927", - "uploader_id": 25114803, - "uploader": "thegamedevhub", - "title": "Beginner Series - Scripting With Python Pt.1" - } - }, - { - "name": "MyVideo", - "url": "http://www.myvideo.de/watch/8229274/bowling_fail_or_win", - "file": "8229274.flv", - "md5": "2d2753e8130479ba2cb7e0a37002053e", - "info_dict": { - "title": "bowling-fail-or-win" - } - }, - { - "name": "Escapist", - "url": "http://www.escapistmagazine.com/videos/view/the-escapist-presents/6618-Breaking-Down-Baldurs-Gate", - "file": "6618-Breaking-Down-Baldurs-Gate.mp4", - "md5": "c6793dbda81388f4264c1ba18684a74d", - "info_dict": { - "description": "Baldur's Gate: Original, Modded or Enhanced Edition? I'll break down what you can expect from the new Baldur's Gate: Enhanced Edition.", - "uploader": "the-escapist-presents", - "title": "Breaking Down Baldur's Gate" - } - }, - { - "name": "GooglePlus", - "url": "https://plus.google.com/u/0/108897254135232129896/posts/ZButuJc6CtH", - "file": "ZButuJc6CtH.flv", - "info_dict": { - "upload_date": "20120613", - "uploader": "井上ヨシマサ", - "title": "嘆きの天使 降臨" - } - }, - { - "name": "FunnyOrDie", - "url": "http://www.funnyordie.com/videos/0732f586d7/heart-shaped-box-literal-video-version", - "file": "0732f586d7.mp4", - "md5": "f647e9e90064b53b6e046e75d0241fbd", - "info_dict": { - "description": "Lyrics changed to match the video. Spoken cameo by Obscurus Lupa (from ThatGuyWithTheGlasses.com). Based on a concept by Dustin McLean (DustFilms.com). Performed, edited, and written by David A. Scott.", - "title": "Heart-Shaped Box: Literal Video Version" - } - }, - { - "name": "Steam", - "url": "http://store.steampowered.com/video/105600/", - "playlist": [ - { - "file": "81300.flv", - "md5": "f870007cee7065d7c76b88f0a45ecc07", - "info_dict": { - "title": "Terraria 1.1 Trailer" - } - }, - { - "file": "80859.flv", - "md5": "61aaf31a5c5c3041afb58fb83cbb5751", - "info_dict": { - "title": "Terraria Trailer" - } - } - ] - }, - { - "name": "Ustream", - "url": "http://www.ustream.tv/recorded/20274954", - "file": "20274954.flv", - "md5": "088f151799e8f572f84eb62f17d73e5c", - "info_dict": { - "title": "Young Americans for Liberty February 7, 2012 2:28 AM", - "uploader": "Young Americans for Liberty" - } - }, - { - "name": "InfoQ", - "url": "http://www.infoq.com/presentations/A-Few-of-My-Favorite-Python-Things", - "file": "12-jan-pythonthings.mp4", - "info_dict": { - "description": "Mike Pirnat presents some tips and tricks, standard libraries and third party packages that make programming in Python a richer experience.", - "title": "A Few of My Favorite [Python] Things" - }, - "params": { - "skip_download": true - } - }, - { - "name": "ComedyCentral", - "url": "http://www.thedailyshow.com/watch/thu-december-13-2012/kristen-stewart", - "file": "422212.mp4", - "md5": "4e2f5cb088a83cd8cdb7756132f9739d", - "info_dict": { - "upload_date": "20121214", - "description": "Kristen Stewart", - "uploader": "thedailyshow", - "title": "thedailyshow-kristen-stewart part 1" - } - }, - { - "name": "RBMARadio", - "url": "http://www.rbmaradio.com/shows/ford-lopatin-live-at-primavera-sound-2011", - "file": "ford-lopatin-live-at-primavera-sound-2011.mp3", - "md5": "6bc6f9bcb18994b4c983bc3bf4384d95", - "info_dict": { - "title": "Live at Primavera Sound 2011", - "description": "Joel Ford and Daniel \u2019Oneohtrix Point Never\u2019 Lopatin fly their midified pop extravaganza to Spain. Live at Primavera Sound 2011.", - "uploader": "Ford & Lopatin", - "uploader_id": "ford-lopatin", - "location": "Spain" - } - }, - { - "name": "Facebook", - "url": "https://www.facebook.com/photo.php?v=120708114770723", - "file": "120708114770723.mp4", - "md5": "48975a41ccc4b7a581abd68651c1a5a8", - "info_dict": { - "title": "PEOPLE ARE AWESOME 2013", - "duration": 279 - } - }, - { - "name": "EightTracks", - "url": "http://8tracks.com/ytdl/youtube-dl-test-tracks-a", - "playlist": [ - { - "file": "11885610.m4a", - "md5": "96ce57f24389fc8734ce47f4c1abcc55", - "info_dict": { - "title": "youtue-dl project<>\"' - youtube-dl test track 1 \"'/\\\u00e4\u21ad", - "uploader_id": "ytdl" - } - }, - { - "file": "11885608.m4a", - "md5": "4ab26f05c1f7291ea460a3920be8021f", - "info_dict": { - "title": "youtube-dl project - youtube-dl test track 2 \"'/\\\u00e4\u21ad", - "uploader_id": "ytdl" - - } - }, - { - "file": "11885679.m4a", - "md5": "d30b5b5f74217410f4689605c35d1fd7", - "info_dict": { - "title": "youtube-dl project as well - youtube-dl test track 3 \"'/\\\u00e4\u21ad", - "uploader_id": "ytdl" - } - }, - { - "file": "11885680.m4a", - "md5": "4eb0a669317cd725f6bbd336a29f923a", - "info_dict": { - "title": "youtube-dl project as well - youtube-dl test track 4 \"'/\\\u00e4\u21ad", - "uploader_id": "ytdl" - } - }, - { - "file": "11885682.m4a", - "md5": "1893e872e263a2705558d1d319ad19e8", - "info_dict": { - "title": "PH - youtube-dl test track 5 \"'/\\\u00e4\u21ad", - "uploader_id": "ytdl" - } - }, - { - "file": "11885683.m4a", - "md5": "b673c46f47a216ab1741ae8836af5899", - "info_dict": { - "title": "PH - youtube-dl test track 6 \"'/\\\u00e4\u21ad", - "uploader_id": "ytdl" - } - }, - { - "file": "11885684.m4a", - "md5": "1d74534e95df54986da7f5abf7d842b7", - "info_dict": { - "title": "phihag - youtube-dl test track 7 \"'/\\\u00e4\u21ad", - "uploader_id": "ytdl" - } - }, - { - "file": "11885685.m4a", - "md5": "f081f47af8f6ae782ed131d38b9cd1c0", - "info_dict": { - "title": "phihag - youtube-dl test track 8 \"'/\\\u00e4\u21ad", - "uploader_id": "ytdl" - } - } - ] - }, - { - "name": "Keek", - "url": "http://www.keek.com/ytdl/keeks/NODfbab", - "file": "NODfbab.mp4", - "md5": "9b0636f8c0f7614afa4ea5e4c6e57e83", - "info_dict": { - "uploader": "ytdl", - "title": "test chars: \"'/\\ä<>This is a test video for youtube-dl.For more information, contact phihag@phihag.de ." - } - }, - { - "name": "TED", - "url": "http://www.ted.com/talks/dan_dennett_on_our_consciousness.html", - "file": "102.mp4", - "md5": "8cd9dfa41ee000ce658fd48fb5d89a61", - "info_dict": { - "title": "Dan Dennett: The illusion of consciousness", - "description": "md5:c6fa72e6eedbd938c9caf6b2702f5922" - } - }, - { - "name": "MySpass", - "url": "http://www.myspass.de/myspass/shows/tvshows/absolute-mehrheit/Absolute-Mehrheit-vom-17022013-Die-Highlights-Teil-2--/11741/", - "file": "11741.mp4", - "md5": "0b49f4844a068f8b33f4b7c88405862b", - "info_dict": { - "description": "Wer kann in die Fußstapfen von Wolfgang Kubicki treten und die Mehrheit der Zuschauer hinter sich versammeln? Wird vielleicht sogar die Absolute Mehrheit geknackt und der Jackpot von 200.000 Euro mit nach Hause genommen?", - "title": "Absolute Mehrheit vom 17.02.2013 - Die Highlights, Teil 2" - } - }, - { - "name": "Generic", - "url": "http://www.hodiho.fr/2013/02/regis-plante-sa-jeep.html", - "file": "13601338388002.mp4", - "md5": "85b90ccc9d73b4acd9138d3af4c27f89", - "info_dict": { - "uploader": "www.hodiho.fr", - "title": "Régis plante sa Jeep" - } - }, - { - "name": "Spiegel", - "url": "http://www.spiegel.de/video/vulkan-tungurahua-in-ecuador-ist-wieder-aktiv-video-1259285.html", - "file": "1259285.mp4", - "md5": "2c2754212136f35fb4b19767d242f66e", - "info_dict": { - "title": "Vulkanausbruch in Ecuador: Der \"Feuerschlund\" ist wieder aktiv" - } - }, - { - "name": "LiveLeak", - "md5": "0813c2430bea7a46bf13acf3406992f4", - "url": "http://www.liveleak.com/view?i=757_1364311680", - "file": "757_1364311680.mp4", - "info_dict": { - "title": "Most unlucky car accident", - "description": "extremely bad day for this guy..!", - "uploader": "ljfriel2" - } - }, - { - "name": "WorldStarHipHop", - "url": "http://www.worldstarhiphop.com/videos/video.php?v=wshh6a7q1ny0G34ZwuIO", - "file": "wshh6a7q1ny0G34ZwuIO.mp4", - "md5": "9d04de741161603bf7071bbf4e883186", - "info_dict": { - "title": "Video: KO Of The Week: MMA Fighter Gets Knocked Out By Swift Head Kick!" - } - }, - { - "name": "ARD", - "url": "http://www.ardmediathek.de/das-erste/tagesschau-in-100-sek?documentId=14077640", - "file": "14077640.mp4", - "md5": "6ca8824255460c787376353f9e20bbd8", - "info_dict": { - "title": "11.04.2013 09:23 Uhr - Tagesschau in 100 Sekunden" - }, - "skip": "Requires rtmpdump" - }, - { - "name": "Tumblr", - "url": "http://resigno.tumblr.com/post/53364321212/e-de-extrema-importancia-que-esse-video-seja", - "file": "53364321212.mp4", - "md5": "0716d3dd51baf68a28b40fdf1251494e", - "info_dict": { - "title": "Rafael Lemos | Tumblr" - } - }, - { - "name": "SoundcloudSet", - "url":"https://soundcloud.com/the-concept-band/sets/the-royal-concept-ep", - "playlist":[ - { - "file":"30510138.mp3", - "md5":"f9136bf103901728f29e419d2c70f55d", - "info_dict": { - "upload_date": "20111213", - "description": "The Royal Concept from Stockholm\r\nFilip / Povel / David / Magnus\r\nwww.royalconceptband.com", - "uploader": "The Royal Concept", - "title": "D-D-Dance" - } - }, - { - "file":"47127625.mp3", - "md5":"09b6758a018470570f8fd423c9453dd8", - "info_dict": { - "upload_date": "20120521", - "description": "The Royal Concept from Stockholm\r\nFilip / Povel / David / Magnus\r\nwww.royalconceptband.com", - "uploader": "The Royal Concept", - "title": "The Royal Concept - Gimme Twice" - } - }, - { - "file":"47127627.mp3", - "md5":"154abd4e418cea19c3b901f1e1306d9c", - "info_dict": { - "upload_date": "20120521", - "uploader": "The Royal Concept", - "title": "Goldrushed" - } - }, - { - "file":"47127629.mp3", - "md5":"2f5471edc79ad3f33a683153e96a79c1", - "info_dict": { - "upload_date": "20120521", - "description": "The Royal Concept from Stockholm\r\nFilip / Povel / David / Magnus\r\nwww.royalconceptband.com", - "uploader": "The Royal Concept", - "title": "In the End" - } - }, - { - "file":"47127631.mp3", - "md5":"f9ba87aa940af7213f98949254f1c6e2", - "info_dict": { - "upload_date": "20120521", - "description": "The Royal Concept from Stockholm\r\nFilip / David / Povel / Magnus\r\nwww.theroyalconceptband.com", - "uploader": "The Royal Concept", - "title": "Knocked Up" - } - }, - { - "file":"75206121.mp3", - "md5":"f9d1fe9406717e302980c30de4af9353", - "info_dict": { - "upload_date": "20130116", - "description": "The unreleased track World on Fire premiered on the CW's hit show Arrow (8pm/7pm central). \r\nAs a gift to our fans we would like to offer you a free download of the track! ", - "uploader": "The Royal Concept", - "title": "World On Fire" - } - } - ] - }, - { - "name":"Bandcamp", - "url":"http://youtube-dl.bandcamp.com/track/youtube-dl-test-song", - "file":"1812978515.mp3", - "md5":"cdeb30cdae1921719a3cbcab696ef53c", - "info_dict": { - "title":"youtube-dl test song \"'/\\ä↭" - }, - "skip": "There is a limit of 200 free downloads / month for the test song" - }, - { - "name": "RedTube", - "url": "http://www.redtube.com/66418", - "file": "66418.mp4", - "md5": "7b8c22b5e7098a3e1c09709df1126d2d", - "info_dict":{ - "title":"Sucked on a toilet" - } - }, - { - "name": "Photobucket", - "url": "http://media.photobucket.com/user/rachaneronas/media/TiredofLinkBuildingTryBacklinkMyDomaincom_zpsc0c3b9fa.mp4.html?filters[term]=search&filters[primary]=videos&filters[secondary]=images&sort=1&o=0", - "file": "zpsc0c3b9fa.mp4", - "md5": "7dabfb92b0a31f6c16cebc0f8e60ff99", - "info_dict": { - "upload_date": "20130504", - "uploader": "rachaneronas", - "title": "Tired of Link Building? Try BacklinkMyDomain.com!" - } - }, - { - "name": "Ina", - "url": "www.ina.fr/video/I12055569/francois-hollande-je-crois-que-c-est-clair-video.html", - "file": "I12055569.mp4", - "md5": "a667021bf2b41f8dc6049479d9bb38a3", - "info_dict":{ - "title":"François Hollande \"Je crois que c'est clair\"" - } - }, - { - "name": "Yahoo", - "url": "http://screen.yahoo.com/julian-smith-travis-legg-watch-214727115.html", - "file": "214727115.flv", - "md5": "2e717f169c1be93d84d3794a00d4a325", - "info_dict": { - "title": "Julian Smith & Travis Legg Watch Julian Smith" - }, - "skip": "Requires rtmpdump" - }, - { - "name": "Howcast", - "url": "http://www.howcast.com/videos/390161-How-to-Tie-a-Square-Knot-Properly", - "file": "390161.mp4", - "md5": "1d7ba54e2c9d7dc6935ef39e00529138", - "info_dict":{ - "title":"How to Tie a Square Knot Properly", - "description":"The square knot, also known as the reef knot, is one of the oldest, most basic knots to tie, and can be used in many different ways. Here's the proper way to tie a square knot." - } - }, - { - "name": "Vine", - "url": "https://vine.co/v/b9KOOWX7HUx", - "file": "b9KOOWX7HUx.mp4", - "md5": "2f36fed6235b16da96ce9b4dc890940d", - "info_dict":{ - "title": "Chicken.", - "uploader": "Jack Dorsey" - } - }, - { - "name": "Flickr", - "url": "http://www.flickr.com/photos/forestwander-nature-pictures/5645318632/in/photostream/", - "file": "5645318632.mp4", - "md5": "6fdc01adbc89d72fc9c4f15b4a4ba87b", - "info_dict":{ - "title": "Dark Hollow Waterfalls", - "uploader_id": "forestwander-nature-pictures", - "description": "Waterfalls in the Springtime at Dark Hollow Waterfalls. These are located just off of Skyline Drive in Virginia. They are only about 6/10 of a mile hike but it is a pretty steep hill and a good climb back up." - } - }, - { - "name": "Teamcoco", - "url": "http://teamcoco.com/video/louis-ck-interview-george-w-bush", - "file": "19705.mp4", - "md5": "27b6f7527da5acf534b15f21b032656e", - "info_dict":{ - "title": "Louis C.K. Interview Pt. 1 11/3/11", - "description": "Louis C.K. got starstruck by George W. Bush, so what? Part one." - } - }, - { - "name": "XHamster", - "url": "http://xhamster.com/movies/1509445/femaleagent_shy_beauty_takes_the_bait.html", - "file": "1509445.flv", - "md5": "9f48e0e8d58e3076bb236ff412ab62fa", - "info_dict": { - "upload_date": "20121014", - "uploader_id": "Ruseful2011", - "title": "FemaleAgent Shy beauty takes the bait" - } - }, - { - "name": "Hypem", - "url": "http://hypem.com/track/1v6ga/BODYWORK+-+TAME", - "file": "1v6ga.mp3", - "md5": "b9cc91b5af8995e9f0c1cee04c575828", - "info_dict":{ - "title":"Tame" - } - }, - { - "name": "Vbox7", - "url": "http://vbox7.com/play:249bb972c2", - "file": "249bb972c2.flv", - "md5": "9c70d6d956f888bdc08c124acc120cfe", - "info_dict":{ - "title":"Смях! Чудо - чист за секунди - Скрита камера" - } - }, - { - "name": "Gametrailers", - "url": "http://www.gametrailers.com/videos/zbvr8i/mirror-s-edge-2-e3-2013--debut-trailer", - "file": "zbvr8i.flv", - "md5": "c3edbc995ab4081976e16779bd96a878", - "info_dict": { - "title": "E3 2013: Debut Trailer" - }, - "skip": "Requires rtmpdump" - }, - { - "name": "Statigram", - "url": "http://statigr.am/p/484091715184808010_284179915", - "file": "484091715184808010_284179915.mp4", - "md5": "deda4ff333abe2e118740321e992605b", - "info_dict": { - "uploader_id": "videoseconds", - "title": "Instagram photo by @videoseconds (Videos)" - } - }, - { - "name": "Break", - "url": "http://www.break.com/video/when-girls-act-like-guys-2468056", - "file": "2468056.mp4", - "md5": "a3513fb1547fba4fb6cfac1bffc6c46b", - "info_dict": { - "title": "When Girls Act Like D-Bags" - } - }, - { - "name": "Vevo", - "url": "http://www.vevo.com/watch/hurts/somebody-to-die-for/GB1101300280", - "file": "GB1101300280.mp4", - "md5": "06bea460acb744eab74a9d7dcb4bfd61", - "info_dict": { - "title": "Somebody To Die For", - "upload_date": "20130624", - "uploader": "Hurts" - } - }, - { - "name": "Tudou", - "url": "http://www.tudou.com/listplay/zzdE77v6Mmo/2xN2duXMxmw.html", - "file": "159447792.f4v", - "md5": "ad7c358a01541e926a1e413612c6b10a", - "info_dict": { - "title": "卡马乔国足开大脚长传冲吊集锦" - } - }, - { - "name": "CSpan", - "url": "http://www.c-spanvideo.org/program/HolderonV", - "file": "315139.flv", - "md5": "74a623266956f69e4df0068ab6c80fe4", - "info_dict": { - "title": "Attorney General Eric Holder on Voting Rights Act Decision" - }, - "skip": "Requires rtmpdump" - }, - { - "name": "Wimp", - "url": "http://www.wimp.com/deerfence/", - "file": "deerfence.flv", - "md5": "8b215e2e0168c6081a1cf84b2846a2b5", - "info_dict": { - "title": "Watch Till End: Herd of deer jump over a fence." - } - } -] diff --git a/youtube-dl b/youtube-dl index 876dea94ca6600f774ed42e2755cc662a9d1afc8..4ddbeccf5cd09981c234ab44431a355006bd930d 100755 GIT binary patch delta 116525 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%0D!Yjh;=6Ysl&i102ko(*eyV&CD+dpi8XZNmP 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%0Ay#0RmvH2mNy6?m{G+dH6LOvf@W3t%~sFHJuQ0 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 Okpu#Q1`1fNApQrS=W3k* delta 94650 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 x;oW;N6om@d-_J|#exh^@aP{XgcolOO;9 diff --git a/youtube-dl.1 b/youtube-dl.1 index 0ac019f..001c05e 100644 --- a/youtube-dl.1 +++ b/youtube-dl.1 @@ -22,19 +22,13 @@ redistribute it or use it however you like. \-\-version\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ print\ program\ version\ and\ exit \-U,\ \-\-update\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ update\ this\ program\ to\ latest\ version \-i,\ \-\-ignore\-errors\ \ \ \ \ \ \ \ continue\ on\ download\ errors -\-r,\ \-\-rate\-limit\ LIMIT\ \ \ \ \ maximum\ download\ rate\ (e.g.\ 50k\ or\ 44.6m) -\-R,\ \-\-retries\ RETRIES\ \ \ \ \ \ number\ of\ retries\ (default\ is\ 10) -\-\-buffer\-size\ SIZE\ \ \ \ \ \ \ \ \ size\ of\ download\ buffer\ (e.g.\ 1024\ or\ 16k) -\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ (default\ is\ 1024) -\-\-no\-resize\-buffer\ \ \ \ \ \ \ \ \ do\ not\ automatically\ adjust\ the\ buffer\ size.\ By -\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ default,\ the\ buffer\ size\ is\ automatically\ resized -\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ from\ an\ initial\ value\ of\ SIZE. \-\-dump\-user\-agent\ \ \ \ \ \ \ \ \ \ display\ the\ current\ browser\ identification \-\-user\-agent\ UA\ \ \ \ \ \ \ \ \ \ \ \ specify\ a\ custom\ user\ agent \-\-referer\ REF\ \ \ \ \ \ \ \ \ \ \ \ \ \ specify\ a\ custom\ referer,\ use\ if\ the\ video\ access \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ is\ restricted\ to\ one\ domain \-\-list\-extractors\ \ \ \ \ \ \ \ \ \ List\ all\ supported\ extractors\ and\ the\ URLs\ they \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ would\ handle +\-\-extractor\-descriptions\ \ \ Output\ descriptions\ of\ all\ supported\ extractors \-\-proxy\ URL\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ Use\ the\ specified\ HTTP/HTTPS\ proxy \-\-no\-check\-certificate\ \ \ \ \ Suppress\ HTTPS\ certificate\ validation. \f[] @@ -59,6 +53,19 @@ redistribute it or use it however you like. \-\-dateafter\ DATE\ \ \ \ \ \ \ \ \ \ \ download\ only\ videos\ uploaded\ after\ this\ date \f[] .fi +.SS Download Options: +.IP +.nf +\f[C] +\-r,\ \-\-rate\-limit\ LIMIT\ \ \ \ \ maximum\ download\ rate\ (e.g.\ 50k\ or\ 44.6m) +\-R,\ \-\-retries\ RETRIES\ \ \ \ \ \ number\ of\ retries\ (default\ is\ 10) +\-\-buffer\-size\ SIZE\ \ \ \ \ \ \ \ \ size\ of\ download\ buffer\ (e.g.\ 1024\ or\ 16k) +\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ (default\ is\ 1024) +\-\-no\-resize\-buffer\ \ \ \ \ \ \ \ \ do\ not\ automatically\ adjust\ the\ buffer\ size.\ By +\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ default,\ the\ buffer\ size\ is\ automatically\ resized +\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ from\ an\ initial\ value\ of\ SIZE. +\f[] +.fi .SS Filesystem Options: .IP .nf @@ -225,9 +232,7 @@ video. \f[C]playlist_index\f[]: The index of the video in the playlist, a five\-digit number. .PP -The current default template is \f[C]%(id)s.%(ext)s\f[], but that will -be switchted to \f[C]%(title)s\-%(id)s.%(ext)s\f[] (which can be -requested with \f[C]\-t\f[] at the moment). +The current default template is \f[C]%(title)s\-%(id)s.%(ext)s\f[]. .PP In some cases, you don\[aq]t want special characters such as 中, spaces, or &, such as when transferring the downloaded filename to a Windows @@ -269,18 +274,17 @@ $\ youtube\-dl\ \-\-dateafter\ 20000101\ \-\-datebefore\ 20100101\ #will\ only\ Most people asking this question are not aware that youtube\-dl now defaults to downloading the highest available quality as reported by YouTube, which will be 1080p or 720p in some cases, so you no longer -need the \-b option. +need the \f[C]\-b\f[] option. For some specific videos, maybe YouTube does not report them to be -available in a specific high quality format you\[aq]\[aq]re interested -in. -In that case, simply request it with the \-f option and youtube\-dl will -try to download it. +available in a specific high quality format you\[aq]re interested in. +In that case, simply request it with the \f[C]\-f\f[] option and +youtube\-dl will try to download it. .SS I get HTTP error 402 when trying to download a video. What\[aq]s this? .PP Apparently YouTube requires you to pass a CAPTCHA test if you download too much. -We\[aq]\[aq]re considering to provide a way to let you solve the +We\[aq]re considering to provide a way to let you solve the CAPTCHA (https://github.com/rg3/youtube-dl/issues/154), but at the moment, your best course of action is pointing a webbrowser to the youtube URL, solving the CAPTCHA, and restart youtube\-dl. diff --git a/youtube-dl.bash-completion b/youtube-dl.bash-completion index a3e9bdf..fd12ce8 100644 --- a/youtube-dl.bash-completion +++ b/youtube-dl.bash-completion @@ -3,7 +3,7 @@ __youtube-dl() local cur prev opts COMPREPLY=() cur="${COMP_WORDS[COMP_CWORD]}" - opts="--help --version --update --ignore-errors --rate-limit --retries --buffer-size --no-resize-buffer --dump-user-agent --user-agent --referer --list-extractors --proxy --no-check-certificate --test --playlist-start --playlist-end --match-title --reject-title --max-downloads --min-filesize --max-filesize --date --datebefore --dateafter --title --id --literal --auto-number --output --autonumber-size --restrict-filenames --batch-file --no-overwrites --continue --no-continue --cookies --no-part --no-mtime --write-description --write-info-json --write-thumbnail --quiet --simulate --skip-download --get-url --get-title --get-id --get-thumbnail --get-description --get-filename --get-format --newline --no-progress --console-title --verbose --dump-intermediate-pages --format --all-formats --prefer-free-formats --max-quality --list-formats --write-sub --write-auto-sub --only-sub --all-subs --list-subs --sub-format --sub-lang --username --password --netrc --video-password --extract-audio --audio-format --audio-quality --recode-video --keep-video --no-post-overwrites" + opts="--help --version --update --ignore-errors --dump-user-agent --user-agent --referer --list-extractors --extractor-descriptions --proxy --no-check-certificate --playlist-start --playlist-end --match-title --reject-title --max-downloads --min-filesize --max-filesize --date --datebefore --dateafter --rate-limit --retries --buffer-size --no-resize-buffer --test --title --id --literal --auto-number --output --autonumber-size --restrict-filenames --batch-file --no-overwrites --continue --no-continue --cookies --no-part --no-mtime --write-description --write-info-json --write-thumbnail --quiet --simulate --skip-download --get-url --get-title --get-id --get-thumbnail --get-description --get-filename --get-format --newline --no-progress --console-title --verbose --dump-intermediate-pages --format --all-formats --prefer-free-formats --max-quality --list-formats --write-sub --write-auto-sub --only-sub --all-subs --list-subs --sub-format --sub-lang --username --password --netrc --video-password --extract-audio --audio-format --audio-quality --recode-video --keep-video --no-post-overwrites" if [[ ${cur} == * ]] ; then COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) ) diff --git a/youtube_dl/YoutubeDL.py b/youtube_dl/YoutubeDL.py index 9931c98..d3281fe 100644 --- a/youtube_dl/YoutubeDL.py +++ b/youtube_dl/YoutubeDL.py @@ -13,7 +13,7 @@ import time import traceback from .utils import * -from .extractor import get_info_extractor +from .extractor import get_info_extractor, gen_extractors from .FileDownloader import FileDownloader @@ -113,6 +113,13 @@ class YoutubeDL(object): self._ies.append(ie) ie.set_downloader(self) + def add_default_info_extractors(self): + """ + Add the InfoExtractors returned by gen_extractors to the end of the list + """ + for ie in gen_extractors(): + self.add_info_extractor(ie) + def add_post_processor(self, pp): """Add a PostProcessor object to the end of the chain.""" self._pps.append(pp) diff --git a/youtube_dl/__init__.py b/youtube_dl/__init__.py index 6a8fc5e..db63d0a 100644 --- a/youtube_dl/__init__.py +++ b/youtube_dl/__init__.py @@ -26,7 +26,8 @@ __authors__ = ( 'Julien Fraichard', 'Johny Mo Swag', 'Axel Noack', - ) + 'Albert Kim', +) __license__ = 'Public Domain' @@ -34,6 +35,7 @@ import codecs import getpass import optparse import os +import random import re import shlex import socket @@ -117,6 +119,7 @@ def parseOpts(overrideArguments=None): selection = optparse.OptionGroup(parser, 'Video Selection') authentication = optparse.OptionGroup(parser, 'Authentication Options') video_format = optparse.OptionGroup(parser, 'Video Format Options') + downloader = optparse.OptionGroup(parser, 'Download Options') postproc = optparse.OptionGroup(parser, 'Post-processing Options') filesystem = optparse.OptionGroup(parser, 'Filesystem Options') verbosity = optparse.OptionGroup(parser, 'Verbosity / Simulation Options') @@ -129,15 +132,6 @@ def parseOpts(overrideArguments=None): action='store_true', dest='update_self', help='update this program to latest version') general.add_option('-i', '--ignore-errors', action='store_true', dest='ignoreerrors', help='continue on download errors', default=False) - general.add_option('-r', '--rate-limit', - dest='ratelimit', metavar='LIMIT', help='maximum download rate (e.g. 50k or 44.6m)') - general.add_option('-R', '--retries', - dest='retries', metavar='RETRIES', help='number of retries (default is %default)', default=10) - general.add_option('--buffer-size', - dest='buffersize', metavar='SIZE', help='size of download buffer (e.g. 1024 or 16k) (default is %default)', default="1024") - general.add_option('--no-resize-buffer', - action='store_true', dest='noresizebuffer', - help='do not automatically adjust the buffer size. By default, the buffer size is automatically resized from an initial value of SIZE.', default=False) general.add_option('--dump-user-agent', action='store_true', dest='dump_user_agent', help='display the current browser identification', default=False) @@ -149,9 +143,12 @@ def parseOpts(overrideArguments=None): general.add_option('--list-extractors', action='store_true', dest='list_extractors', help='List all supported extractors and the URLs they would handle', default=False) + general.add_option('--extractor-descriptions', + action='store_true', dest='list_extractor_descriptions', + help='Output descriptions of all supported extractors', default=False) general.add_option('--proxy', dest='proxy', default=None, help='Use the specified HTTP/HTTPS proxy', metavar='URL') general.add_option('--no-check-certificate', action='store_true', dest='no_check_certificate', default=False, help='Suppress HTTPS certificate validation.') - general.add_option('--test', action='store_true', dest='test', default=False, help=optparse.SUPPRESS_HELP) + selection.add_option('--playlist-start', dest='playliststart', metavar='NUMBER', help='playlist video to start at (default is %default)', default=1) @@ -210,6 +207,17 @@ def parseOpts(overrideArguments=None): action='store', dest='subtitleslang', metavar='LANG', help='language of the subtitles to download (optional) use IETF language tags like \'en\'') + downloader.add_option('-r', '--rate-limit', + dest='ratelimit', metavar='LIMIT', help='maximum download rate (e.g. 50k or 44.6m)') + downloader.add_option('-R', '--retries', + dest='retries', metavar='RETRIES', help='number of retries (default is %default)', default=10) + downloader.add_option('--buffer-size', + dest='buffersize', metavar='SIZE', help='size of download buffer (e.g. 1024 or 16k) (default is %default)', default="1024") + downloader.add_option('--no-resize-buffer', + action='store_true', dest='noresizebuffer', + help='do not automatically adjust the buffer size. By default, the buffer size is automatically resized from an initial value of SIZE.', default=False) + downloader.add_option('--test', action='store_true', dest='test', default=False, help=optparse.SUPPRESS_HELP) + verbosity.add_option('-q', '--quiet', action='store_true', dest='quiet', help='activates quiet mode', default=False) verbosity.add_option('-s', '--simulate', @@ -316,6 +324,7 @@ def parseOpts(overrideArguments=None): parser.add_option_group(general) parser.add_option_group(selection) + parser.add_option_group(downloader) parser.add_option_group(filesystem) parser.add_option_group(verbosity) parser.add_option_group(video_format) @@ -415,13 +424,25 @@ def _real_main(argv=None): extractors = gen_extractors() if opts.list_extractors: - for ie in extractors: + for ie in sorted(extractors, key=lambda ie: ie.IE_NAME.lower()): compat_print(ie.IE_NAME + (' (CURRENTLY BROKEN)' if not ie._WORKING else '')) matchedUrls = [url for url in all_urls if ie.suitable(url)] all_urls = [url for url in all_urls if url not in matchedUrls] for mu in matchedUrls: compat_print(u' ' + mu) sys.exit(0) + if opts.list_extractor_descriptions: + for ie in sorted(extractors, key=lambda ie: ie.IE_NAME.lower()): + if not ie._WORKING: + continue + desc = getattr(ie, 'IE_DESC', ie.IE_NAME) + if hasattr(ie, 'SEARCH_KEY'): + _SEARCHES = (u'cute kittens', u'slithering pythons', u'falling cat', u'angry poodle', u'purple fish', u'running tortoise') + _COUNTS = (u'', u'5', u'10', u'all') + desc += u' (Example: "%s%s:%s" )' % (ie.SEARCH_KEY, random.choice(_COUNTS), random.choice(_SEARCHES)) + compat_print(desc) + sys.exit(0) + # Conflicting, missing and erroneous options if opts.usenetrc and (opts.username is not None or opts.password is not None): @@ -561,19 +582,20 @@ def _real_main(argv=None): if opts.verbose: ydl.to_screen(u'[debug] youtube-dl version ' + __version__) try: - sp = subprocess.Popen(['git', 'rev-parse', '--short', 'HEAD'], stdout=subprocess.PIPE, stderr=subprocess.PIPE, - cwd=os.path.dirname(os.path.abspath(__file__))) + sp = subprocess.Popen( + ['git', 'rev-parse', '--short', 'HEAD'], + stdout=subprocess.PIPE, stderr=subprocess.PIPE, + cwd=os.path.dirname(os.path.abspath(__file__))) out, err = sp.communicate() out = out.decode().strip() if re.match('[0-9a-f]+', out): ydl.to_screen(u'[debug] Git HEAD: ' + out) except: - pass + sys.exc_clear() ydl.to_screen(u'[debug] Python version %s - %s' %(platform.python_version(), platform.platform())) ydl.to_screen(u'[debug] Proxy map: ' + str(proxy_handler.proxies)) - for extractor in extractors: - ydl.add_info_extractor(extractor) + ydl.add_default_info_extractors() # PostProcessors if opts.extractaudio: diff --git a/youtube_dl/extractor/__init__.py b/youtube_dl/extractor/__init__.py index 2750fc8..41efc57 100644 --- a/youtube_dl/extractor/__init__.py +++ b/youtube_dl/extractor/__init__.py @@ -1,6 +1,7 @@ from .ard import ARDIE from .arte import ArteTvIE +from .auengine import AUEngineIE from .bandcamp import BandcampIE from .bliptv import BlipTVIE, BlipTVUserIE from .breakcom import BreakIE @@ -14,14 +15,17 @@ from .escapist import EscapistIE from .facebook import FacebookIE from .flickr import FlickrIE from .funnyordie import FunnyOrDieIE +from .gamespot import GameSpotIE from .gametrailers import GametrailersIE from .generic import GenericIE from .googleplus import GooglePlusIE from .googlesearch import GoogleSearchIE +from .hotnewhiphop import HotNewHipHopIE from .howcast import HowcastIE from .hypem import HypemIE from .ina import InaIE from .infoq import InfoQIE +from .instagram import InstagramIE from .jukebox import JukeboxIE from .justintv import JustinTVIE from .keek import KeekIE @@ -36,6 +40,7 @@ from .photobucket import PhotobucketIE from .pornotube import PornotubeIE from .rbmaradio import RBMARadioIE from .redtube import RedTubeIE +from .ringtv import RingTVIE from .soundcloud import SoundcloudIE, SoundcloudSetIE from .spiegel import SpiegelIE from .stanfordoc import StanfordOpenClassroomIE @@ -43,13 +48,17 @@ from .statigram import StatigramIE from .steam import SteamIE from .teamcoco import TeamcocoIE from .ted import TEDIE +from .tf1 import TF1IE +from .traileraddict import TrailerAddictIE from .tudou import TudouIE from .tumblr import TumblrIE +from .tutv import TutvIE from .ustream import UstreamIE from .vbox7 import Vbox7IE from .vevo import VevoIE from .vimeo import VimeoIE from .vine import VineIE +from .wat import WatIE from .wimp import WimpIE from .worldstarhiphop import WorldStarHipHopIE from .xhamster import XHamsterIE @@ -59,85 +68,22 @@ from .yahoo import YahooIE, YahooSearchIE from .youjizz import YouJizzIE from .youku import YoukuIE from .youporn import YouPornIE -from .youtube import YoutubeIE, YoutubePlaylistIE, YoutubeSearchIE, YoutubeUserIE, YoutubeChannelIE +from .youtube import YoutubeIE, YoutubePlaylistIE, YoutubeSearchIE, YoutubeUserIE, YoutubeChannelIE, YoutubeShowIE from .zdf import ZDFIE +_ALL_CLASSES = [ + klass + for name, klass in globals().items() + if name.endswith('IE') and name != 'GenericIE' +] +_ALL_CLASSES.append(GenericIE) + def gen_extractors(): """ Return a list of an instance of every supported extractor. The order does matter; the first extractor matched is the one handling the URL. """ - return [ - YoutubePlaylistIE(), - YoutubeChannelIE(), - YoutubeUserIE(), - YoutubeSearchIE(), - YoutubeIE(), - MetacafeIE(), - DailymotionIE(), - GoogleSearchIE(), - PhotobucketIE(), - YahooIE(), - YahooSearchIE(), - DepositFilesIE(), - FacebookIE(), - BlipTVIE(), - BlipTVUserIE(), - VimeoIE(), - MyVideoIE(), - ComedyCentralIE(), - EscapistIE(), - CollegeHumorIE(), - XVideosIE(), - SoundcloudSetIE(), - SoundcloudIE(), - InfoQIE(), - MixcloudIE(), - StanfordOpenClassroomIE(), - MTVIE(), - YoukuIE(), - XNXXIE(), - YouJizzIE(), - PornotubeIE(), - YouPornIE(), - GooglePlusIE(), - ArteTvIE(), - NBAIE(), - WorldStarHipHopIE(), - JustinTVIE(), - FunnyOrDieIE(), - SteamIE(), - UstreamIE(), - RBMARadioIE(), - EightTracksIE(), - KeekIE(), - TEDIE(), - MySpassIE(), - SpiegelIE(), - LiveLeakIE(), - ARDIE(), - ZDFIE(), - TumblrIE(), - BandcampIE(), - RedTubeIE(), - InaIE(), - HowcastIE(), - VineIE(), - FlickrIE(), - TeamcocoIE(), - XHamsterIE(), - HypemIE(), - Vbox7IE(), - GametrailersIE(), - StatigramIE(), - BreakIE(), - VevoIE(), - JukeboxIE(), - TudouIE(), - CSpanIE(), - WimpIE(), - GenericIE() - ] + return [klass() for klass in _ALL_CLASSES] def get_info_extractor(ie_name): """Returns the info extractor class with the given ie_name""" diff --git a/youtube_dl/extractor/ard.py b/youtube_dl/extractor/ard.py index e1ecdf4..5793a41 100644 --- a/youtube_dl/extractor/ard.py +++ b/youtube_dl/extractor/ard.py @@ -9,6 +9,15 @@ class ARDIE(InfoExtractor): _VALID_URL = r'^(?:https?://)?(?:(?:www\.)?ardmediathek\.de|mediathek\.daserste\.de)/(?:.*/)(?P[^/\?]+)(?:\?.*)?' _TITLE = r'(?P.*)</h1>' _MEDIA_STREAM = r'mediaCollection\.addMediaStream\((?P<media_type>\d+), (?P<quality>\d+), "(?P<rtmp_url>[^"]*)", "(?P<video_url>[^"]*)", "[^"]*"\)' + _TEST = { + u'url': u'http://www.ardmediathek.de/das-erste/tagesschau-in-100-sek?documentId=14077640', + u'file': u'14077640.mp4', + u'md5': u'6ca8824255460c787376353f9e20bbd8', + u'info_dict': { + u"title": u"11.04.2013 09:23 Uhr - Tagesschau in 100 Sekunden" + }, + u'skip': u'Requires rtmpdump' + } def _real_extract(self, url): # determine video id from url diff --git a/youtube_dl/extractor/arte.py b/youtube_dl/extractor/arte.py index b061b95..183274e 100644 --- a/youtube_dl/extractor/arte.py +++ b/youtube_dl/extractor/arte.py @@ -11,11 +11,21 @@ from ..utils import ( ) class ArteTvIE(InfoExtractor): - _VALID_URL = r'(?:http://)?www\.arte.tv/guide/(?:fr|de)/(?:(?:sendungen|emissions)/)?(?P<id>.*?)/(?P<name>.*?)(\?.*)?' + """ + There are two sources of video in arte.tv: videos.arte.tv and + www.arte.tv/guide, the extraction process is different for each one. + The videos expire in 7 days, so we can't add tests. + """ + _EMISSION_URL = r'(?:http://)?www\.arte.tv/guide/(?:fr|de)/(?:(?:sendungen|emissions)/)?(?P<id>.*?)/(?P<name>.*?)(\?.*)?' + _VIDEOS_URL = r'(?:http://)?videos.arte.tv/(?:fr|de)/.*-(?P<id>.*?).html' _LIVE_URL = r'index-[0-9]+\.html$' IE_NAME = u'arte.tv' + @classmethod + def suitable(cls, url): + return any(re.match(regex, url) for regex in (cls._EMISSION_URL, cls._VIDEOS_URL)) + # TODO implement Live Stream # def extractLiveStream(self, url): # video_lang = url.split('/')[-4] @@ -44,17 +54,26 @@ class ArteTvIE(InfoExtractor): # video_url = u'%s/%s' % (info.get('url'), info.get('path')) def _real_extract(self, url): - mobj = re.match(self._VALID_URL, url) - name = mobj.group('name') - # This is not a real id, it can be for example AJT for the news - # http://www.arte.tv/guide/fr/emissions/AJT/arte-journal - video_id = mobj.group('id') + mobj = re.match(self._EMISSION_URL, url) + if mobj is not None: + name = mobj.group('name') + # This is not a real id, it can be for example AJT for the news + # http://www.arte.tv/guide/fr/emissions/AJT/arte-journal + video_id = mobj.group('id') + return self._extract_emission(url, video_id) + + mobj = re.match(self._VIDEOS_URL, url) + if mobj is not None: + id = mobj.group('id') + return self._extract_video(url, id) if re.search(self._LIVE_URL, video_id) is not None: raise ExtractorError(u'Arte live streams are not yet supported, sorry') # self.extractLiveStream(url) # return + def _extract_emission(self, url, video_id): + """Extract from www.arte.tv/guide""" webpage = self._download_webpage(url, video_id) json_url = self._html_search_regex(r'arte_vp_url="(.*?)"', webpage, 'json url') @@ -68,6 +87,7 @@ class ArteTvIE(InfoExtractor): 'description': player_info['VDE'], 'upload_date': unified_strdate(player_info['VDA'].split(' ')[0]), 'thumbnail': player_info['programImage'], + 'ext': 'flv', } formats = player_info['VSR'].values() @@ -78,9 +98,36 @@ class ArteTvIE(InfoExtractor): if format_info['mediaType'] == u'rtmp': info_dict['url'] = format_info['streamer'] info_dict['play_path'] = 'mp4:' + format_info['url'] - info_dict['ext'] = 'mp4' else: info_dict['url'] = format_info['url'] - info_dict['ext'] = 'mp4' return info_dict + + def _extract_video(self, url, video_id): + """Extract from videos.arte.tv""" + config_xml_url = url.replace('/videos/', '/do_delegate/videos/') + config_xml_url = config_xml_url.replace('.html', ',view,asPlayerXml.xml') + config_xml = self._download_webpage(config_xml_url, video_id) + config_xml_url = self._html_search_regex(r'<video lang=".*?" ref="(.*?)"', config_xml, 'config xml url') + config_xml = self._download_webpage(config_xml_url, video_id) + + video_urls = list(re.finditer(r'<url quality="(?P<quality>.*?)">(?P<url>.*?)</url>', config_xml)) + def _key(m): + quality = m.group('quality') + if quality == 'hd': + return 2 + else: + return 1 + # We pick the best quality + video_urls = sorted(video_urls, key=_key) + video_url = list(video_urls)[-1].group('url') + + title = self._html_search_regex(r'<name>(.*?)</name>', config_xml, 'title') + thumbnail = self._html_search_regex(r'<firstThumbnailUrl>(.*?)</firstThumbnailUrl>', + config_xml, 'thumbnail') + return {'id': video_id, + 'title': title, + 'thumbnail': thumbnail, + 'url': video_url, + 'ext': 'flv', + } diff --git a/youtube_dl/extractor/auengine.py b/youtube_dl/extractor/auengine.py new file mode 100644 index 0000000..3b4ade3 --- /dev/null +++ b/youtube_dl/extractor/auengine.py @@ -0,0 +1,38 @@ +import os.path +import re + +from .common import InfoExtractor +from ..utils import ( + compat_urllib_parse, + compat_urllib_parse_urlparse, +) + +class AUEngineIE(InfoExtractor): + _VALID_URL = r'(?:http://)?(?:www\.)?auengine\.com/embed.php\?.*?file=([^&]+).*?' + + def _real_extract(self, url): + mobj = re.match(self._VALID_URL, url) + video_id = mobj.group(1) + webpage = self._download_webpage(url, video_id) + title = self._html_search_regex(r'<title>(?P<title>.+?)', + webpage, u'title') + title = title.strip() + links = re.findall(r'[^A-Za-z0-9]?(?:file|url):\s*["\'](http[^\'"&]*)', webpage) + links = [compat_urllib_parse.unquote(l) for l in links] + for link in links: + root, pathext = os.path.splitext(compat_urllib_parse_urlparse(link).path) + if pathext == '.png': + thumbnail = link + elif pathext == '.mp4': + url = link + ext = pathext + if ext == title[-len(ext):]: + title = title[:-len(ext)] + ext = ext[1:] + return [{ + 'id': video_id, + 'url': url, + 'ext': ext, + 'title': title, + 'thumbnail': thumbnail, + }] diff --git a/youtube_dl/extractor/bandcamp.py b/youtube_dl/extractor/bandcamp.py index dcf6721..129a20f 100644 --- a/youtube_dl/extractor/bandcamp.py +++ b/youtube_dl/extractor/bandcamp.py @@ -9,6 +9,15 @@ from ..utils import ( class BandcampIE(InfoExtractor): _VALID_URL = r'http://.*?\.bandcamp\.com/track/(?P.*)' + _TEST = { + u'url': u'http://youtube-dl.bandcamp.com/track/youtube-dl-test-song', + u'file': u'1812978515.mp3', + u'md5': u'cdeb30cdae1921719a3cbcab696ef53c', + u'info_dict': { + u"title": u"youtube-dl test song \"'/\\\u00e4\u21ad" + }, + u'skip': u'There is a limit of 200 free downloads / month for the test song' + } def _real_extract(self, url): mobj = re.match(self._VALID_URL, url) diff --git a/youtube_dl/extractor/bliptv.py b/youtube_dl/extractor/bliptv.py index df2ad4b..37141e6 100644 --- a/youtube_dl/extractor/bliptv.py +++ b/youtube_dl/extractor/bliptv.py @@ -24,6 +24,17 @@ class BlipTVIE(InfoExtractor): _VALID_URL = r'^(?:https?://)?(?:\w+\.)?blip\.tv/((.+/)|(play/)|(api\.swf#))(.+)$' _URL_EXT = r'^.*\.([a-z0-9]+)$' IE_NAME = u'blip.tv' + _TEST = { + u'url': u'http://blip.tv/cbr/cbr-exclusive-gotham-city-imposters-bats-vs-jokerz-short-3-5796352', + u'file': u'5779306.m4v', + u'md5': u'b2d849efcf7ee18917e4b4d9ff37cafe', + u'info_dict': { + u"upload_date": u"20111205", + u"description": u"md5:9bc31f227219cde65e47eeec8d2dc596", + u"uploader": u"Comic Book Resources - CBR TV", + u"title": u"CBR EXCLUSIVE: \"Gotham City Imposters\" Bats VS Jokerz Short 3" + } + } def report_direct_download(self, title): """Report information extraction.""" diff --git a/youtube_dl/extractor/breakcom.py b/youtube_dl/extractor/breakcom.py index 1f6620d..34f555e 100644 --- a/youtube_dl/extractor/breakcom.py +++ b/youtube_dl/extractor/breakcom.py @@ -5,6 +5,14 @@ from .common import InfoExtractor class BreakIE(InfoExtractor): _VALID_URL = r'(?:http://)?(?:www\.)?break\.com/video/([^/]+)' + _TEST = { + u'url': u'http://www.break.com/video/when-girls-act-like-guys-2468056', + u'file': u'2468056.mp4', + u'md5': u'a3513fb1547fba4fb6cfac1bffc6c46b', + u'info_dict': { + u"title": u"When Girls Act Like D-Bags" + } + } def _real_extract(self, url): mobj = re.match(self._VALID_URL, url) diff --git a/youtube_dl/extractor/comedycentral.py b/youtube_dl/extractor/comedycentral.py index 6985e88..93d9e3d 100644 --- a/youtube_dl/extractor/comedycentral.py +++ b/youtube_dl/extractor/comedycentral.py @@ -12,8 +12,7 @@ from ..utils import ( class ComedyCentralIE(InfoExtractor): - """Information extractor for The Daily Show and Colbert Report """ - + IE_DESC = u'The Daily Show / Colbert Report' # urls can be abbreviations like :thedailyshow or :colbert # urls for episodes like: # or urls for clips like: http://www.thedailyshow.com/watch/mon-december-10-2012/any-given-gun-day @@ -27,6 +26,17 @@ class ComedyCentralIE(InfoExtractor): (the-colbert-report-(videos|collections)/(?P<clipID>[0-9]+)/[^/]*/(?P<cntitle>.*?)) |(watch/(?P<date>[^/]*)/(?P<tdstitle>.*))))) $""" + _TEST = { + u'url': u'http://www.thedailyshow.com/watch/thu-december-13-2012/kristen-stewart', + u'file': u'422212.mp4', + u'md5': u'4e2f5cb088a83cd8cdb7756132f9739d', + u'info_dict': { + u"upload_date": u"20121214", + u"description": u"Kristen Stewart", + u"uploader": u"thedailyshow", + u"title": u"thedailyshow-kristen-stewart part 1" + } + } _available_formats = ['3500', '2200', '1700', '1200', '750', '400'] diff --git a/youtube_dl/extractor/common.py b/youtube_dl/extractor/common.py index 64d63e1..655836f 100644 --- a/youtube_dl/extractor/common.py +++ b/youtube_dl/extractor/common.py @@ -44,6 +44,7 @@ class InfoExtractor(object): location: Physical location of the video. player_url: SWF Player URL (used for rtmpdump). subtitles: The subtitle file contents. + view_count: How many users have watched the video on the platform. urlhandle: [internal] The urlHandle to be used to download the file, like returned by urllib.request.urlopen @@ -262,3 +263,7 @@ class SearchInfoExtractor(InfoExtractor): def _get_n_results(self, query, n): """Get a specified number of results for a query""" raise NotImplementedError("This method must be implemented by sublclasses") + + @property + def SEARCH_KEY(self): + return self._SEARCH_KEY diff --git a/youtube_dl/extractor/cspan.py b/youtube_dl/extractor/cspan.py index 2246515..a485327 100644 --- a/youtube_dl/extractor/cspan.py +++ b/youtube_dl/extractor/cspan.py @@ -7,6 +7,15 @@ from ..utils import ( class CSpanIE(InfoExtractor): _VALID_URL = r'http://www.c-spanvideo.org/program/(.*)' + _TEST = { + u'url': u'http://www.c-spanvideo.org/program/HolderonV', + u'file': u'315139.flv', + u'md5': u'74a623266956f69e4df0068ab6c80fe4', + u'info_dict': { + u"title": u"Attorney General Eric Holder on Voting Rights Act Decision" + }, + u'skip': u'Requires rtmpdump' + } def _real_extract(self, url): mobj = re.match(self._VALID_URL, url) diff --git a/youtube_dl/extractor/dailymotion.py b/youtube_dl/extractor/dailymotion.py index 34306b0..3297a85 100644 --- a/youtube_dl/extractor/dailymotion.py +++ b/youtube_dl/extractor/dailymotion.py @@ -14,6 +14,15 @@ class DailymotionIE(InfoExtractor): _VALID_URL = r'(?i)(?:https?://)?(?:www\.)?dailymotion\.[a-z]{2,3}/video/([^/]+)' IE_NAME = u'dailymotion' + _TEST = { + u'url': u'http://www.dailymotion.com/video/x33vw9_tutoriel-de-youtubeur-dl-des-video_tech', + u'file': u'x33vw9.mp4', + u'md5': u'392c4b85a60a90dc4792da41ce3144eb', + u'info_dict': { + u"uploader": u"Alex and Van .", + u"title": u"Tutoriel de Youtubeur\"DL DES VIDEO DE YOUTUBE\"" + } + } def _real_extract(self, url): # Extract id and simplified title from URL diff --git a/youtube_dl/extractor/eighttracks.py b/youtube_dl/extractor/eighttracks.py index c3d4343..cced068 100644 --- a/youtube_dl/extractor/eighttracks.py +++ b/youtube_dl/extractor/eighttracks.py @@ -12,6 +12,77 @@ from ..utils import ( class EightTracksIE(InfoExtractor): IE_NAME = '8tracks' _VALID_URL = r'https?://8tracks.com/(?P<user>[^/]+)/(?P<id>[^/#]+)(?:#.*)?$' + _TEST = { + u"name": u"EightTracks", + u"url": u"http://8tracks.com/ytdl/youtube-dl-test-tracks-a", + u"playlist": [ + { + u"file": u"11885610.m4a", + u"md5": u"96ce57f24389fc8734ce47f4c1abcc55", + u"info_dict": { + u"title": u"youtue-dl project<>\"' - youtube-dl test track 1 \"'/\\\u00e4\u21ad", + u"uploader_id": u"ytdl" + } + }, + { + u"file": u"11885608.m4a", + u"md5": u"4ab26f05c1f7291ea460a3920be8021f", + u"info_dict": { + u"title": u"youtube-dl project - youtube-dl test track 2 \"'/\\\u00e4\u21ad", + u"uploader_id": u"ytdl" + } + }, + { + u"file": u"11885679.m4a", + u"md5": u"d30b5b5f74217410f4689605c35d1fd7", + u"info_dict": { + u"title": u"youtube-dl project as well - youtube-dl test track 3 \"'/\\\u00e4\u21ad", + u"uploader_id": u"ytdl" + } + }, + { + u"file": u"11885680.m4a", + u"md5": u"4eb0a669317cd725f6bbd336a29f923a", + u"info_dict": { + u"title": u"youtube-dl project as well - youtube-dl test track 4 \"'/\\\u00e4\u21ad", + u"uploader_id": u"ytdl" + } + }, + { + u"file": u"11885682.m4a", + u"md5": u"1893e872e263a2705558d1d319ad19e8", + u"info_dict": { + u"title": u"PH - youtube-dl test track 5 \"'/\\\u00e4\u21ad", + u"uploader_id": u"ytdl" + } + }, + { + u"file": u"11885683.m4a", + u"md5": u"b673c46f47a216ab1741ae8836af5899", + u"info_dict": { + u"title": u"PH - youtube-dl test track 6 \"'/\\\u00e4\u21ad", + u"uploader_id": u"ytdl" + } + }, + { + u"file": u"11885684.m4a", + u"md5": u"1d74534e95df54986da7f5abf7d842b7", + u"info_dict": { + u"title": u"phihag - youtube-dl test track 7 \"'/\\\u00e4\u21ad", + u"uploader_id": u"ytdl" + } + }, + { + u"file": u"11885685.m4a", + u"md5": u"f081f47af8f6ae782ed131d38b9cd1c0", + u"info_dict": { + u"title": u"phihag - youtube-dl test track 8 \"'/\\\u00e4\u21ad", + u"uploader_id": u"ytdl" + } + } + ] + } + def _real_extract(self, url): mobj = re.match(self._VALID_URL, url) diff --git a/youtube_dl/extractor/escapist.py b/youtube_dl/extractor/escapist.py index 86b145b..794460e 100644 --- a/youtube_dl/extractor/escapist.py +++ b/youtube_dl/extractor/escapist.py @@ -12,6 +12,16 @@ from ..utils import ( class EscapistIE(InfoExtractor): _VALID_URL = r'^(https?://)?(www\.)?escapistmagazine\.com/videos/view/(?P<showname>[^/]+)/(?P<episode>[^/?]+)[/?]?.*$' + _TEST = { + u'url': u'http://www.escapistmagazine.com/videos/view/the-escapist-presents/6618-Breaking-Down-Baldurs-Gate', + u'file': u'6618-Breaking-Down-Baldurs-Gate.mp4', + u'md5': u'c6793dbda81388f4264c1ba18684a74d', + u'info_dict': { + u"description": u"Baldur's Gate: Original, Modded or Enhanced Edition? I'll break down what you can expect from the new Baldur's Gate: Enhanced Edition.", + u"uploader": u"the-escapist-presents", + u"title": u"Breaking Down Baldur's Gate" + } + } def _real_extract(self, url): mobj = re.match(self._VALID_URL, url) diff --git a/youtube_dl/extractor/facebook.py b/youtube_dl/extractor/facebook.py index c694f9a..beaa5b4 100644 --- a/youtube_dl/extractor/facebook.py +++ b/youtube_dl/extractor/facebook.py @@ -22,6 +22,15 @@ class FacebookIE(InfoExtractor): _LOGIN_URL = 'https://login.facebook.com/login.php?m&next=http%3A%2F%2Fm.facebook.com%2Fhome.php&' _NETRC_MACHINE = 'facebook' IE_NAME = u'facebook' + _TEST = { + u'url': u'https://www.facebook.com/photo.php?v=120708114770723', + u'file': u'120708114770723.mp4', + u'md5': u'48975a41ccc4b7a581abd68651c1a5a8', + u'info_dict': { + u"duration": 279, + u"title": u"PEOPLE ARE AWESOME 2013" + } + } def report_login(self): """Report attempt to log in.""" diff --git a/youtube_dl/extractor/flickr.py b/youtube_dl/extractor/flickr.py index 791d5b6..bd97bff 100644 --- a/youtube_dl/extractor/flickr.py +++ b/youtube_dl/extractor/flickr.py @@ -10,6 +10,16 @@ from ..utils import ( class FlickrIE(InfoExtractor): """Information Extractor for Flickr videos""" _VALID_URL = r'(?:https?://)?(?:www\.)?flickr\.com/photos/(?P<uploader_id>[\w\-_@]+)/(?P<id>\d+).*' + _TEST = { + u'url': u'http://www.flickr.com/photos/forestwander-nature-pictures/5645318632/in/photostream/', + u'file': u'5645318632.mp4', + u'md5': u'6fdc01adbc89d72fc9c4f15b4a4ba87b', + u'info_dict': { + u"description": u"Waterfalls in the Springtime at Dark Hollow Waterfalls. These are located just off of Skyline Drive in Virginia. They are only about 6/10 of a mile hike but it is a pretty steep hill and a good climb back up.", + u"uploader_id": u"forestwander-nature-pictures", + u"title": u"Dark Hollow Waterfalls" + } + } def _real_extract(self, url): mobj = re.match(self._VALID_URL, url) diff --git a/youtube_dl/extractor/funnyordie.py b/youtube_dl/extractor/funnyordie.py index 3045978..388aacf 100644 --- a/youtube_dl/extractor/funnyordie.py +++ b/youtube_dl/extractor/funnyordie.py @@ -5,6 +5,15 @@ from .common import InfoExtractor class FunnyOrDieIE(InfoExtractor): _VALID_URL = r'^(?:https?://)?(?:www\.)?funnyordie\.com/videos/(?P<id>[0-9a-f]+)/.*$' + _TEST = { + u'url': u'http://www.funnyordie.com/videos/0732f586d7/heart-shaped-box-literal-video-version', + u'file': u'0732f586d7.mp4', + u'md5': u'f647e9e90064b53b6e046e75d0241fbd', + u'info_dict': { + u"description": u"Lyrics changed to match the video. Spoken cameo by Obscurus Lupa (from ThatGuyWithTheGlasses.com). Based on a concept by Dustin McLean (DustFilms.com). Performed, edited, and written by David A. Scott.", + u"title": u"Heart-Shaped Box: Literal Video Version" + } + } def _real_extract(self, url): mobj = re.match(self._VALID_URL, url) diff --git a/youtube_dl/extractor/gamespot.py b/youtube_dl/extractor/gamespot.py new file mode 100644 index 0000000..cec3b7a --- /dev/null +++ b/youtube_dl/extractor/gamespot.py @@ -0,0 +1,45 @@ +import re +import xml.etree.ElementTree + +from .common import InfoExtractor +from ..utils import ( + unified_strdate, +) + +class GameSpotIE(InfoExtractor): + _VALID_URL = r'(?:http://)?(?:www\.)?gamespot\.com/([^/]+)/videos/([^/]+)-([^/d]+)/' + _TEST = { + u"url": u"http://www.gamespot.com/arma-iii/videos/arma-iii-community-guide-sitrep-i-6410818/", + u"file": u"6410818.mp4", + u"md5": u"5569d64ca98db01f0177c934fe8c1e9b", + u"info_dict": { + u"title": u"Arma III - Community Guide: SITREP I", + u"upload_date": u"20130627", + } + } + + + def _real_extract(self, url): + mobj = re.match(self._VALID_URL, url) + video_id = mobj.group(3).split("-")[-1] + info_url = "http://www.gamespot.com/pages/video_player/xml.php?id="+str(video_id) + info_xml = self._download_webpage(info_url, video_id) + doc = xml.etree.ElementTree.fromstring(info_xml) + clip_el = doc.find('./playList/clip') + + video_url = clip_el.find('./URI').text + title = clip_el.find('./title').text + ext = video_url.rpartition('.')[2] + thumbnail_url = clip_el.find('./screenGrabURI').text + view_count = int(clip_el.find('./views').text) + upload_date = unified_strdate(clip_el.find('./postDate').text) + + return [{ + 'id' : video_id, + 'url' : video_url, + 'ext' : ext, + 'title' : title, + 'thumbnail' : thumbnail_url, + 'upload_date' : upload_date, + 'view_count' : view_count, + }] diff --git a/youtube_dl/extractor/gametrailers.py b/youtube_dl/extractor/gametrailers.py index 33e59e8..3ce93b4 100644 --- a/youtube_dl/extractor/gametrailers.py +++ b/youtube_dl/extractor/gametrailers.py @@ -9,6 +9,15 @@ from ..utils import ( class GametrailersIE(InfoExtractor): _VALID_URL = r'http://www.gametrailers.com/(?P<type>videos|reviews|full-episodes)/(?P<id>.*?)/(?P<title>.*)' + _TEST = { + u'url': u'http://www.gametrailers.com/videos/zbvr8i/mirror-s-edge-2-e3-2013--debut-trailer', + u'file': u'zbvr8i.flv', + u'md5': u'c3edbc995ab4081976e16779bd96a878', + u'info_dict': { + u"title": u"E3 2013: Debut Trailer" + }, + u'skip': u'Requires rtmpdump' + } def _real_extract(self, url): mobj = re.match(self._VALID_URL, url) diff --git a/youtube_dl/extractor/generic.py b/youtube_dl/extractor/generic.py index 7a877b3..20bc533 100644 --- a/youtube_dl/extractor/generic.py +++ b/youtube_dl/extractor/generic.py @@ -11,10 +11,18 @@ from ..utils import ( ) class GenericIE(InfoExtractor): - """Generic last-resort information extractor.""" - + IE_DESC = u'Generic downloader that works on some sites' _VALID_URL = r'.*' IE_NAME = u'generic' + _TEST = { + u'url': u'http://www.hodiho.fr/2013/02/regis-plante-sa-jeep.html', + u'file': u'13601338388002.mp4', + u'md5': u'85b90ccc9d73b4acd9138d3af4c27f89', + u'info_dict': { + u"uploader": u"www.hodiho.fr", + u"title": u"R\u00e9gis plante sa Jeep" + } + } def report_download_webpage(self, video_id): """Report webpage download.""" @@ -102,7 +110,7 @@ class GenericIE(InfoExtractor): mobj = re.search(r'[^A-Za-z0-9]?(?:file|source)=(http[^\'"&]*)', webpage) if mobj is None: # Broaden the search a little bit: JWPlayer JS loader - mobj = re.search(r'[^A-Za-z0-9]?file:\s*["\'](http[^\'"&]*)', webpage) + mobj = re.search(r'[^A-Za-z0-9]?file["\']?:\s*["\'](http[^\'"&]*)', webpage) if mobj is None: # Try to find twitter cards info mobj = re.search(r'<meta (?:property|name)="twitter:player:stream" (?:content|value)="(.+?)"', webpage) @@ -135,7 +143,7 @@ class GenericIE(InfoExtractor): # Video Title - Tagline | Site Name # and so on and so forth; it's just not practical video_title = self._html_search_regex(r'<title>(.*)', - webpage, u'video title') + webpage, u'video title', default=u'video', flags=re.DOTALL) # video uploader is domain name video_uploader = self._search_regex(r'(?:https?://)?([^/]*)/.*', diff --git a/youtube_dl/extractor/googleplus.py b/youtube_dl/extractor/googleplus.py index ff2cdee..9f7fc19 100644 --- a/youtube_dl/extractor/googleplus.py +++ b/youtube_dl/extractor/googleplus.py @@ -1,3 +1,5 @@ +# coding: utf-8 + import datetime import re @@ -8,10 +10,18 @@ from ..utils import ( class GooglePlusIE(InfoExtractor): - """Information extractor for plus.google.com.""" - + IE_DESC = u'Google Plus' _VALID_URL = r'(?:https://)?plus\.google\.com/(?:[^/]+/)*?posts/(\w+)' IE_NAME = u'plus.google' + _TEST = { + u"url": u"https://plus.google.com/u/0/108897254135232129896/posts/ZButuJc6CtH", + u"file": u"ZButuJc6CtH.flv", + u"info_dict": { + u"upload_date": u"20120613", + u"uploader": u"井上ヨシマサ", + u"title": u"嘆きの天使 降臨" + } + } def _real_extract(self, url): # Extract id from URL diff --git a/youtube_dl/extractor/googlesearch.py b/youtube_dl/extractor/googlesearch.py index 21c240e..f9c88e9 100644 --- a/youtube_dl/extractor/googlesearch.py +++ b/youtube_dl/extractor/googlesearch.py @@ -8,7 +8,7 @@ from ..utils import ( class GoogleSearchIE(SearchInfoExtractor): - """Information Extractor for Google Video search queries.""" + IE_DESC = u'Google Video search' _MORE_PAGES_INDICATOR = r'id="pnnext" class="pn"' _MAX_RESULTS = 1000 IE_NAME = u'video.google:search' diff --git a/youtube_dl/extractor/hotnewhiphop.py b/youtube_dl/extractor/hotnewhiphop.py new file mode 100644 index 0000000..ca3abb7 --- /dev/null +++ b/youtube_dl/extractor/hotnewhiphop.py @@ -0,0 +1,48 @@ +import re +import base64 + +from .common import InfoExtractor + + +class HotNewHipHopIE(InfoExtractor): + _VALID_URL = r'http://www\.hotnewhiphop.com/.*\.(?P.*)\.html' + _TEST = { + u'url': u"http://www.hotnewhiphop.com/freddie-gibbs-lay-it-down-song.1435540.html'", + u'file': u'1435540.mp3', + u'md5': u'2c2cd2f76ef11a9b3b581e8b232f3d96', + u'info_dict': { + u"title": u"Freddie Gibbs Songs - Lay It Down" + } + } + + def _real_extract(self, url): + m = re.match(self._VALID_URL, url) + video_id = m.group('id') + + webpage_src = self._download_webpage(url, video_id) + + video_url_base64 = self._search_regex(r'data-path="(.*?)"', + webpage_src, u'video URL', fatal=False) + + if video_url_base64 == None: + video_url = self._search_regex(r'"contentUrl" content="(.*?)"', webpage_src, + u'video URL') + return self.url_result(video_url, ie='Youtube') + + video_url = base64.b64decode(video_url_base64).decode('utf-8') + + video_title = self._html_search_regex(r"(.*)", + webpage_src, u'title') + + # Getting thumbnail and if not thumbnail sets correct title for WSHH candy video. + thumbnail = self._html_search_regex(r'"og:image" content="(.*)"', + webpage_src, u'thumbnail', fatal=False) + + results = [{ + 'id': video_id, + 'url' : video_url, + 'title' : video_title, + 'thumbnail' : thumbnail, + 'ext' : 'mp3', + }] + return results \ No newline at end of file diff --git a/youtube_dl/extractor/howcast.py b/youtube_dl/extractor/howcast.py index 7b94f85..6104c4b 100644 --- a/youtube_dl/extractor/howcast.py +++ b/youtube_dl/extractor/howcast.py @@ -5,6 +5,15 @@ from .common import InfoExtractor class HowcastIE(InfoExtractor): _VALID_URL = r'(?:https?://)?(?:www\.)?howcast\.com/videos/(?P\d+)' + _TEST = { + u'url': u'http://www.howcast.com/videos/390161-How-to-Tie-a-Square-Knot-Properly', + u'file': u'390161.mp4', + u'md5': u'1d7ba54e2c9d7dc6935ef39e00529138', + u'info_dict': { + u"description": u"The square knot, also known as the reef knot, is one of the oldest, most basic knots to tie, and can be used in many different ways. Here's the proper way to tie a square knot.", + u"title": u"How to Tie a Square Knot Properly" + } + } def _real_extract(self, url): mobj = re.match(self._VALID_URL, url) diff --git a/youtube_dl/extractor/hypem.py b/youtube_dl/extractor/hypem.py index ceec4f6..ab2b591 100644 --- a/youtube_dl/extractor/hypem.py +++ b/youtube_dl/extractor/hypem.py @@ -15,6 +15,14 @@ from ..utils import ( class HypemIE(InfoExtractor): """Information Extractor for hypem""" _VALID_URL = r'(?:http://)?(?:www\.)?hypem\.com/track/([^/]+)/([^/]+)' + _TEST = { + u'url': u'http://hypem.com/track/1v6ga/BODYWORK+-+TAME', + u'file': u'1v6ga.mp3', + u'md5': u'b9cc91b5af8995e9f0c1cee04c575828', + u'info_dict': { + u"title": u"Tame" + } + } def _real_extract(self, url): mobj = re.match(self._VALID_URL, url) diff --git a/youtube_dl/extractor/ina.py b/youtube_dl/extractor/ina.py index c19b956..962c592 100644 --- a/youtube_dl/extractor/ina.py +++ b/youtube_dl/extractor/ina.py @@ -6,6 +6,14 @@ from .common import InfoExtractor class InaIE(InfoExtractor): """Information Extractor for Ina.fr""" _VALID_URL = r'(?:http://)?(?:www\.)?ina\.fr/video/(?PI[0-9]+)/.*' + _TEST = { + u'url': u'www.ina.fr/video/I12055569/francois-hollande-je-crois-que-c-est-clair-video.html', + u'file': u'I12055569.mp4', + u'md5': u'a667021bf2b41f8dc6049479d9bb38a3', + u'info_dict': { + u"title": u"Fran\u00e7ois Hollande \"Je crois que c'est clair\"" + } + } def _real_extract(self,url): mobj = re.match(self._VALID_URL, url) diff --git a/youtube_dl/extractor/infoq.py b/youtube_dl/extractor/infoq.py index 9056742..c79c589 100644 --- a/youtube_dl/extractor/infoq.py +++ b/youtube_dl/extractor/infoq.py @@ -11,6 +11,18 @@ from ..utils import ( class InfoQIE(InfoExtractor): _VALID_URL = r'^(?:https?://)?(?:www\.)?infoq\.com/[^/]+/[^/]+$' + _TEST = { + u"name": u"InfoQ", + u"url": u"http://www.infoq.com/presentations/A-Few-of-My-Favorite-Python-Things", + u"file": u"12-jan-pythonthings.mp4", + u"info_dict": { + u"description": u"Mike Pirnat presents some tips and tricks, standard libraries and third party packages that make programming in Python a richer experience.", + u"title": u"A Few of My Favorite [Python] Things" + }, + u"params": { + u"skip_download": True + } + } def _real_extract(self, url): mobj = re.match(self._VALID_URL, url) diff --git a/youtube_dl/extractor/instagram.py b/youtube_dl/extractor/instagram.py new file mode 100644 index 0000000..6ae704e --- /dev/null +++ b/youtube_dl/extractor/instagram.py @@ -0,0 +1,42 @@ +import re + +from .common import InfoExtractor + +class InstagramIE(InfoExtractor): + _VALID_URL = r'(?:http://)?instagram.com/p/(.*?)/' + _TEST = { + u'url': u'http://instagram.com/p/aye83DjauH/#', + u'file': u'aye83DjauH.mp4', + u'md5': u'0d2da106a9d2631273e192b372806516', + u'info_dict': { + u"uploader_id": u"naomipq", + u"title": u"Video by naomipq" + } + } + + def _real_extract(self, url): + mobj = re.match(self._VALID_URL, url) + video_id = mobj.group(1) + webpage = self._download_webpage(url, video_id) + video_url = self._html_search_regex( + r'', + webpage, u'thumbnail URL', fatal=False) + html_title = self._html_search_regex( + r'(.+?)', + webpage, u'title', flags=re.DOTALL) + title = re.sub(u'(?: *\(Videos?\))? \u2022 Instagram$', '', html_title).strip() + uploader_id = self._html_search_regex(r'content="(.*?)\'s video on Instagram', + webpage, u'uploader name', fatal=False) + ext = 'mp4' + + return [{ + 'id': video_id, + 'url': video_url, + 'ext': ext, + 'title': title, + 'thumbnail': thumbnail_url, + 'uploader_id' : uploader_id + }] diff --git a/youtube_dl/extractor/justintv.py b/youtube_dl/extractor/justintv.py index b2006e3..f600179 100644 --- a/youtube_dl/extractor/justintv.py +++ b/youtube_dl/extractor/justintv.py @@ -26,6 +26,17 @@ class JustinTVIE(InfoExtractor): """ _JUSTIN_PAGE_LIMIT = 100 IE_NAME = u'justin.tv' + _TEST = { + u'url': u'http://www.twitch.tv/thegamedevhub/b/296128360', + u'file': u'296128360.flv', + u'md5': u'ecaa8a790c22a40770901460af191c9a', + u'info_dict': { + u"upload_date": u"20110927", + u"uploader_id": 25114803, + u"uploader": u"thegamedevhub", + u"title": u"Beginner Series - Scripting With Python Pt.1" + } + } def report_download_page(self, channel, offset): """Report attempt to download a single page of videos.""" diff --git a/youtube_dl/extractor/keek.py b/youtube_dl/extractor/keek.py index e2093a0..72ad6a3 100644 --- a/youtube_dl/extractor/keek.py +++ b/youtube_dl/extractor/keek.py @@ -6,6 +6,15 @@ from .common import InfoExtractor class KeekIE(InfoExtractor): _VALID_URL = r'http://(?:www\.)?keek\.com/(?:!|\w+/keeks/)(?P\w+)' IE_NAME = u'keek' + _TEST = { + u'url': u'http://www.keek.com/ytdl/keeks/NODfbab', + u'file': u'NODfbab.mp4', + u'md5': u'9b0636f8c0f7614afa4ea5e4c6e57e83', + u'info_dict': { + u"uploader": u"ytdl", + u"title": u"test chars: \"'/\\\u00e4<>This is a test video for youtube-dl.For more information, contact phihag@phihag.de ." + } + } def _real_extract(self, url): m = re.match(self._VALID_URL, url) diff --git a/youtube_dl/extractor/liveleak.py b/youtube_dl/extractor/liveleak.py index d4b142e..cf8a2c9 100644 --- a/youtube_dl/extractor/liveleak.py +++ b/youtube_dl/extractor/liveleak.py @@ -10,6 +10,16 @@ class LiveLeakIE(InfoExtractor): _VALID_URL = r'^(?:http?://)?(?:\w+\.)?liveleak\.com/view\?(?:.*?)i=(?P[\w_]+)(?:.*)' IE_NAME = u'liveleak' + _TEST = { + u'url': u'http://www.liveleak.com/view?i=757_1364311680', + u'file': u'757_1364311680.mp4', + u'md5': u'0813c2430bea7a46bf13acf3406992f4', + u'info_dict': { + u"description": u"extremely bad day for this guy..!", + u"uploader": u"ljfriel2", + u"title": u"Most unlucky car accident" + } + } def _real_extract(self, url): mobj = re.match(self._VALID_URL, url) diff --git a/youtube_dl/extractor/metacafe.py b/youtube_dl/extractor/metacafe.py index 66d6554..4c3f81b 100644 --- a/youtube_dl/extractor/metacafe.py +++ b/youtube_dl/extractor/metacafe.py @@ -20,6 +20,19 @@ class MetacafeIE(InfoExtractor): _DISCLAIMER = 'http://www.metacafe.com/family_filter/' _FILTER_POST = 'http://www.metacafe.com/f/index.php?inputType=filter&controllerGroup=user' IE_NAME = u'metacafe' + _TEST = { + u"add_ie": ["Youtube"], + u"url": u"http://metacafe.com/watch/yt-_aUehQsCQtM/the_electric_company_short_i_pbs_kids_go/", + u"file": u"_aUehQsCQtM.flv", + u"info_dict": { + u"upload_date": u"20090102", + u"title": u"The Electric Company | \"Short I\" | PBS KIDS GO!", + u"description": u"md5:2439a8ef6d5a70e380c22f5ad323e5a8", + u"uploader": u"PBS", + u"uploader_id": u"PBS" + } + } + def report_disclaimer(self): """Report disclaimer retrieval.""" diff --git a/youtube_dl/extractor/myspass.py b/youtube_dl/extractor/myspass.py index 7b016bb..107665d 100644 --- a/youtube_dl/extractor/myspass.py +++ b/youtube_dl/extractor/myspass.py @@ -11,6 +11,15 @@ from ..utils import ( class MySpassIE(InfoExtractor): _VALID_URL = r'http://www.myspass.de/.*' + _TEST = { + u'url': u'http://www.myspass.de/myspass/shows/tvshows/absolute-mehrheit/Absolute-Mehrheit-vom-17022013-Die-Highlights-Teil-2--/11741/', + u'file': u'11741.mp4', + u'md5': u'0b49f4844a068f8b33f4b7c88405862b', + u'info_dict': { + u"description": u"Wer kann in die Fu\u00dfstapfen von Wolfgang Kubicki treten und die Mehrheit der Zuschauer hinter sich versammeln? Wird vielleicht sogar die Absolute Mehrheit geknackt und der Jackpot von 200.000 Euro mit nach Hause genommen?", + u"title": u"Absolute Mehrheit vom 17.02.2013 - Die Highlights, Teil 2" + } + } def _real_extract(self, url): META_DATA_URL_TEMPLATE = 'http://www.myspass.de/myspass/includes/apps/video/getvideometadataxml.php?id=%s' diff --git a/youtube_dl/extractor/myvideo.py b/youtube_dl/extractor/myvideo.py index 47a44e3..b2a7b1d 100644 --- a/youtube_dl/extractor/myvideo.py +++ b/youtube_dl/extractor/myvideo.py @@ -18,6 +18,14 @@ class MyVideoIE(InfoExtractor): _VALID_URL = r'(?:http://)?(?:www\.)?myvideo\.de/watch/([0-9]+)/([^?/]+).*' IE_NAME = u'myvideo' + _TEST = { + u'url': u'http://www.myvideo.de/watch/8229274/bowling_fail_or_win', + u'file': u'8229274.flv', + u'md5': u'2d2753e8130479ba2cb7e0a37002053e', + u'info_dict': { + u"title": u"bowling-fail-or-win" + } + } # Original Code from: https://github.com/dersphere/plugin.video.myvideo_de.git # Released into the Public Domain by Tristan Fischer on 2013-05-19 diff --git a/youtube_dl/extractor/nba.py b/youtube_dl/extractor/nba.py index 296d4cd..122b7dd 100644 --- a/youtube_dl/extractor/nba.py +++ b/youtube_dl/extractor/nba.py @@ -8,6 +8,15 @@ from ..utils import ( class NBAIE(InfoExtractor): _VALID_URL = r'^(?:https?://)?(?:watch\.|www\.)?nba\.com/(?:nba/)?video(/[^?]*?)(?:/index\.html)?(?:\?.*)?$' + _TEST = { + u'url': u'http://www.nba.com/video/games/nets/2012/12/04/0021200253-okc-bkn-recap.nba/index.html', + u'file': u'0021200253-okc-bkn-recap.nba.mp4', + u'md5': u'c0edcfc37607344e2ff8f13c378c88a4', + u'info_dict': { + u"description": u"Kevin Durant scores 32 points and dishes out six assists as the Thunder beat the Nets in Brooklyn.", + u"title": u"Thunder vs. Nets" + } + } def _real_extract(self, url): mobj = re.match(self._VALID_URL, url) diff --git a/youtube_dl/extractor/photobucket.py b/youtube_dl/extractor/photobucket.py index cd7fe6f..305b797 100644 --- a/youtube_dl/extractor/photobucket.py +++ b/youtube_dl/extractor/photobucket.py @@ -16,6 +16,16 @@ class PhotobucketIE(InfoExtractor): # Check if it's necessary to keep the old extracion process _VALID_URL = r'(?:http://)?(?:[a-z0-9]+\.)?photobucket\.com/.*(([\?\&]current=)|_)(?P.*)\.(?P(flv)|(mp4))' IE_NAME = u'photobucket' + _TEST = { + u'url': u'http://media.photobucket.com/user/rachaneronas/media/TiredofLinkBuildingTryBacklinkMyDomaincom_zpsc0c3b9fa.mp4.html?filters[term]=search&filters[primary]=videos&filters[secondary]=images&sort=1&o=0', + u'file': u'zpsc0c3b9fa.mp4', + u'md5': u'7dabfb92b0a31f6c16cebc0f8e60ff99', + u'info_dict': { + u"upload_date": u"20130504", + u"uploader": u"rachaneronas", + u"title": u"Tired of Link Building? Try BacklinkMyDomain.com!" + } + } def _real_extract(self, url): # Extract id from URL diff --git a/youtube_dl/extractor/pornotube.py b/youtube_dl/extractor/pornotube.py index 0adb40d..add76a1 100644 --- a/youtube_dl/extractor/pornotube.py +++ b/youtube_dl/extractor/pornotube.py @@ -10,6 +10,15 @@ from ..utils import ( class PornotubeIE(InfoExtractor): _VALID_URL = r'^(?:https?://)?(?:\w+\.)?pornotube\.com(/c/(?P[0-9]+))?(/m/(?P[0-9]+))(/(?P.+))$' + _TEST = { + u'url': u'http://pornotube.com/c/173/m/1689755/Marilyn-Monroe-Bathing', + u'file': u'1689755.flv', + u'md5': u'374dd6dcedd24234453b295209aa69b6', + u'info_dict': { + u"upload_date": u"20090708", + u"title": u"Marilyn-Monroe-Bathing" + } + } def _real_extract(self, url): mobj = re.match(self._VALID_URL, url) diff --git a/youtube_dl/extractor/rbmaradio.py b/youtube_dl/extractor/rbmaradio.py index 0c75eee..4b6147a 100644 --- a/youtube_dl/extractor/rbmaradio.py +++ b/youtube_dl/extractor/rbmaradio.py @@ -11,6 +11,18 @@ from ..utils import ( class RBMARadioIE(InfoExtractor): _VALID_URL = r'https?://(?:www\.)?rbmaradio\.com/shows/(?P<videoID>[^/]+)$' + _TEST = { + u'url': u'http://www.rbmaradio.com/shows/ford-lopatin-live-at-primavera-sound-2011', + u'file': u'ford-lopatin-live-at-primavera-sound-2011.mp3', + u'md5': u'6bc6f9bcb18994b4c983bc3bf4384d95', + u'info_dict': { + u"uploader_id": u"ford-lopatin", + u"location": u"Spain", + u"description": u"Joel Ford and Daniel \u2019Oneohtrix Point Never\u2019 Lopatin fly their midified pop extravaganza to Spain. Live at Primavera Sound 2011.", + u"uploader": u"Ford & Lopatin", + u"title": u"Live at Primavera Sound 2011" + } + } def _real_extract(self, url): m = re.match(self._VALID_URL, url) diff --git a/youtube_dl/extractor/redtube.py b/youtube_dl/extractor/redtube.py index ebc4e23..1d2cf1f 100644 --- a/youtube_dl/extractor/redtube.py +++ b/youtube_dl/extractor/redtube.py @@ -5,6 +5,14 @@ from .common import InfoExtractor class RedTubeIE(InfoExtractor): _VALID_URL = r'(?:http://)?(?:www\.)?redtube\.com/(?P<id>[0-9]+)' + _TEST = { + u'url': u'http://www.redtube.com/66418', + u'file': u'66418.mp4', + u'md5': u'7b8c22b5e7098a3e1c09709df1126d2d', + u'info_dict': { + u"title": u"Sucked on a toilet" + } + } def _real_extract(self,url): mobj = re.match(self._VALID_URL, url) diff --git a/youtube_dl/extractor/ringtv.py b/youtube_dl/extractor/ringtv.py new file mode 100644 index 0000000..1b08c31 --- /dev/null +++ b/youtube_dl/extractor/ringtv.py @@ -0,0 +1,37 @@ +import re + +from .common import InfoExtractor + + +class RingTVIE(InfoExtractor): + _VALID_URL = r'(?:http://)?(?:www\.)?ringtv\.craveonline\.com/videos/video/([^/]+)' + _TEST = { + u"url": u"http://ringtv.craveonline.com/videos/video/746619-canelo-alvarez-talks-about-mayweather-showdown", + u"file": u"746619.mp4", + u"md5": u"7c46b4057d22de32e0a539f017e64ad3", + u"info_dict": { + u"title": u"Canelo Alvarez talks about Mayweather showdown", + u"description": u"Saul \\\"Canelo\\\" Alvarez spoke to the media about his Sept. 14 showdown with Floyd Mayweather after their kick-off presser in NYC. Canelo is motivated and confident that he will have the speed and gameplan to beat the pound-for-pound king." + } + } + + def _real_extract(self, url): + mobj = re.match(self._VALID_URL, url) + video_id = mobj.group(1).split('-')[0] + webpage = self._download_webpage(url, video_id) + title = self._search_regex(r'<title>(.+?)', + webpage, 'video title').replace(' | RingTV','') + description = self._search_regex(r'

(.+?)
', + webpage, 'Description') + final_url = "http://ringtv.craveonline.springboardplatform.com/storage/ringtv.craveonline.com/conversion/%s.mp4" %(str(video_id)) + thumbnail_url = "http://ringtv.craveonline.springboardplatform.com/storage/ringtv.craveonline.com/snapshots/%s.jpg" %(str(video_id)) + ext = final_url.split('.')[-1] + return [{ + 'id' : video_id, + 'url' : final_url, + 'ext' : ext, + 'title' : title, + 'thumbnail' : thumbnail_url, + 'description' : description, + }] + diff --git a/youtube_dl/extractor/soundcloud.py b/youtube_dl/extractor/soundcloud.py index 80d7e1b..d47c49c 100644 --- a/youtube_dl/extractor/soundcloud.py +++ b/youtube_dl/extractor/soundcloud.py @@ -19,8 +19,19 @@ class SoundcloudIE(InfoExtractor): of the stream token and uid """ - _VALID_URL = r'^(?:https?://)?(?:www\.)?soundcloud\.com/([\w\d-]+)/([\w\d-]+)' + _VALID_URL = r'^(?:https?://)?(?:www\.)?soundcloud\.com/([\w\d-]+)/([\w\d-]+)(?:[?].*)?$' IE_NAME = u'soundcloud' + _TEST = { + u'url': u'http://soundcloud.com/ethmusic/lostin-powers-she-so-heavy', + u'file': u'62986583.mp3', + u'md5': u'ebef0a451b909710ed1d7787dddbf0d7', + u'info_dict': { + u"upload_date": u"20121011", + u"description": u"No Downloads untill we record the finished version this weekend, i was too pumped n i had to post it , earl is prolly gonna b hella p.o'd", + u"uploader": u"E.T. ExTerrestrial Music", + u"title": u"Lostin Powers - She so Heavy (SneakPreview) Adrian Ackers Blueprint 1" + } + } def report_resolve(self, video_id): """Report information extraction.""" @@ -75,8 +86,72 @@ class SoundcloudSetIE(InfoExtractor): of the stream token and uid """ - _VALID_URL = r'^(?:https?://)?(?:www\.)?soundcloud\.com/([\w\d-]+)/sets/([\w\d-]+)' + _VALID_URL = r'^(?:https?://)?(?:www\.)?soundcloud\.com/([\w\d-]+)/sets/([\w\d-]+)(?:[?].*)?$' IE_NAME = u'soundcloud:set' + _TEST = { + u"url":"https://soundcloud.com/the-concept-band/sets/the-royal-concept-ep", + u"playlist": [ + { + u"file":"30510138.mp3", + u"md5":"f9136bf103901728f29e419d2c70f55d", + u"info_dict": { + u"upload_date": u"20111213", + u"description": u"The Royal Concept from Stockholm\r\nFilip / Povel / David / Magnus\r\nwww.royalconceptband.com", + u"uploader": u"The Royal Concept", + u"title": u"D-D-Dance" + } + }, + { + u"file":"47127625.mp3", + u"md5":"09b6758a018470570f8fd423c9453dd8", + u"info_dict": { + u"upload_date": u"20120521", + u"description": u"The Royal Concept from Stockholm\r\nFilip / Povel / David / Magnus\r\nwww.royalconceptband.com", + u"uploader": u"The Royal Concept", + u"title": u"The Royal Concept - Gimme Twice" + } + }, + { + u"file":"47127627.mp3", + u"md5":"154abd4e418cea19c3b901f1e1306d9c", + u"info_dict": { + u"upload_date": u"20120521", + u"uploader": u"The Royal Concept", + u"title": u"Goldrushed" + } + }, + { + u"file":"47127629.mp3", + u"md5":"2f5471edc79ad3f33a683153e96a79c1", + u"info_dict": { + u"upload_date": u"20120521", + u"description": u"The Royal Concept from Stockholm\r\nFilip / Povel / David / Magnus\r\nwww.royalconceptband.com", + u"uploader": u"The Royal Concept", + u"title": u"In the End" + } + }, + { + u"file":"47127631.mp3", + u"md5":"f9ba87aa940af7213f98949254f1c6e2", + u"info_dict": { + u"upload_date": u"20120521", + u"description": u"The Royal Concept from Stockholm\r\nFilip / David / Povel / Magnus\r\nwww.theroyalconceptband.com", + u"uploader": u"The Royal Concept", + u"title": u"Knocked Up" + } + }, + { + u"file":"75206121.mp3", + u"md5":"f9d1fe9406717e302980c30de4af9353", + u"info_dict": { + u"upload_date": u"20130116", + u"description": u"The unreleased track World on Fire premiered on the CW's hit show Arrow (8pm/7pm central). \r\nAs a gift to our fans we would like to offer you a free download of the track! ", + u"uploader": u"The Royal Concept", + u"title": u"World On Fire" + } + } + ] + } def report_resolve(self, video_id): """Report information extraction.""" diff --git a/youtube_dl/extractor/spiegel.py b/youtube_dl/extractor/spiegel.py index 98a65b7..13c8640 100644 --- a/youtube_dl/extractor/spiegel.py +++ b/youtube_dl/extractor/spiegel.py @@ -6,6 +6,14 @@ from .common import InfoExtractor class SpiegelIE(InfoExtractor): _VALID_URL = r'https?://(?:www\.)?spiegel\.de/video/[^/]*-(?P[0-9]+)(?:\.html)?(?:#.*)?$' + _TEST = { + u'url': u'http://www.spiegel.de/video/vulkan-tungurahua-in-ecuador-ist-wieder-aktiv-video-1259285.html', + u'file': u'1259285.mp4', + u'md5': u'2c2754212136f35fb4b19767d242f66e', + u'info_dict': { + u"title": u"Vulkanausbruch in Ecuador: Der \"Feuerschlund\" ist wieder aktiv" + } + } def _real_extract(self, url): m = re.match(self._VALID_URL, url) diff --git a/youtube_dl/extractor/stanfordoc.py b/youtube_dl/extractor/stanfordoc.py index 8d3e32a..b27838b 100644 --- a/youtube_dl/extractor/stanfordoc.py +++ b/youtube_dl/extractor/stanfordoc.py @@ -16,10 +16,17 @@ from ..utils import ( class StanfordOpenClassroomIE(InfoExtractor): - """Information extractor for Stanford's Open ClassRoom""" - - _VALID_URL = r'^(?:https?://)?openclassroom.stanford.edu(?P/?|(/MainFolder/(?:HomePage|CoursePage|VideoPage)\.php([?]course=(?P[^&]+)(&video=(?P