From ca4d08063804fb264eb0ae9cc57894198f66e1fb Mon Sep 17 00:00:00 2001 From: =?utf8?q?Rog=C3=A9rio=20Brito?= <rbrito@ime.usp.br> Date: Thu, 26 Dec 2013 16:41:27 -0200 Subject: [PATCH] Imported Upstream version 2013.12.23 --- README.md | 65 +++++- README.txt | 134 ++++++++++-- test/test_YoutubeDL.py | 15 ++ test/test_all_urls.py | 9 +- test/test_playlists.py | 51 ++++- test/test_utils.py | 31 ++- test/test_write_info_json.py | 1 + test/test_youtube_lists.py | 8 + youtube-dl | Bin 283113 -> 313559 bytes youtube-dl.1 | 148 +++++++++++-- youtube-dl.bash-completion | 2 +- youtube_dl/FileDownloader.py | 89 +++++--- youtube_dl/YoutubeDL.py | 294 ++++++++++++++++++-------- youtube_dl/__init__.py | 96 +++++---- youtube_dl/aes.py | 144 +++++++++++-- youtube_dl/extractor/__init__.py | 27 ++- youtube_dl/extractor/academicearth.py | 31 +++ youtube_dl/extractor/addanime.py | 2 +- youtube_dl/extractor/aparat.py | 56 +++++ youtube_dl/extractor/appletrailers.py | 25 ++- youtube_dl/extractor/archiveorg.py | 2 +- youtube_dl/extractor/arte.py | 25 ++- youtube_dl/extractor/auengine.py | 2 +- youtube_dl/extractor/bambuser.py | 2 +- youtube_dl/extractor/blinkx.py | 90 ++++++++ youtube_dl/extractor/bliptv.py | 39 ++-- youtube_dl/extractor/bloomberg.py | 2 +- youtube_dl/extractor/brightcove.py | 24 ++- youtube_dl/extractor/cbs.py | 30 +++ youtube_dl/extractor/channel9.py | 267 +++++++++++++++++++++++ youtube_dl/extractor/clipsyndicate.py | 10 +- youtube_dl/extractor/comedycentral.py | 2 +- youtube_dl/extractor/common.py | 110 ++++++---- youtube_dl/extractor/crunchyroll.py | 171 +++++++++++++++ youtube_dl/extractor/cspan.py | 2 +- youtube_dl/extractor/dailymotion.py | 17 +- youtube_dl/extractor/daum.py | 2 +- youtube_dl/extractor/dreisat.py | 2 +- youtube_dl/extractor/eighttracks.py | 2 +- youtube_dl/extractor/exfm.py | 2 +- youtube_dl/extractor/facebook.py | 4 +- youtube_dl/extractor/faz.py | 2 +- youtube_dl/extractor/fktv.py | 4 +- youtube_dl/extractor/francetv.py | 106 ++++++++-- youtube_dl/extractor/gamekings.py | 2 +- youtube_dl/extractor/gametrailers.py | 3 +- youtube_dl/extractor/generic.py | 147 ++++++++++--- youtube_dl/extractor/hotnewhiphop.py | 2 +- youtube_dl/extractor/ign.py | 4 +- youtube_dl/extractor/imdb.py | 8 +- youtube_dl/extractor/instagram.py | 2 +- youtube_dl/extractor/ivi.py | 154 ++++++++++++++ youtube_dl/extractor/jukebox.py | 2 +- youtube_dl/extractor/liveleak.py | 2 +- youtube_dl/extractor/livestream.py | 2 +- youtube_dl/extractor/mdr.py | 63 ++++++ youtube_dl/extractor/metacafe.py | 48 +++-- youtube_dl/extractor/metacritic.py | 9 +- youtube_dl/extractor/mixcloud.py | 23 +- youtube_dl/extractor/mtv.py | 38 ++-- youtube_dl/extractor/muzu.py | 2 +- youtube_dl/extractor/myspass.py | 2 +- youtube_dl/extractor/naver.py | 2 +- youtube_dl/extractor/ndtv.py | 64 ++++++ youtube_dl/extractor/ninegag.py | 43 ++++ youtube_dl/extractor/ooyala.py | 5 + youtube_dl/extractor/orf.py | 2 +- youtube_dl/extractor/pbs.py | 2 +- youtube_dl/extractor/pornhd.py | 38 ++++ youtube_dl/extractor/pornhub.py | 2 +- youtube_dl/extractor/pyvideo.py | 51 +++++ youtube_dl/extractor/radiofrance.py | 55 +++++ youtube_dl/extractor/rtlnow.py | 7 +- youtube_dl/extractor/rutube.py | 2 +- youtube_dl/extractor/slashdot.py | 2 +- youtube_dl/extractor/smotri.py | 167 +++++++++++++-- youtube_dl/extractor/soundcloud.py | 60 ++++-- youtube_dl/extractor/space.py | 2 +- youtube_dl/extractor/stanfordoc.py | 22 +- youtube_dl/extractor/tf1.py | 2 +- youtube_dl/extractor/theplatform.py | 80 +++++++ youtube_dl/extractor/unistra.py | 2 +- youtube_dl/extractor/vbox7.py | 2 +- youtube_dl/extractor/veehd.py | 2 +- youtube_dl/extractor/vevo.py | 9 +- youtube_dl/extractor/vice.py | 2 +- youtube_dl/extractor/viddler.py | 5 +- youtube_dl/extractor/videofyme.py | 2 +- youtube_dl/extractor/videopremium.py | 1 + youtube_dl/extractor/vimeo.py | 77 ++++++- youtube_dl/extractor/wat.py | 2 +- youtube_dl/extractor/wimp.py | 23 +- youtube_dl/extractor/wistia.py | 55 +++++ youtube_dl/extractor/xhamster.py | 4 +- youtube_dl/extractor/xtube.py | 2 +- youtube_dl/extractor/yahoo.py | 2 +- youtube_dl/extractor/youjizz.py | 2 +- youtube_dl/extractor/youtube.py | 190 +++++++++-------- youtube_dl/extractor/zdf.py | 4 +- youtube_dl/utils.py | 85 +++++++- youtube_dl/version.py | 2 +- 101 files changed, 3102 insertions(+), 639 deletions(-) create mode 100644 youtube_dl/extractor/academicearth.py create mode 100644 youtube_dl/extractor/aparat.py create mode 100644 youtube_dl/extractor/blinkx.py create mode 100644 youtube_dl/extractor/cbs.py create mode 100644 youtube_dl/extractor/channel9.py create mode 100644 youtube_dl/extractor/crunchyroll.py create mode 100644 youtube_dl/extractor/ivi.py create mode 100644 youtube_dl/extractor/mdr.py create mode 100644 youtube_dl/extractor/ndtv.py create mode 100644 youtube_dl/extractor/ninegag.py create mode 100644 youtube_dl/extractor/pornhd.py create mode 100644 youtube_dl/extractor/pyvideo.py create mode 100644 youtube_dl/extractor/radiofrance.py create mode 100644 youtube_dl/extractor/theplatform.py create mode 100644 youtube_dl/extractor/wistia.py diff --git a/README.md b/README.md index 029c418..caed948 100644 --- a/README.md +++ b/README.md @@ -38,6 +38,8 @@ which means you can modify it, redistribute it or use it however you like. default $XDG_CACHE_HOME/youtube-dl or ~/.cache /youtube-dl . --no-cache-dir Disable filesystem caching + --bidi-workaround Work around terminals that lack bidirectional + text support. Requires fribidi executable in PATH ## Video Selection: --playlist-start NUMBER playlist video to start at (default is 1) @@ -54,6 +56,10 @@ which means you can modify it, redistribute it or use it however you like. --date DATE download only videos uploaded in this date --datebefore DATE download only videos uploaded before this date --dateafter DATE download only videos uploaded after this date + --min-views COUNT Do not download any videos with less than COUNT + views + --max-views COUNT Do not download any videos with more than COUNT + views --no-playlist download only the currently playing video --age-limit YEARS download only videos suitable for the given age --download-archive FILE Download only videos not listed in the archive @@ -98,6 +104,8 @@ which means you can modify it, redistribute it or use it however you like. --restrict-filenames Restrict filenames to only ASCII characters, and avoid "&" and spaces in filenames -a, --batch-file FILE file containing URLs to download ('-' for stdin) + --load-info FILE json file containing the video information + (created with the "--write-json" option -w, --no-overwrites do not overwrite files -c, --continue force resume of partially downloaded files. By default, youtube-dl will resume downloads if @@ -123,6 +131,7 @@ which means you can modify it, redistribute it or use it however you like. --get-id simulate, quiet but print id --get-thumbnail simulate, quiet but print thumbnail URL --get-description simulate, quiet but print video description + --get-duration simulate, quiet but print video length --get-filename simulate, quiet but print output filename --get-format simulate, quiet but print output format -j, --dump-json simulate, quiet but print JSON information @@ -274,14 +283,54 @@ This README file was originally written by Daniel Bolton (<https://github.com/db # BUGS -Bugs and suggestions should be reported at: <https://github.com/rg3/youtube-dl/issues> +Bugs and suggestions should be reported at: <https://github.com/rg3/youtube-dl/issues> . Unless you were prompted so or there is another pertinent reason (e.g. GitHub fails to accept the bug report), please do not send bug reports via personal email. -Please include: - -* Your exact command line, like `youtube-dl -t "http://www.youtube.com/watch?v=uHlDtZ6Oc3s&feature=channel_video_title"`. A common mistake is not to escape the `&`. Putting URLs in quotes should solve this problem. -* If possible re-run the command with `--verbose`, and include the full output, it is really helpful to us. -* The output of `youtube-dl --version` -* The output of `python --version` -* The name and version of your Operating System ("Ubuntu 11.04 x64" or "Windows 7 x64" is usually enough). +Please include the full output of the command when run with `--verbose`. The output (including the first lines) contain important debugging information. Issues without the full output are often not reproducible and therefore do not get solved in short order, if ever. For discussions, join us in the irc channel #youtube-dl on freenode. + +When you submit a request, please re-read it once to avoid a couple of mistakes (you can and should use this as a checklist): + +### Is the description of the issue itself sufficient? + +We often get issue reports that we cannot really decipher. While in most cases we eventually get the required information after asking back multiple times, this poses an unnecessary drain on our resources. Many contributors, including myself, are also not native speakers, so we may misread some parts. + +So please elaborate on what feature you are requesting, or what bug you want to be fixed. Make sure that it's obvious + +- What the problem is +- How it could be fixed +- How your proposed solution would look like + +If your report is shorter than two lines, it is almost certainly missing some of these, which makes it hard for us to respond to it. We're often too polite to close the issue outright, but the missing info makes misinterpretation likely. As a commiter myself, I often get frustrated by these issues, since the only possible way for me to move forward on them is to ask for clarification over and over. + +For bug reports, this means that your report should contain the *complete* output of youtube-dl when called with the -v flag. The error message you get for (most) bugs even says so, but you would not believe how many of our bug reports do not contain this information. + +Site support requests must contain an example URL. An example URL is a URL you might want to download, like http://www.youtube.com/watch?v=BaW_jenozKc . There should be an obvious video present. Except under very special circumstances, the main page of a video service (e.g. http://www.youtube.com/ ) is *not* an example URL. + +### Are you using the latest version? + +Before reporting any issue, type youtube-dl -U. This should report that you're up-to-date. Ãbout 20% of the reports we receive are already fixed, but people are using outdated versions. This goes for feature requests as well. + +### Is the issue already documented? + +Make sure that someone has not already opened the issue you're trying to open. Search at the top of the window or at https://github.com/rg3/youtube-dl/search?type=Issues . If there is an issue, feel free to write something along the lines of "This affects me as well, with version 2015.01.01. Here is some more information on the issue: ...". While some issues may be old, a new post into them often spurs rapid activity. + +### Why are existing options not enough? + +Before requesting a new feature, please have a quick peek at [the list of supported options](https://github.com/rg3/youtube-dl/blob/master/README.md#synopsis). Many feature requests are for features that actually exist already! Please, absolutely do show off your work in the issue report and detail how the existing similar options do *not* solve your problem. + +### Is there enough context in your bug report? + +People want to solve problems, and often think they do us a favor by breaking down their larger problems (e.g. wanting to skip already downloaded files) to a specific request (e.g. requesting us to look whether the file exists before downloading the info page). However, what often happens is that they break down the problem into two steps: One simple, and one impossible (or extremely complicated one). + +We are then presented with a very complicated request when the original problem could be solved far easier, e.g. by recording the downloaded video IDs in a separate file. To avoid this, you must include the greater context where it is non-obvious. In particular, every feature request that does not consist of adding support for a new site should contain a use case scenario that explains in what situation the missing feature would be useful. + +### Does the issue involve one problem, and one problem only? + +Some of our users seem to think there is a limit of issues they can or should open. There is no limit of issues they can or should open. While it may seem appealing to be able to dump all your issues into one ticket, that means that someone who solves one of your issues cannot mark the issue as closed. Typically, reporting a bunch of issues leads to the ticket lingering since nobody wants to attack that behemoth, until someone mercifully splits the issue into multiple ones. + +In particular, every site support request issue should only pertain to services at one site (generally under a common domain, but always using the same backend technology). Do not request support for vimeo user videos, Whitehouse podcasts, and Google Plus pages in the same issue. Also, make sure that you don't post bug reports alongside feature requests. As a rule of thumb, a feature request does not include outputs of youtube-dl that are not immediately related to the feature at hand. Do not post reports of a network error alongside the request for a new video service. + +### Is anyone going to need the feature? + +Only post features that you (or an incapicated friend you can personally talk to) require. Do not post features because they seem like a good idea. If they are really useful, they will be requested by someone who requires them. diff --git a/README.txt b/README.txt index fc9f17e..3645b8c 100644 --- a/README.txt +++ b/README.txt @@ -45,6 +45,8 @@ OPTIONS default $XDG_CACHE_HOME/youtube-dl or ~/.cache /youtube-dl . --no-cache-dir Disable filesystem caching + --bidi-workaround Work around terminals that lack bidirectional + text support. Requires fribidi executable in PATH Video Selection: ---------------- @@ -63,6 +65,10 @@ Video Selection: --date DATE download only videos uploaded in this date --datebefore DATE download only videos uploaded before this date --dateafter DATE download only videos uploaded after this date + --min-views COUNT Do not download any videos with less than COUNT + views + --max-views COUNT Do not download any videos with more than COUNT + views --no-playlist download only the currently playing video --age-limit YEARS download only videos suitable for the given age --download-archive FILE Download only videos not listed in the archive @@ -111,6 +117,8 @@ Filesystem Options: --restrict-filenames Restrict filenames to only ASCII characters, and avoid "&" and spaces in filenames -a, --batch-file FILE file containing URLs to download ('-' for stdin) + --load-info FILE json file containing the video information + (created with the "--write-json" option -w, --no-overwrites do not overwrite files -c, --continue force resume of partially downloaded files. By default, youtube-dl will resume downloads if @@ -138,6 +146,7 @@ Verbosity / Simulation Options: --get-id simulate, quiet but print id --get-thumbnail simulate, quiet but print thumbnail URL --get-description simulate, quiet but print video description + --get-duration simulate, quiet but print video length --get-filename simulate, quiet but print output filename --get-format simulate, quiet but print output format -j, --dump-json simulate, quiet but print JSON information @@ -354,19 +363,118 @@ BUGS ==== Bugs and suggestions should be reported at: -https://github.com/rg3/youtube-dl/issues +https://github.com/rg3/youtube-dl/issues . Unless you were prompted so +or there is another pertinent reason (e.g. GitHub fails to accept the +bug report), please do not send bug reports via personal email. -Please include: - -- Your exact command line, like - youtube-dl -t "http://www.youtube.com/watch?v=uHlDtZ6Oc3s&feature=channel_video_title". - A common mistake is not to escape the &. Putting URLs in quotes - should solve this problem. -- If possible re-run the command with --verbose, and include the full - output, it is really helpful to us. -- The output of youtube-dl --version -- The output of python --version -- The name and version of your Operating System ("Ubuntu 11.04 x64" or - "Windows 7 x64" is usually enough). +Please include the full output of the command when run with --verbose. +The output (including the first lines) contain important debugging +information. Issues without the full output are often not reproducible +and therefore do not get solved in short order, if ever. For discussions, join us in the irc channel #youtube-dl on freenode. + +When you submit a request, please re-read it once to avoid a couple of +mistakes (you can and should use this as a checklist): + +Is the description of the issue itself sufficient? + +We often get issue reports that we cannot really decipher. While in most +cases we eventually get the required information after asking back +multiple times, this poses an unnecessary drain on our resources. Many +contributors, including myself, are also not native speakers, so we may +misread some parts. + +So please elaborate on what feature you are requesting, or what bug you +want to be fixed. Make sure that it's obvious + +- What the problem is +- How it could be fixed +- How your proposed solution would look like + +If your report is shorter than two lines, it is almost certainly missing +some of these, which makes it hard for us to respond to it. We're often +too polite to close the issue outright, but the missing info makes +misinterpretation likely. As a commiter myself, I often get frustrated +by these issues, since the only possible way for me to move forward on +them is to ask for clarification over and over. + +For bug reports, this means that your report should contain the complete +output of youtube-dl when called with the -v flag. The error message you +get for (most) bugs even says so, but you would not believe how many of +our bug reports do not contain this information. + +Site support requests must contain an example URL. An example URL is a +URL you might want to download, like +http://www.youtube.com/watch?v=BaW_jenozKc . There should be an obvious +video present. Except under very special circumstances, the main page of +a video service (e.g. http://www.youtube.com/ ) is not an example URL. + +Are you using the latest version? + +Before reporting any issue, type youtube-dl -U. This should report that +you're up-to-date. Ãbout 20% of the reports we receive are already +fixed, but people are using outdated versions. This goes for feature +requests as well. + +Is the issue already documented? + +Make sure that someone has not already opened the issue you're trying to +open. Search at the top of the window or at +https://github.com/rg3/youtube-dl/search?type=Issues . If there is an +issue, feel free to write something along the lines of "This affects me +as well, with version 2015.01.01. Here is some more information on the +issue: ...". While some issues may be old, a new post into them often +spurs rapid activity. + +Why are existing options not enough? + +Before requesting a new feature, please have a quick peek at the list of +supported options. Many feature requests are for features that actually +exist already! Please, absolutely do show off your work in the issue +report and detail how the existing similar options do not solve your +problem. + +Is there enough context in your bug report? + +People want to solve problems, and often think they do us a favor by +breaking down their larger problems (e.g. wanting to skip already +downloaded files) to a specific request (e.g. requesting us to look +whether the file exists before downloading the info page). However, what +often happens is that they break down the problem into two steps: One +simple, and one impossible (or extremely complicated one). + +We are then presented with a very complicated request when the original +problem could be solved far easier, e.g. by recording the downloaded +video IDs in a separate file. To avoid this, you must include the +greater context where it is non-obvious. In particular, every feature +request that does not consist of adding support for a new site should +contain a use case scenario that explains in what situation the missing +feature would be useful. + +Does the issue involve one problem, and one problem only? + +Some of our users seem to think there is a limit of issues they can or +should open. There is no limit of issues they can or should open. While +it may seem appealing to be able to dump all your issues into one +ticket, that means that someone who solves one of your issues cannot +mark the issue as closed. Typically, reporting a bunch of issues leads +to the ticket lingering since nobody wants to attack that behemoth, +until someone mercifully splits the issue into multiple ones. + +In particular, every site support request issue should only pertain to +services at one site (generally under a common domain, but always using +the same backend technology). Do not request support for vimeo user +videos, Whitehouse podcasts, and Google Plus pages in the same issue. +Also, make sure that you don't post bug reports alongside feature +requests. As a rule of thumb, a feature request does not include outputs +of youtube-dl that are not immediately related to the feature at hand. +Do not post reports of a network error alongside the request for a new +video service. + +Is anyone going to need the feature? + +Only post features that you (or an incapicated friend you can personally +talk to) require. Do not post features because they seem like a good +idea. If they are really useful, they will be requested by someone who +requires them. diff --git a/test/test_YoutubeDL.py b/test/test_YoutubeDL.py index 58cf9c3..3100c36 100644 --- a/test/test_YoutubeDL.py +++ b/test/test_YoutubeDL.py @@ -7,6 +7,7 @@ import unittest sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) from test.helper import FakeYDL +from youtube_dl import YoutubeDL class YDL(FakeYDL): @@ -140,6 +141,20 @@ class TestFormatSelection(unittest.TestCase): self.assertEqual(test_dict['extractor'], 'Foo') self.assertEqual(test_dict['playlist'], 'funny videos') + def test_prepare_filename(self): + info = { + u'id': u'1234', + u'ext': u'mp4', + u'width': None, + } + def fname(templ): + ydl = YoutubeDL({'outtmpl': templ}) + return ydl.prepare_filename(info) + self.assertEqual(fname(u'%(id)s.%(ext)s'), u'1234.mp4') + self.assertEqual(fname(u'%(id)s-%(width)s.%(ext)s'), u'1234-NA.mp4') + # Replace missing fields with 'NA' + self.assertEqual(fname(u'%(uploader_date)s-%(id)s.%(ext)s'), u'NA-1234.mp4') + if __name__ == '__main__': unittest.main() diff --git a/test/test_all_urls.py b/test/test_all_urls.py index 6b9764c..bd77b7c 100644 --- a/test/test_all_urls.py +++ b/test/test_all_urls.py @@ -10,6 +10,7 @@ sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) from test.helper import get_testcases from youtube_dl.extractor import ( + FacebookIE, gen_extractors, JustinTVIE, YoutubeIE, @@ -87,12 +88,15 @@ class TestAllURLsMatching(unittest.TestCase): assertExtractId('http://www.youtube.com/watch?v=BaW_jenozKcsharePLED17F32AD9753930', 'BaW_jenozKc') assertExtractId('BaW_jenozKc', 'BaW_jenozKc') + def test_facebook_matching(self): + self.assertTrue(FacebookIE.suitable(u'https://www.facebook.com/Shiniknoh#!/photo.php?v=10153317450565268')) + 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']: + 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)) @@ -110,6 +114,9 @@ class TestAllURLsMatching(unittest.TestCase): self.assertMatch('http://vimeo.com/channels/tributes', ['vimeo:channel']) self.assertMatch('http://vimeo.com/user7108434', ['vimeo:user']) + # https://github.com/rg3/youtube-dl/issues/1930 + def test_soundcloud_not_matching_sets(self): + self.assertMatch('http://soundcloud.com/floex/sets/gone-ep', ['soundcloud:set']) if __name__ == '__main__': unittest.main() diff --git a/test/test_playlists.py b/test/test_playlists.py index 00c9501..1b7b4e3 100644 --- a/test/test_playlists.py +++ b/test/test_playlists.py @@ -12,10 +12,13 @@ from test.helper import FakeYDL from youtube_dl.extractor import ( + AcademicEarthCourseIE, DailymotionPlaylistIE, DailymotionUserIE, VimeoChannelIE, VimeoUserIE, + VimeoAlbumIE, + VimeoGroupsIE, UstreamChannelIE, SoundcloudSetIE, SoundcloudUserIE, @@ -24,7 +27,8 @@ from youtube_dl.extractor import ( BambuserChannelIE, BandcampAlbumIE, SmotriCommunityIE, - SmotriUserIE + SmotriUserIE, + IviCompilationIE ) @@ -65,6 +69,22 @@ class TestPlaylists(unittest.TestCase): self.assertEqual(result['title'], u'Nki') self.assertTrue(len(result['entries']) > 65) + def test_vimeo_album(self): + dl = FakeYDL() + ie = VimeoAlbumIE(dl) + result = ie.extract('http://vimeo.com/album/2632481') + self.assertIsPlaylist(result) + self.assertEqual(result['title'], u'Staff Favorites: November 2013') + self.assertTrue(len(result['entries']) > 12) + + def test_vimeo_groups(self): + dl = FakeYDL() + ie = VimeoGroupsIE(dl) + result = ie.extract('http://vimeo.com/groups/rolexawards') + self.assertIsPlaylist(result) + self.assertEqual(result['title'], u'Rolex Awards for Enterprise') + self.assertTrue(len(result['entries']) > 72) + def test_ustream_channel(self): dl = FakeYDL() ie = UstreamChannelIE(dl) @@ -140,5 +160,34 @@ class TestPlaylists(unittest.TestCase): self.assertEqual(result['title'], u'Inspector') self.assertTrue(len(result['entries']) >= 9) + def test_AcademicEarthCourse(self): + dl = FakeYDL() + ie = AcademicEarthCourseIE(dl) + result = ie.extract(u'http://academicearth.org/courses/building-dynamic-websites/') + self.assertIsPlaylist(result) + self.assertEqual(result['id'], u'building-dynamic-websites') + self.assertEqual(result['title'], u'Building Dynamic Websites') + self.assertEqual(result['description'], u"Today's websites are increasingly dynamic. Pages are no longer static HTML files but instead generated by scripts and database calls. User interfaces are more seamless, with technologies like Ajax replacing traditional page reloads. This course teaches students how to build dynamic websites with Ajax and with Linux, Apache, MySQL, and PHP (LAMP), one of today's most popular frameworks. Students learn how to set up domain names with DNS, how to structure pages with XHTML and CSS, how to program in JavaScript and PHP, how to configure Apache and MySQL, how to design and query databases with SQL, how to use Ajax with both XML and JSON, and how to build mashups. The course explores issues of security, scalability, and cross-browser support and also discusses enterprise-level deployments of websites, including third-party hosting, virtualization, colocation in data centers, firewalling, and load-balancing.") + self.assertEqual(len(result['entries']), 10) + + def test_ivi_compilation(self): + dl = FakeYDL() + ie = IviCompilationIE(dl) + result = ie.extract('http://www.ivi.ru/watch/dezhurnyi_angel') + self.assertIsPlaylist(result) + self.assertEqual(result['id'], u'dezhurnyi_angel') + self.assertEqual(result['title'], u'ÐежÑÑнÑй ангел (2010 - 2012)') + self.assertTrue(len(result['entries']) >= 36) + + def test_ivi_compilation_season(self): + dl = FakeYDL() + ie = IviCompilationIE(dl) + result = ie.extract('http://www.ivi.ru/watch/dezhurnyi_angel/season2') + self.assertIsPlaylist(result) + self.assertEqual(result['id'], u'dezhurnyi_angel/season2') + self.assertEqual(result['title'], u'ÐежÑÑнÑй ангел (2010 - 2012) 2 Ñезон') + self.assertTrue(len(result['entries']) >= 20) + + if __name__ == '__main__': unittest.main() diff --git a/test/test_utils.py b/test/test_utils.py index e9e590e..e5778cd 100644 --- a/test/test_utils.py +++ b/test/test_utils.py @@ -13,19 +13,21 @@ import xml.etree.ElementTree #from youtube_dl.utils import htmlentity_transform from youtube_dl.utils import ( - timeconvert, - sanitize_filename, - unescapeHTML, - orderedSet, DateRange, - unified_strdate, + encodeFilename, find_xpath_attr, get_meta_content, - xpath_with_ns, + orderedSet, + sanitize_filename, + shell_quote, smuggle_url, + str_to_int, + timeconvert, + unescapeHTML, + unified_strdate, unsmuggle_url, - shell_quote, - encodeFilename, + url_basename, + xpath_with_ns, ) if sys.version_info < (3, 0): @@ -176,6 +178,19 @@ class TestUtil(unittest.TestCase): args = ['ffmpeg', '-i', encodeFilename(u'ñâ¬Ã\'.mp4')] self.assertEqual(shell_quote(args), u"""ffmpeg -i 'ñâ¬Ã'"'"'.mp4'""") + def test_str_to_int(self): + self.assertEqual(str_to_int('123,456'), 123456) + self.assertEqual(str_to_int('123.456'), 123456) + + def test_url_basename(self): + self.assertEqual(url_basename(u'http://foo.de/'), u'') + self.assertEqual(url_basename(u'http://foo.de/bar/baz'), u'baz') + self.assertEqual(url_basename(u'http://foo.de/bar/baz?x=y'), u'baz') + self.assertEqual(url_basename(u'http://foo.de/bar/baz#x=y'), u'baz') + self.assertEqual(url_basename(u'http://foo.de/bar/baz/'), u'baz') + self.assertEqual( + url_basename(u'http://media.w3.org/2010/05/sintel/trailer.mp4'), + u'trailer.mp4') if __name__ == '__main__': unittest.main() diff --git a/test/test_write_info_json.py b/test/test_write_info_json.py index d717761..90426a5 100644 --- a/test/test_write_info_json.py +++ b/test/test_write_info_json.py @@ -33,6 +33,7 @@ TEST_ID = 'BaW_jenozKc' INFO_JSON_FILE = TEST_ID + '.info.json' DESCRIPTION_FILE = TEST_ID + '.mp4.description' EXPECTED_DESCRIPTION = u'''test chars: "'/\äâð +test URL: https://github.com/rg3/youtube-dl/issues/1892 This is a test video for youtube-dl. diff --git a/test/test_youtube_lists.py b/test/test_youtube_lists.py index 95f07d1..d9fe5af 100644 --- a/test/test_youtube_lists.py +++ b/test/test_youtube_lists.py @@ -15,6 +15,7 @@ from youtube_dl.extractor import ( YoutubeIE, YoutubeChannelIE, YoutubeShowIE, + YoutubeTopListIE, ) @@ -116,5 +117,12 @@ class TestYoutubeLists(unittest.TestCase): original_video = entries[0] self.assertEqual(original_video['id'], 'rjFaenf1T-Y') + def test_youtube_toplist(self): + dl = FakeYDL() + ie = YoutubeTopListIE(dl) + result = ie.extract('yttoplist:music:Top Tracks') + entries = result['entries'] + self.assertTrue(len(entries) >= 5) + if __name__ == '__main__': unittest.main() diff --git a/youtube-dl b/youtube-dl index 899ca28bd80ce245f7afd7cbadc2eae53755a5ff..2e3e8a9b6cf644d8b656750bfe3386298e6609d3 100755 GIT binary patch delta 190601 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ℑ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�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 delta 159813 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	q}t*uQG;G7T_gFI*IPVk)fq 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ⅅ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 LgChedBB=iZQht?z diff --git a/youtube-dl.1 b/youtube-dl.1 index a172bf8..c99538c 100644 --- a/youtube-dl.1 +++ b/youtube-dl.1 @@ -42,6 +42,8 @@ redistribute it or use it however you like. \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ default\ $XDG_CACHE_HOME/youtube\-dl\ or\ ~/.cache \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ /youtube\-dl\ . \-\-no\-cache\-dir\ \ \ \ \ \ \ \ \ \ \ \ \ Disable\ filesystem\ caching +\-\-bidi\-workaround\ \ \ \ \ \ \ \ \ \ Work\ around\ terminals\ that\ lack\ bidirectional +\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ text\ support.\ Requires\ fribidi\ executable\ in\ PATH \f[] .fi .SS Video Selection: @@ -62,6 +64,10 @@ redistribute it or use it however you like. \-\-date\ DATE\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ download\ only\ videos\ uploaded\ in\ this\ date \-\-datebefore\ DATE\ \ \ \ \ \ \ \ \ \ download\ only\ videos\ uploaded\ before\ this\ date \-\-dateafter\ DATE\ \ \ \ \ \ \ \ \ \ \ download\ only\ videos\ uploaded\ after\ this\ date +\-\-min\-views\ COUNT\ \ \ \ \ \ \ \ \ \ Do\ not\ download\ any\ videos\ with\ less\ than\ COUNT +\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ views +\-\-max\-views\ COUNT\ \ \ \ \ \ \ \ \ \ Do\ not\ download\ any\ videos\ with\ more\ than\ COUNT +\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ views \-\-no\-playlist\ \ \ \ \ \ \ \ \ \ \ \ \ \ download\ only\ the\ currently\ playing\ video \-\-age\-limit\ YEARS\ \ \ \ \ \ \ \ \ \ download\ only\ videos\ suitable\ for\ the\ given\ age \-\-download\-archive\ FILE\ \ \ \ Download\ only\ videos\ not\ listed\ in\ the\ archive @@ -114,6 +120,8 @@ redistribute it or use it however you like. \-\-restrict\-filenames\ \ \ \ \ \ \ Restrict\ filenames\ to\ only\ ASCII\ characters,\ and \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ avoid\ "&"\ and\ spaces\ in\ filenames \-a,\ \-\-batch\-file\ FILE\ \ \ \ \ \ file\ containing\ URLs\ to\ download\ (\[aq]\-\[aq]\ for\ stdin) +\-\-load\-info\ FILE\ \ \ \ \ \ \ \ \ \ \ json\ file\ containing\ the\ video\ information +\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ (created\ with\ the\ "\-\-write\-json"\ option \-w,\ \-\-no\-overwrites\ \ \ \ \ \ \ \ do\ not\ overwrite\ files \-c,\ \-\-continue\ \ \ \ \ \ \ \ \ \ \ \ \ force\ resume\ of\ partially\ downloaded\ files.\ By \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ default,\ youtube\-dl\ will\ resume\ downloads\ if @@ -143,6 +151,7 @@ redistribute it or use it however you like. \-\-get\-id\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ simulate,\ quiet\ but\ print\ id \-\-get\-thumbnail\ \ \ \ \ \ \ \ \ \ \ \ simulate,\ quiet\ but\ print\ thumbnail\ URL \-\-get\-description\ \ \ \ \ \ \ \ \ \ simulate,\ quiet\ but\ print\ video\ description +\-\-get\-duration\ \ \ \ \ \ \ \ \ \ \ \ \ simulate,\ quiet\ but\ print\ video\ length \-\-get\-filename\ \ \ \ \ \ \ \ \ \ \ \ \ simulate,\ quiet\ but\ print\ output\ filename \-\-get\-format\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ simulate,\ quiet\ but\ print\ output\ format \-j,\ \-\-dump\-json\ \ \ \ \ \ \ \ \ \ \ \ simulate,\ quiet\ but\ print\ JSON\ information @@ -383,23 +392,132 @@ domain. .SH BUGS .PP Bugs and suggestions should be reported at: -<https://github.com/rg3/youtube-dl/issues> +<https://github.com/rg3/youtube-dl/issues> . +Unless you were prompted so or there is another pertinent reason (e.g. +GitHub fails to accept the bug report), please do not send bug reports +via personal email. .PP -Please include: -.IP \[bu] 2 -Your exact command line, like -\f[C]youtube\-dl\ \-t\ "http://www.youtube.com/watch?v=uHlDtZ6Oc3s&feature=channel_video_title"\f[]. -A common mistake is not to escape the \f[C]&\f[]. -Putting URLs in quotes should solve this problem. -.IP \[bu] 2 -If possible re\-run the command with \f[C]\-\-verbose\f[], and include -the full output, it is really helpful to us. +Please include the full output of the command when run with +\f[C]\-\-verbose\f[]. +The output (including the first lines) contain important debugging +information. +Issues without the full output are often not reproducible and therefore +do not get solved in short order, if ever. +.PP +For discussions, join us in the irc channel #youtube\-dl on freenode. +.PP +When you submit a request, please re\-read it once to avoid a couple of +mistakes (you can and should use this as a checklist): +.SS Is the description of the issue itself sufficient? +.PP +We often get issue reports that we cannot really decipher. +While in most cases we eventually get the required information after +asking back multiple times, this poses an unnecessary drain on our +resources. +Many contributors, including myself, are also not native speakers, so we +may misread some parts. +.PP +So please elaborate on what feature you are requesting, or what bug you +want to be fixed. +Make sure that it\[aq]s obvious .IP \[bu] 2 -The output of \f[C]youtube\-dl\ \-\-version\f[] +What the problem is .IP \[bu] 2 -The output of \f[C]python\ \-\-version\f[] +How it could be fixed .IP \[bu] 2 -The name and version of your Operating System ("Ubuntu 11.04 x64" or -"Windows 7 x64" is usually enough). +How your proposed solution would look like .PP -For discussions, join us in the irc channel #youtube\-dl on freenode. +If your report is shorter than two lines, it is almost certainly missing +some of these, which makes it hard for us to respond to it. +We\[aq]re often too polite to close the issue outright, but the missing +info makes misinterpretation likely. +As a commiter myself, I often get frustrated by these issues, since the +only possible way for me to move forward on them is to ask for +clarification over and over. +.PP +For bug reports, this means that your report should contain the +\f[I]complete\f[] output of youtube\-dl when called with the \-v flag. +The error message you get for (most) bugs even says so, but you would +not believe how many of our bug reports do not contain this information. +.PP +Site support requests must contain an example URL. +An example URL is a URL you might want to download, like +http://www.youtube.com/watch?v=BaW_jenozKc . +There should be an obvious video present. +Except under very special circumstances, the main page of a video +service (e.g. +http://www.youtube.com/ ) is \f[I]not\f[] an example URL. +.SS Are you using the latest version? +.PP +Before reporting any issue, type youtube\-dl \-U. +This should report that you\[aq]re up\-to\-date. +Ãbout 20% of the reports we receive are already fixed, but people are +using outdated versions. +This goes for feature requests as well. +.SS Is the issue already documented? +.PP +Make sure that someone has not already opened the issue you\[aq]re +trying to open. +Search at the top of the window or at +https://github.com/rg3/youtube\-dl/search?type=Issues . +If there is an issue, feel free to write something along the lines of +"This affects me as well, with version 2015.01.01. +Here is some more information on the issue: ...". +While some issues may be old, a new post into them often spurs rapid +activity. +.SS Why are existing options not enough? +.PP +Before requesting a new feature, please have a quick peek at the list of +supported +options (https://github.com/rg3/youtube-dl/blob/master/README.md#synopsis). +Many feature requests are for features that actually exist already! +Please, absolutely do show off your work in the issue report and detail +how the existing similar options do \f[I]not\f[] solve your problem. +.SS Is there enough context in your bug report? +.PP +People want to solve problems, and often think they do us a favor by +breaking down their larger problems (e.g. +wanting to skip already downloaded files) to a specific request (e.g. +requesting us to look whether the file exists before downloading the +info page). +However, what often happens is that they break down the problem into two +steps: One simple, and one impossible (or extremely complicated one). +.PP +We are then presented with a very complicated request when the original +problem could be solved far easier, e.g. +by recording the downloaded video IDs in a separate file. +To avoid this, you must include the greater context where it is +non\-obvious. +In particular, every feature request that does not consist of adding +support for a new site should contain a use case scenario that explains +in what situation the missing feature would be useful. +.SS Does the issue involve one problem, and one problem only? +.PP +Some of our users seem to think there is a limit of issues they can or +should open. +There is no limit of issues they can or should open. +While it may seem appealing to be able to dump all your issues into one +ticket, that means that someone who solves one of your issues cannot +mark the issue as closed. +Typically, reporting a bunch of issues leads to the ticket lingering +since nobody wants to attack that behemoth, until someone mercifully +splits the issue into multiple ones. +.PP +In particular, every site support request issue should only pertain to +services at one site (generally under a common domain, but always using +the same backend technology). +Do not request support for vimeo user videos, Whitehouse podcasts, and +Google Plus pages in the same issue. +Also, make sure that you don\[aq]t post bug reports alongside feature +requests. +As a rule of thumb, a feature request does not include outputs of +youtube\-dl that are not immediately related to the feature at hand. +Do not post reports of a network error alongside the request for a new +video service. +.SS Is anyone going to need the feature? +.PP +Only post features that you (or an incapicated friend you can personally +talk to) require. +Do not post features because they seem like a good idea. +If they are really useful, they will be requested by someone who +requires them. diff --git a/youtube-dl.bash-completion b/youtube-dl.bash-completion index 9c30e7b..0cb7e92 100644 --- a/youtube-dl.bash-completion +++ b/youtube-dl.bash-completion @@ -4,7 +4,7 @@ __youtube_dl() COMPREPLY=() cur="${COMP_WORDS[COMP_CWORD]}" prev="${COMP_WORDS[COMP_CWORD-1]}" - opts="--help --version --update --ignore-errors --abort-on-error --dump-user-agent --user-agent --referer --list-extractors --extractor-descriptions --proxy --no-check-certificate --cache-dir --no-cache-dir --socket-timeout --playlist-start --playlist-end --match-title --reject-title --max-downloads --min-filesize --max-filesize --date --datebefore --dateafter --no-playlist --age-limit --download-archive --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-annotations --write-thumbnail --quiet --simulate --skip-download --get-url --get-title --get-id --get-thumbnail --get-description --get-filename --get-format --dump-json --newline --no-progress --console-title --verbose --dump-intermediate-pages --write-pages --youtube-print-sig-code --format --all-formats --prefer-free-formats --max-quality --list-formats --write-sub --write-auto-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 --embed-subs --add-metadata" + opts="--help --version --update --ignore-errors --abort-on-error --dump-user-agent --user-agent --referer --list-extractors --extractor-descriptions --proxy --no-check-certificate --cache-dir --no-cache-dir --socket-timeout --bidi-workaround --playlist-start --playlist-end --match-title --reject-title --max-downloads --min-filesize --max-filesize --date --datebefore --dateafter --min-views --max-views --no-playlist --age-limit --download-archive --rate-limit --retries --buffer-size --no-resize-buffer --test --title --id --literal --auto-number --output --autonumber-size --restrict-filenames --batch-file --load-info --no-overwrites --continue --no-continue --cookies --no-part --no-mtime --write-description --write-info-json --write-annotations --write-thumbnail --quiet --simulate --skip-download --get-url --get-title --get-id --get-thumbnail --get-description --get-duration --get-filename --get-format --dump-json --newline --no-progress --console-title --verbose --dump-intermediate-pages --write-pages --youtube-print-sig-code --format --all-formats --prefer-free-formats --max-quality --list-formats --write-sub --write-auto-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 --embed-subs --add-metadata" keywords=":ytfavorites :ytrecommended :ytsubscriptions :ytwatchlater :ythistory" fileopts="-a|--batch-file|--download-archive|--cookies" diropts="--cache-dir" diff --git a/youtube_dl/FileDownloader.py b/youtube_dl/FileDownloader.py index 3ff9716..4712493 100644 --- a/youtube_dl/FileDownloader.py +++ b/youtube_dl/FileDownloader.py @@ -204,11 +204,27 @@ class FileDownloader(object): """Report destination filename.""" self.to_screen(u'[download] Destination: ' + filename) + def _report_progress_status(self, msg, is_last_line=False): + fullmsg = u'[download] ' + msg + if self.params.get('progress_with_newline', False): + self.to_screen(fullmsg) + else: + if os.name == 'nt': + prev_len = getattr(self, '_report_progress_prev_line_length', + 0) + if prev_len > len(fullmsg): + fullmsg += u' ' * (prev_len - len(fullmsg)) + self._report_progress_prev_line_length = len(fullmsg) + clear_line = u'\r' + else: + clear_line = (u'\r\x1b[K' if sys.stderr.isatty() else u'\r') + self.to_screen(clear_line + fullmsg, skip_eol=not is_last_line) + self.to_console_title(u'youtube-dl ' + msg) + def report_progress(self, percent, data_len_str, speed, eta): """Report download progress.""" if self.params.get('noprogress', False): return - clear_line = (u'\x1b[K' if sys.stderr.isatty() and os.name != 'nt' else u'') if eta is not None: eta_str = self.format_eta(eta) else: @@ -218,14 +234,29 @@ class FileDownloader(object): else: percent_str = 'Unknown %' speed_str = self.format_speed(speed) - if self.params.get('progress_with_newline', False): - self.to_screen(u'[download] %s of %s at %s ETA %s' % - (percent_str, data_len_str, speed_str, eta_str)) + + msg = (u'%s of %s at %s ETA %s' % + (percent_str, data_len_str, speed_str, eta_str)) + self._report_progress_status(msg) + + def report_progress_live_stream(self, downloaded_data_len, speed, elapsed): + if self.params.get('noprogress', False): + return + downloaded_str = format_bytes(downloaded_data_len) + speed_str = self.format_speed(speed) + elapsed_str = FileDownloader.format_seconds(elapsed) + msg = u'%s at %s (%s)' % (downloaded_str, speed_str, elapsed_str) + self._report_progress_status(msg) + + def report_finish(self, data_len_str, tot_time): + """Report download finished.""" + if self.params.get('noprogress', False): + self.to_screen(u'[download] Download completed') else: - self.to_screen(u'\r%s[download] %s of %s at %s ETA %s' % - (clear_line, percent_str, data_len_str, speed_str, eta_str), skip_eol=True) - self.to_console_title(u'youtube-dl - %s of %s at %s ETA %s' % - (percent_str.strip(), data_len_str.strip(), speed_str.strip(), eta_str.strip())) + self._report_progress_status( + (u'100%% of %s in %s' % + (data_len_str, self.format_seconds(tot_time))), + is_last_line=True) def report_resuming_byte(self, resume_len): """Report attempt to resume at given byte.""" @@ -246,16 +277,7 @@ class FileDownloader(object): """Report it was impossible to resume download.""" self.to_screen(u'[download] Unable to resume') - def report_finish(self, data_len_str, tot_time): - """Report download finished.""" - if self.params.get('noprogress', False): - self.to_screen(u'[download] Download completed') - else: - clear_line = (u'\x1b[K' if sys.stderr.isatty() and os.name != 'nt' else u'') - self.to_screen(u'\r%s[download] 100%% of %s in %s' % - (clear_line, data_len_str, self.format_seconds(tot_time))) - - def _download_with_rtmpdump(self, filename, url, player_url, page_url, play_path, tc_url, live): + def _download_with_rtmpdump(self, filename, url, player_url, page_url, play_path, tc_url, live, conn): def run_rtmpdump(args): start = time.time() resume_percent = None @@ -301,11 +323,27 @@ class FileDownloader(object): 'eta': eta, 'speed': speed, }) - elif self.params.get('verbose', False): - if not cursor_in_new_line: - self.to_screen(u'') - cursor_in_new_line = True - self.to_screen(u'[rtmpdump] '+line) + else: + # no percent for live streams + mobj = re.search(r'([0-9]+\.[0-9]{3}) kB / [0-9]+\.[0-9]{2} sec', line) + if mobj: + downloaded_data_len = int(float(mobj.group(1))*1024) + time_now = time.time() + speed = self.calc_speed(start, time_now, downloaded_data_len) + self.report_progress_live_stream(downloaded_data_len, speed, time_now - start) + cursor_in_new_line = False + self._hook_progress({ + 'downloaded_bytes': downloaded_data_len, + 'tmpfilename': tmpfilename, + 'filename': filename, + 'status': 'downloading', + 'speed': speed, + }) + elif self.params.get('verbose', False): + if not cursor_in_new_line: + self.to_screen(u'') + cursor_in_new_line = True + self.to_screen(u'[rtmpdump] '+line) proc.wait() if not cursor_in_new_line: self.to_screen(u'') @@ -338,6 +376,8 @@ class FileDownloader(object): basic_args += ['--stop', '1'] if live: basic_args += ['--live'] + if conn: + basic_args += ['--conn', conn] args = basic_args + [[], ['--resume', '--skip', '1']][self.params.get('continuedl', False)] if sys.platform == 'win32' and sys.version_info < (3, 0): @@ -479,7 +519,8 @@ class FileDownloader(object): info_dict.get('page_url', None), info_dict.get('play_path', None), info_dict.get('tc_url', None), - info_dict.get('rtmp_live', False)) + info_dict.get('rtmp_live', False), + info_dict.get('rtmp_conn', None)) # Attempt to download using mplayer if url.startswith('mms') or url.startswith('rtsp'): diff --git a/youtube_dl/YoutubeDL.py b/youtube_dl/YoutubeDL.py index b68b110..2a078ad 100644 --- a/youtube_dl/YoutubeDL.py +++ b/youtube_dl/YoutubeDL.py @@ -3,6 +3,7 @@ from __future__ import absolute_import +import collections import errno import io import json @@ -22,7 +23,6 @@ if os.name == 'nt': from .utils import ( compat_cookiejar, compat_http_client, - compat_print, compat_str, compat_urllib_error, compat_urllib_request, @@ -34,6 +34,8 @@ from .utils import ( encodeFilename, ExtractorError, format_bytes, + formatSeconds, + get_term_width, locked_file, make_HTTPS_handler, MaxDownloadsReached, @@ -45,6 +47,7 @@ from .utils import ( subtitles_filename, takewhile_inclusive, UnavailableVideoError, + url_basename, write_json_file, write_string, YoutubeDLHandler, @@ -93,6 +96,7 @@ class YoutubeDL(object): forcethumbnail: Force printing thumbnail URL. forcedescription: Force printing description. forcefilename: Force printing final filename. + forceduration: Force printing duration. forcejson: Force printing info_dict as JSON. simulate: Do not download the video files. format: Video format code. @@ -126,13 +130,24 @@ class YoutubeDL(object): noplaylist: Download single video instead of a playlist if in doubt. age_limit: An integer representing the user's age in years. Unsuitable videos for the given age are skipped. - download_archive: File name of a file where all downloads are recorded. + min_views: An integer representing the minimum view count the video + must have in order to not be skipped. + Videos without view count information are always + downloaded. None for no limit. + max_views: An integer representing the maximum view count. + Videos that are more popular than that are not + downloaded. + Videos without view count information are always + downloaded. None for no limit. + download_archive: File name of a file where all downloads are recorded. Videos already present in the file are not downloaded again. cookiefile: File name where cookies should be read from and dumped to. nocheckcertificate:Do not verify SSL certificates proxy: URL of the proxy server to use socket_timeout: Time to wait for unresponsive hosts, in seconds + bidi_workaround: Work around buggy terminals without bidirectional text + support, using fridibi The following parameters are not used by YoutubeDL itself, they are used by the FileDownloader: @@ -156,8 +171,30 @@ class YoutubeDL(object): self._download_retcode = 0 self._num_downloads = 0 self._screen_file = [sys.stdout, sys.stderr][params.get('logtostderr', False)] + self._err_file = sys.stderr self.params = {} if params is None else params + if params.get('bidi_workaround', False): + try: + import pty + master, slave = pty.openpty() + width = get_term_width() + if width is None: + width_args = [] + else: + width_args = ['-w', str(width)] + self._fribidi = subprocess.Popen( + ['fribidi', '-c', 'UTF-8'] + width_args, + stdin=subprocess.PIPE, + stdout=slave, + stderr=self._err_file) + self._fribidi_channel = os.fdopen(master, 'rb') + except OSError as ose: + if ose.errno == 2: + self.report_warning(u'Could not find fribidi executable, ignoring --bidi-workaround . Make sure that fribidi is an executable file in one of the directories in your $PATH.') + else: + raise + if (sys.version_info >= (3,) and sys.platform != 'win32' and sys.getfilesystemencoding() in ['ascii', 'ANSI_X3.4-1968'] and not params['restrictfilenames']): @@ -205,13 +242,31 @@ class YoutubeDL(object): self._pps.append(pp) pp.set_downloader(self) + def _bidi_workaround(self, message): + if not hasattr(self, '_fribidi_channel'): + return message + + assert type(message) == type(u'') + line_count = message.count(u'\n') + 1 + self._fribidi.stdin.write((message + u'\n').encode('utf-8')) + self._fribidi.stdin.flush() + res = u''.join(self._fribidi_channel.readline().decode('utf-8') + for _ in range(line_count)) + return res[:-len(u'\n')] + def to_screen(self, message, skip_eol=False): + """Print message to stdout if not in quiet mode.""" + return self.to_stdout(message, skip_eol, check_quiet=True) + + def to_stdout(self, message, skip_eol=False, check_quiet=False): """Print message to stdout if not in quiet mode.""" if self.params.get('logger'): self.params['logger'].debug(message) - elif not self.params.get('quiet', False): + elif not check_quiet or not self.params.get('quiet', False): + message = self._bidi_workaround(message) terminator = [u'\n', u''][skip_eol] output = message + terminator + write_string(output, self._screen_file) def to_stderr(self, message): @@ -220,10 +275,9 @@ class YoutubeDL(object): if self.params.get('logger'): self.params['logger'].error(message) else: + message = self._bidi_workaround(message) output = message + u'\n' - if 'b' in getattr(self._screen_file, 'mode', '') or sys.version_info[0] < 3: # Python 2 lies about the mode of sys.stdout/sys.stderr - output = output.encode(preferredencoding()) - sys.stderr.write(output) + write_string(output, self._err_file) def to_console_title(self, message): if not self.params.get('consoletitle', False): @@ -294,7 +348,7 @@ class YoutubeDL(object): Print the message to stderr, it will be prefixed with 'WARNING:' If stderr is a tty file the 'WARNING:' will be colored ''' - if sys.stderr.isatty() and os.name != 'nt': + if self._err_file.isatty() and os.name != 'nt': _msg_header = u'\033[0;33mWARNING:\033[0m' else: _msg_header = u'WARNING:' @@ -306,29 +360,13 @@ class YoutubeDL(object): Do the same as trouble, but prefixes the message with 'ERROR:', colored in red if stderr is a tty file. ''' - if sys.stderr.isatty() and os.name != 'nt': + if self._err_file.isatty() and os.name != 'nt': _msg_header = u'\033[0;31mERROR:\033[0m' else: _msg_header = u'ERROR:' error_message = u'%s %s' % (_msg_header, message) self.trouble(error_message, tb) - def report_writedescription(self, descfn): - """ Report that the description file is being written """ - self.to_screen(u'[info] Writing video description to: ' + descfn) - - def report_writesubtitles(self, sub_filename): - """ Report that the subtitles file is being written """ - self.to_screen(u'[info] Writing video subtitles to: ' + sub_filename) - - def report_writeinfojson(self, infofn): - """ Report that the metadata file has been written """ - self.to_screen(u'[info] Video description metadata as JSON to: ' + infofn) - - def report_writeannotations(self, annofn): - """ Report that the annotations file has been written. """ - self.to_screen(u'[info] Writing video annotations to: ' + annofn) - def report_file_already_downloaded(self, file_name): """Report file has already been fully downloaded.""" try: @@ -355,18 +393,17 @@ class YoutubeDL(object): template_dict['playlist_index'] = u'%05d' % template_dict['playlist_index'] sanitize = lambda k, v: sanitize_filename( - u'NA' if v is None else compat_str(v), + compat_str(v), restricted=self.params.get('restrictfilenames'), is_id=(k == u'id')) template_dict = dict((k, sanitize(k, v)) - for k, v in template_dict.items()) + for k, v in template_dict.items() + if v is not None) + template_dict = collections.defaultdict(lambda: u'NA', template_dict) tmpl = os.path.expanduser(self.params['outtmpl']) filename = tmpl % template_dict return filename - except KeyError as err: - self.report_error(u'Erroneous output template') - return None except ValueError as err: self.report_error(u'Error in output template: ' + str(err) + u' (encoding: ' + repr(preferredencoding()) + ')') return None @@ -374,13 +411,14 @@ class YoutubeDL(object): def _match_entry(self, info_dict): """ Returns None iff the file should be downloaded """ + video_title = info_dict.get('title', info_dict.get('id', u'video')) if 'title' in info_dict: # This can happen when we're just evaluating the playlist title = info_dict['title'] matchtitle = self.params.get('matchtitle', False) if matchtitle: if not re.search(matchtitle, title, re.IGNORECASE): - return u'[download] "' + title + '" title did not match pattern "' + matchtitle + '"' + return u'"' + title + '" title did not match pattern "' + matchtitle + '"' rejecttitle = self.params.get('rejecttitle', False) if rejecttitle: if re.search(rejecttitle, title, re.IGNORECASE): @@ -389,14 +427,21 @@ class YoutubeDL(object): if date is not None: dateRange = self.params.get('daterange', DateRange()) if date not in dateRange: - return u'[download] %s upload date is not in range %s' % (date_from_str(date).isoformat(), dateRange) + return u'%s upload date is not in range %s' % (date_from_str(date).isoformat(), dateRange) + view_count = info_dict.get('view_count', None) + if view_count is not None: + min_views = self.params.get('min_views') + if min_views is not None and view_count < min_views: + return u'Skipping %s, because it has not reached minimum view count (%d/%d)' % (video_title, view_count, min_views) + max_views = self.params.get('max_views') + if max_views is not None and view_count > max_views: + return u'Skipping %s, because it has exceeded the maximum view count (%d/%d)' % (video_title, view_count, max_views) age_limit = self.params.get('age_limit') if age_limit is not None: if age_limit < info_dict.get('age_limit', 0): return u'Skipping "' + title + '" because it is age restricted' if self.in_download_archive(info_dict): - return (u'%s has already been recorded in archive' - % info_dict.get('title', info_dict.get('id', u'video'))) + return u'%s has already been recorded in archive' % video_title return None @staticmethod @@ -405,7 +450,8 @@ class YoutubeDL(object): for key, value in extra_info.items(): info_dict.setdefault(key, value) - def extract_info(self, url, download=True, ie_key=None, extra_info={}): + def extract_info(self, url, download=True, ie_key=None, extra_info={}, + process=True): ''' Returns a list with a dictionary for each video we find. If 'download', also downloads the videos. @@ -439,9 +485,13 @@ class YoutubeDL(object): { 'extractor': ie.IE_NAME, 'webpage_url': url, + 'webpage_url_basename': url_basename(url), 'extractor_key': ie.ie_key(), }) - return self.process_ie_result(ie_result, download, extra_info) + if process: + return self.process_ie_result(ie_result, download, extra_info) + else: + return ie_result except ExtractorError as de: # An error we somewhat expected self.report_error(compat_str(de), de.format_traceback()) break @@ -474,8 +524,33 @@ class YoutubeDL(object): download, ie_key=ie_result.get('ie_key'), extra_info=extra_info) + elif result_type == 'url_transparent': + # Use the information from the embedding page + info = self.extract_info( + ie_result['url'], ie_key=ie_result.get('ie_key'), + extra_info=extra_info, download=False, process=False) + + def make_result(embedded_info): + new_result = ie_result.copy() + for f in ('_type', 'url', 'ext', 'player_url', 'formats', + 'entries', 'urlhandle', 'ie_key', 'duration', + 'subtitles', 'annotations', 'format', + 'thumbnail', 'thumbnails'): + if f in new_result: + del new_result[f] + if f in embedded_info: + new_result[f] = embedded_info[f] + return new_result + new_result = make_result(info) + + assert new_result.get('_type') != 'url_transparent' + if new_result.get('_type') == 'compat_list': + new_result['entries'] = [ + make_result(e) for e in new_result['entries']] + + return self.process_ie_result( + new_result, download=download, extra_info=extra_info) elif result_type == 'playlist': - # We process each entry in the playlist playlist = ie_result.get('title', None) or ie_result.get('id', None) self.to_screen(u'[download] Downloading playlist: %s' % playlist) @@ -484,16 +559,16 @@ class YoutubeDL(object): n_all_entries = len(ie_result['entries']) playliststart = self.params.get('playliststart', 1) - 1 - playlistend = self.params.get('playlistend', -1) - + playlistend = self.params.get('playlistend', None) + # For backwards compatibility, interpret -1 as whole list if playlistend == -1: - entries = ie_result['entries'][playliststart:] - else: - entries = ie_result['entries'][playliststart:playlistend] + playlistend = None + entries = ie_result['entries'][playliststart:playlistend] n_entries = len(entries) - self.to_screen(u"[%s] playlist '%s': Collected %d video ids (downloading %d of them)" % + self.to_screen( + u"[%s] playlist '%s': Collected %d video ids (downloading %d of them)" % (ie_result['extractor'], playlist, n_all_entries, n_entries)) for i, entry in enumerate(entries, 1): @@ -503,6 +578,7 @@ class YoutubeDL(object): 'playlist_index': i + playliststart, 'extractor': ie_result['extractor'], 'webpage_url': ie_result['webpage_url'], + 'webpage_url_basename': url_basename(ie_result['webpage_url']), 'extractor_key': ie_result['extractor_key'], } @@ -523,6 +599,7 @@ class YoutubeDL(object): { 'extractor': ie_result['extractor'], 'webpage_url': ie_result['webpage_url'], + 'webpage_url_basename': url_basename(ie_result['webpage_url']), 'extractor_key': ie_result['extractor_key'], }) return r @@ -666,22 +743,25 @@ class YoutubeDL(object): # Forced printings if self.params.get('forcetitle', False): - compat_print(info_dict['fulltitle']) + self.to_stdout(info_dict['fulltitle']) if self.params.get('forceid', False): - compat_print(info_dict['id']) + self.to_stdout(info_dict['id']) if self.params.get('forceurl', False): # For RTMP URLs, also include the playpath - compat_print(info_dict['url'] + info_dict.get('play_path', u'')) + self.to_stdout(info_dict['url'] + info_dict.get('play_path', u'')) if self.params.get('forcethumbnail', False) and info_dict.get('thumbnail') is not None: - compat_print(info_dict['thumbnail']) + self.to_stdout(info_dict['thumbnail']) if self.params.get('forcedescription', False) and info_dict.get('description') is not None: - compat_print(info_dict['description']) + self.to_stdout(info_dict['description']) if self.params.get('forcefilename', False) and filename is not None: - compat_print(filename) + self.to_stdout(filename) + if self.params.get('forceduration', False) and info_dict.get('duration') is not None: + self.to_stdout(formatSeconds(info_dict['duration'])) if self.params.get('forceformat', False): - compat_print(info_dict['format']) + self.to_stdout(info_dict['format']) if self.params.get('forcejson', False): - compat_print(json.dumps(info_dict)) + info_dict['_filename'] = filename + self.to_stdout(json.dumps(info_dict)) # Do nothing else if in simulate mode if self.params.get('simulate', False): @@ -699,28 +779,34 @@ class YoutubeDL(object): return if self.params.get('writedescription', False): - try: - descfn = filename + u'.description' - self.report_writedescription(descfn) - with io.open(encodeFilename(descfn), 'w', encoding='utf-8') as descfile: - descfile.write(info_dict['description']) - except (KeyError, TypeError): - self.report_warning(u'There\'s no description to write.') - except (OSError, IOError): - self.report_error(u'Cannot write description file ' + descfn) - return + descfn = filename + u'.description' + if self.params.get('nooverwrites', False) and os.path.exists(encodeFilename(descfn)): + self.to_screen(u'[info] Video description is already present') + else: + try: + self.to_screen(u'[info] Writing video description to: ' + descfn) + with io.open(encodeFilename(descfn), 'w', encoding='utf-8') as descfile: + descfile.write(info_dict['description']) + except (KeyError, TypeError): + self.report_warning(u'There\'s no description to write.') + except (OSError, IOError): + self.report_error(u'Cannot write description file ' + descfn) + return if self.params.get('writeannotations', False): - try: - annofn = filename + u'.annotations.xml' - self.report_writeannotations(annofn) - with io.open(encodeFilename(annofn), 'w', encoding='utf-8') as annofile: - annofile.write(info_dict['annotations']) - except (KeyError, TypeError): - self.report_warning(u'There are no annotations to write.') - except (OSError, IOError): - self.report_error(u'Cannot write annotations file: ' + annofn) - return + annofn = filename + u'.annotations.xml' + if self.params.get('nooverwrites', False) and os.path.exists(encodeFilename(annofn)): + self.to_screen(u'[info] Video annotations are already present') + else: + try: + self.to_screen(u'[info] Writing video annotations to: ' + annofn) + with io.open(encodeFilename(annofn), 'w', encoding='utf-8') as annofile: + annofile.write(info_dict['annotations']) + except (KeyError, TypeError): + self.report_warning(u'There are no annotations to write.') + except (OSError, IOError): + self.report_error(u'Cannot write annotations file: ' + annofn) + return subtitles_are_requested = any([self.params.get('writesubtitles', False), self.params.get('writeautomaticsub')]) @@ -736,38 +822,48 @@ class YoutubeDL(object): continue try: sub_filename = subtitles_filename(filename, sub_lang, sub_format) - self.report_writesubtitles(sub_filename) - with io.open(encodeFilename(sub_filename), 'w', encoding='utf-8') as subfile: - subfile.write(sub) + if self.params.get('nooverwrites', False) and os.path.exists(encodeFilename(sub_filename)): + self.to_screen(u'[info] Video subtitle %s.%s is already_present' % (sub_lang, sub_format)) + else: + self.to_screen(u'[info] Writing video subtitles to: ' + sub_filename) + with io.open(encodeFilename(sub_filename), 'w', encoding='utf-8') as subfile: + subfile.write(sub) except (OSError, IOError): self.report_error(u'Cannot write subtitles file ' + descfn) return if self.params.get('writeinfojson', False): infofn = os.path.splitext(filename)[0] + u'.info.json' - self.report_writeinfojson(infofn) - try: - json_info_dict = dict((k, v) for k, v in info_dict.items() if not k in ['urlhandle']) - write_json_file(json_info_dict, encodeFilename(infofn)) - except (OSError, IOError): - self.report_error(u'Cannot write metadata to JSON file ' + infofn) - return + if self.params.get('nooverwrites', False) and os.path.exists(encodeFilename(infofn)): + self.to_screen(u'[info] Video description metadata is already present') + else: + self.to_screen(u'[info] Writing video description metadata as JSON to: ' + infofn) + try: + json_info_dict = dict((k, v) for k, v in info_dict.items() if not k in ['urlhandle']) + write_json_file(json_info_dict, encodeFilename(infofn)) + except (OSError, IOError): + self.report_error(u'Cannot write metadata to JSON file ' + infofn) + return if self.params.get('writethumbnail', False): if info_dict.get('thumbnail') is not None: thumb_format = determine_ext(info_dict['thumbnail'], u'jpg') - thumb_filename = filename.rpartition('.')[0] + u'.' + thumb_format - self.to_screen(u'[%s] %s: Downloading thumbnail ...' % - (info_dict['extractor'], info_dict['id'])) - try: - uf = compat_urllib_request.urlopen(info_dict['thumbnail']) - with open(thumb_filename, 'wb') as thumbf: - shutil.copyfileobj(uf, thumbf) - self.to_screen(u'[%s] %s: Writing thumbnail to: %s' % - (info_dict['extractor'], info_dict['id'], thumb_filename)) - except (compat_urllib_error.URLError, compat_http_client.HTTPException, socket.error) as err: - self.report_warning(u'Unable to download thumbnail "%s": %s' % - (info_dict['thumbnail'], compat_str(err))) + thumb_filename = os.path.splitext(filename)[0] + u'.' + thumb_format + if self.params.get('nooverwrites', False) and os.path.exists(encodeFilename(thumb_filename)): + self.to_screen(u'[%s] %s: Thumbnail is already present' % + (info_dict['extractor'], info_dict['id'])) + else: + self.to_screen(u'[%s] %s: Downloading thumbnail ...' % + (info_dict['extractor'], info_dict['id'])) + try: + uf = compat_urllib_request.urlopen(info_dict['thumbnail']) + with open(thumb_filename, 'wb') as thumbf: + shutil.copyfileobj(uf, thumbf) + self.to_screen(u'[%s] %s: Writing thumbnail to: %s' % + (info_dict['extractor'], info_dict['id'], thumb_filename)) + except (compat_urllib_error.URLError, compat_http_client.HTTPException, socket.error) as err: + self.report_warning(u'Unable to download thumbnail "%s": %s' % + (info_dict['thumbnail'], compat_str(err))) if not self.params.get('skip_download', False): if self.params.get('nooverwrites', False) and os.path.exists(encodeFilename(filename)): @@ -812,6 +908,20 @@ class YoutubeDL(object): return self._download_retcode + def download_with_info_file(self, info_filename): + with io.open(info_filename, 'r', encoding='utf-8') as f: + info = json.load(f) + try: + self.process_ie_result(info, download=True) + except DownloadError: + webpage_url = info.get('webpage_url') + if webpage_url is not None: + self.report_warning(u'The info failed to download, trying with "%s"' % webpage_url) + return self.download([webpage_url]) + else: + raise + return self._download_retcode + def post_process(self, filename, ie_info): """Run all the postprocessors on the given file.""" info = dict(ie_info) diff --git a/youtube_dl/__init__.py b/youtube_dl/__init__.py index d2446b6..6343730 100644 --- a/youtube_dl/__init__.py +++ b/youtube_dl/__init__.py @@ -37,6 +37,7 @@ __authors__ = ( 'Anton Larionov', 'Takuya Tsuchida', 'Sergey M.', + 'Michael Orlitzky', ) __license__ = 'Public Domain' @@ -48,7 +49,6 @@ import os import random import re import shlex -import subprocess import sys @@ -56,12 +56,13 @@ from .utils import ( compat_print, DateRange, decodeOption, - determine_ext, + get_term_width, DownloadError, get_cachedir, MaxDownloadsReached, preferredencoding, SameFileError, + setproctitle, std_headers, write_string, ) @@ -113,19 +114,6 @@ def parseOpts(overrideArguments=None): def _comma_separated_values_options_callback(option, opt_str, value, parser): setattr(parser.values, option.dest, value.split(',')) - def _find_term_columns(): - columns = os.environ.get('COLUMNS', None) - if columns: - return int(columns) - - try: - sp = subprocess.Popen(['stty', 'size'], stdout=subprocess.PIPE, stderr=subprocess.PIPE) - out,err = sp.communicate() - return int(out.split()[1]) - except: - pass - return None - def _hide_login_info(opts): opts = list(opts) for private_opt in ['-p', '--password', '-u', '--username', '--video-password']: @@ -140,7 +128,7 @@ def parseOpts(overrideArguments=None): max_help_position = 80 # No need to wrap help messages if we're on a wide console - columns = _find_term_columns() + columns = get_term_width() if columns: max_width = columns fmt = optparse.IndentedHelpFormatter(width=max_width, max_help_position=max_help_position) @@ -204,12 +192,19 @@ def parseOpts(overrideArguments=None): general.add_option( '--socket-timeout', dest='socket_timeout', type=float, default=None, help=optparse.SUPPRESS_HELP) - - - selection.add_option('--playlist-start', - dest='playliststart', metavar='NUMBER', help='playlist video to start at (default is %default)', default=1) - selection.add_option('--playlist-end', - dest='playlistend', metavar='NUMBER', help='playlist video to end at (default is last)', default=-1) + general.add_option( + '--bidi-workaround', dest='bidi_workaround', action='store_true', + help=u'Work around terminals that lack bidirectional text support. Requires fribidi executable in PATH') + + + selection.add_option( + '--playlist-start', + dest='playliststart', metavar='NUMBER', default=1, type=int, + help='playlist video to start at (default is %default)') + selection.add_option( + '--playlist-end', + dest='playlistend', metavar='NUMBER', default=None, type=int, + help='playlist video to end at (default is last)') selection.add_option('--match-title', dest='matchtitle', metavar='REGEX',help='download only matching titles (regex or caseless sub-string)') selection.add_option('--reject-title', dest='rejecttitle', metavar='REGEX',help='skip download for matching titles (regex or caseless sub-string)') selection.add_option('--max-downloads', metavar='NUMBER', @@ -220,6 +215,14 @@ def parseOpts(overrideArguments=None): selection.add_option('--date', metavar='DATE', dest='date', help='download only videos uploaded in this date', default=None) selection.add_option('--datebefore', metavar='DATE', dest='datebefore', help='download only videos uploaded before this date', default=None) selection.add_option('--dateafter', metavar='DATE', dest='dateafter', help='download only videos uploaded after this date', default=None) + selection.add_option( + '--min-views', metavar='COUNT', dest='min_views', + default=None, type=int, + help="Do not download any videos with less than COUNT views",) + selection.add_option( + '--max-views', metavar='COUNT', dest='max_views', + default=None, type=int, + help="Do not download any videos with more than COUNT views",) selection.add_option('--no-playlist', action='store_true', dest='noplaylist', help='download only the currently playing video', default=False) selection.add_option('--age-limit', metavar='YEARS', dest='age_limit', help='download only videos suitable for the given age', @@ -300,6 +303,9 @@ def parseOpts(overrideArguments=None): verbosity.add_option('--get-description', action='store_true', dest='getdescription', help='simulate, quiet but print video description', default=False) + verbosity.add_option('--get-duration', + action='store_true', dest='getduration', + help='simulate, quiet but print video length', default=False) verbosity.add_option('--get-filename', action='store_true', dest='getfilename', help='simulate, quiet but print output filename', default=False) @@ -360,6 +366,9 @@ def parseOpts(overrideArguments=None): help='Restrict filenames to only ASCII characters, and avoid "&" and spaces in filenames', default=False) filesystem.add_option('-a', '--batch-file', dest='batchfile', metavar='FILE', help='file containing URLs to download (\'-\' for stdin)') + filesystem.add_option('--load-info', + dest='load_info_filename', metavar='FILE', + help='json file containing the video information (created with the "--write-json" option') filesystem.add_option('-w', '--no-overwrites', action='store_true', dest='nooverwrites', help='do not overwrite files', default=False) filesystem.add_option('-c', '--continue', @@ -467,12 +476,15 @@ def parseOpts(overrideArguments=None): return parser, opts, args + def _real_main(argv=None): # Compatibility fixes for Windows if sys.platform == 'win32': # https://github.com/rg3/youtube-dl/issues/820 codecs.register(lambda name: codecs.lookup('utf-8') if name == 'cp65001' else None) + setproctitle(u'youtube-dl') + parser, opts, args = parseOpts(argv) # Set user agent @@ -512,7 +524,6 @@ def _real_main(argv=None): 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) @@ -567,18 +578,10 @@ def _real_main(argv=None): if numeric_buffersize is None: parser.error(u'invalid buffer size specified') opts.buffersize = numeric_buffersize - try: - opts.playliststart = int(opts.playliststart) - if opts.playliststart <= 0: - raise ValueError(u'Playlist start must be positive') - except (TypeError, ValueError): - parser.error(u'invalid playlist start number specified') - try: - opts.playlistend = int(opts.playlistend) - if opts.playlistend != -1 and (opts.playlistend <= 0 or opts.playlistend < opts.playliststart): - raise ValueError(u'Playlist end must be greater than playlist start') - except (TypeError, ValueError): - parser.error(u'invalid playlist end number specified') + if opts.playliststart <= 0: + raise ValueError(u'Playlist start must be positive') + if opts.playlistend not in (-1, None) and opts.playlistend < opts.playliststart: + raise ValueError(u'Playlist end must be greater than playlist start') if opts.extractaudio: if opts.audioformat not in ['best', 'aac', 'mp3', 'm4a', 'opus', 'vorbis', 'wav']: parser.error(u'invalid audio format specified') @@ -611,27 +614,30 @@ def _real_main(argv=None): or (opts.useid and u'%(id)s.%(ext)s') or (opts.autonumber and u'%(autonumber)s-%(id)s.%(ext)s') or u'%(title)s-%(id)s.%(ext)s') - if '%(ext)s' not in outtmpl and opts.extractaudio: + if not os.path.splitext(outtmpl)[1] and opts.extractaudio: parser.error(u'Cannot download a video and extract audio into the same' - u' file! Use "%%(ext)s" instead of %r' % - determine_ext(outtmpl, u'')) + u' file! Use "{0}.%(ext)s" instead of "{0}" as the output' + u' template'.format(outtmpl)) + + any_printing = opts.geturl or opts.gettitle or opts.getid or opts.getthumbnail or opts.getdescription or opts.getfilename or opts.getformat or opts.getduration or opts.dumpjson ydl_opts = { 'usenetrc': opts.usenetrc, 'username': opts.username, 'password': opts.password, 'videopassword': opts.videopassword, - 'quiet': (opts.quiet or opts.geturl or opts.gettitle or opts.getid or opts.getthumbnail or opts.getdescription or opts.getfilename or opts.getformat or opts.dumpjson), + 'quiet': (opts.quiet or any_printing), 'forceurl': opts.geturl, 'forcetitle': opts.gettitle, 'forceid': opts.getid, 'forcethumbnail': opts.getthumbnail, 'forcedescription': opts.getdescription, + 'forceduration': opts.getduration, 'forcefilename': opts.getfilename, 'forceformat': opts.getformat, 'forcejson': opts.dumpjson, 'simulate': opts.simulate, - 'skip_download': (opts.skip_download or opts.simulate or opts.geturl or opts.gettitle or opts.getid or opts.getthumbnail or opts.getdescription or opts.getfilename or opts.getformat or opts.dumpjson), + 'skip_download': (opts.skip_download or opts.simulate or any_printing), 'format': opts.format, 'format_limit': opts.format_limit, 'listformats': opts.listformats, @@ -675,6 +681,8 @@ def _real_main(argv=None): 'keepvideo': opts.keepvideo, 'min_filesize': opts.min_filesize, 'max_filesize': opts.max_filesize, + 'min_views': opts.min_views, + 'max_views': opts.max_views, 'daterange': date, 'cachedir': opts.cachedir, 'youtube_print_sig_code': opts.youtube_print_sig_code, @@ -684,6 +692,7 @@ def _real_main(argv=None): 'nocheckcertificate': opts.no_check_certificate, 'proxy': opts.proxy, 'socket_timeout': opts.socket_timeout, + 'bidi_workaround': opts.bidi_workaround, } with YoutubeDL(ydl_opts) as ydl: @@ -706,14 +715,17 @@ def _real_main(argv=None): update_self(ydl.to_screen, opts.verbose) # Maybe do nothing - if len(all_urls) < 1: + if (len(all_urls) < 1) and (opts.load_info_filename is None): if not opts.update_self: parser.error(u'you must provide at least one URL') else: sys.exit() try: - retcode = ydl.download(all_urls) + if opts.load_info_filename is not None: + retcode = ydl.download_with_info_file(opts.load_info_filename) + else: + retcode = ydl.download(all_urls) except MaxDownloadsReached: ydl.to_screen(u'--max-download limit reached, aborting.') retcode = 101 diff --git a/youtube_dl/aes.py b/youtube_dl/aes.py index 9a0c93f..e9c5e21 100644 --- a/youtube_dl/aes.py +++ b/youtube_dl/aes.py @@ -1,4 +1,4 @@ -__all__ = ['aes_encrypt', 'key_expansion', 'aes_ctr_decrypt', 'aes_decrypt_text'] +__all__ = ['aes_encrypt', 'key_expansion', 'aes_ctr_decrypt', 'aes_cbc_decrypt', 'aes_decrypt_text'] import base64 from math import ceil @@ -32,6 +32,31 @@ def aes_ctr_decrypt(data, key, counter): return decrypted_data +def aes_cbc_decrypt(data, key, iv): + """ + Decrypt with aes in CBC mode + + @param {int[]} data cipher + @param {int[]} key 16/24/32-Byte cipher key + @param {int[]} iv 16-Byte IV + @returns {int[]} decrypted data + """ + expanded_key = key_expansion(key) + block_count = int(ceil(float(len(data)) / BLOCK_SIZE_BYTES)) + + decrypted_data=[] + previous_cipher_block = iv + for i in range(block_count): + block = data[i*BLOCK_SIZE_BYTES : (i+1)*BLOCK_SIZE_BYTES] + block += [0]*(BLOCK_SIZE_BYTES - len(block)) + + decrypted_block = aes_decrypt(block, expanded_key) + decrypted_data += xor(decrypted_block, previous_cipher_block) + previous_cipher_block = block + decrypted_data = decrypted_data[:len(data)] + + return decrypted_data + def key_expansion(data): """ Generate key schedule @@ -75,7 +100,7 @@ def aes_encrypt(data, expanded_key): @returns {int[]} 16-Byte cipher """ rounds = len(expanded_key) // BLOCK_SIZE_BYTES - 1 - + data = xor(data, expanded_key[:BLOCK_SIZE_BYTES]) for i in range(1, rounds+1): data = sub_bytes(data) @@ -83,6 +108,26 @@ def aes_encrypt(data, expanded_key): if i != rounds: data = mix_columns(data) data = xor(data, expanded_key[i*BLOCK_SIZE_BYTES : (i+1)*BLOCK_SIZE_BYTES]) + + return data + +def aes_decrypt(data, expanded_key): + """ + Decrypt one block with aes + + @param {int[]} data 16-Byte cipher + @param {int[]} expanded_key 176/208/240-Byte expanded key + @returns {int[]} 16-Byte state + """ + rounds = len(expanded_key) // BLOCK_SIZE_BYTES - 1 + + for i in range(rounds, 0, -1): + data = xor(data, expanded_key[i*BLOCK_SIZE_BYTES : (i+1)*BLOCK_SIZE_BYTES]) + if i != rounds: + data = mix_columns_inv(data) + data = shift_rows_inv(data) + data = sub_bytes_inv(data) + data = xor(data, expanded_key[:BLOCK_SIZE_BYTES]) return data @@ -139,14 +184,69 @@ SBOX = (0x63, 0x7C, 0x77, 0x7B, 0xF2, 0x6B, 0x6F, 0xC5, 0x30, 0x01, 0x67, 0x2B, 0x70, 0x3E, 0xB5, 0x66, 0x48, 0x03, 0xF6, 0x0E, 0x61, 0x35, 0x57, 0xB9, 0x86, 0xC1, 0x1D, 0x9E, 0xE1, 0xF8, 0x98, 0x11, 0x69, 0xD9, 0x8E, 0x94, 0x9B, 0x1E, 0x87, 0xE9, 0xCE, 0x55, 0x28, 0xDF, 0x8C, 0xA1, 0x89, 0x0D, 0xBF, 0xE6, 0x42, 0x68, 0x41, 0x99, 0x2D, 0x0F, 0xB0, 0x54, 0xBB, 0x16) -MIX_COLUMN_MATRIX = ((2,3,1,1), - (1,2,3,1), - (1,1,2,3), - (3,1,1,2)) +SBOX_INV = (0x52, 0x09, 0x6a, 0xd5, 0x30, 0x36, 0xa5, 0x38, 0xbf, 0x40, 0xa3, 0x9e, 0x81, 0xf3, 0xd7, 0xfb, + 0x7c, 0xe3, 0x39, 0x82, 0x9b, 0x2f, 0xff, 0x87, 0x34, 0x8e, 0x43, 0x44, 0xc4, 0xde, 0xe9, 0xcb, + 0x54, 0x7b, 0x94, 0x32, 0xa6, 0xc2, 0x23, 0x3d, 0xee, 0x4c, 0x95, 0x0b, 0x42, 0xfa, 0xc3, 0x4e, + 0x08, 0x2e, 0xa1, 0x66, 0x28, 0xd9, 0x24, 0xb2, 0x76, 0x5b, 0xa2, 0x49, 0x6d, 0x8b, 0xd1, 0x25, + 0x72, 0xf8, 0xf6, 0x64, 0x86, 0x68, 0x98, 0x16, 0xd4, 0xa4, 0x5c, 0xcc, 0x5d, 0x65, 0xb6, 0x92, + 0x6c, 0x70, 0x48, 0x50, 0xfd, 0xed, 0xb9, 0xda, 0x5e, 0x15, 0x46, 0x57, 0xa7, 0x8d, 0x9d, 0x84, + 0x90, 0xd8, 0xab, 0x00, 0x8c, 0xbc, 0xd3, 0x0a, 0xf7, 0xe4, 0x58, 0x05, 0xb8, 0xb3, 0x45, 0x06, + 0xd0, 0x2c, 0x1e, 0x8f, 0xca, 0x3f, 0x0f, 0x02, 0xc1, 0xaf, 0xbd, 0x03, 0x01, 0x13, 0x8a, 0x6b, + 0x3a, 0x91, 0x11, 0x41, 0x4f, 0x67, 0xdc, 0xea, 0x97, 0xf2, 0xcf, 0xce, 0xf0, 0xb4, 0xe6, 0x73, + 0x96, 0xac, 0x74, 0x22, 0xe7, 0xad, 0x35, 0x85, 0xe2, 0xf9, 0x37, 0xe8, 0x1c, 0x75, 0xdf, 0x6e, + 0x47, 0xf1, 0x1a, 0x71, 0x1d, 0x29, 0xc5, 0x89, 0x6f, 0xb7, 0x62, 0x0e, 0xaa, 0x18, 0xbe, 0x1b, + 0xfc, 0x56, 0x3e, 0x4b, 0xc6, 0xd2, 0x79, 0x20, 0x9a, 0xdb, 0xc0, 0xfe, 0x78, 0xcd, 0x5a, 0xf4, + 0x1f, 0xdd, 0xa8, 0x33, 0x88, 0x07, 0xc7, 0x31, 0xb1, 0x12, 0x10, 0x59, 0x27, 0x80, 0xec, 0x5f, + 0x60, 0x51, 0x7f, 0xa9, 0x19, 0xb5, 0x4a, 0x0d, 0x2d, 0xe5, 0x7a, 0x9f, 0x93, 0xc9, 0x9c, 0xef, + 0xa0, 0xe0, 0x3b, 0x4d, 0xae, 0x2a, 0xf5, 0xb0, 0xc8, 0xeb, 0xbb, 0x3c, 0x83, 0x53, 0x99, 0x61, + 0x17, 0x2b, 0x04, 0x7e, 0xba, 0x77, 0xd6, 0x26, 0xe1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0c, 0x7d) +MIX_COLUMN_MATRIX = ((0x2,0x3,0x1,0x1), + (0x1,0x2,0x3,0x1), + (0x1,0x1,0x2,0x3), + (0x3,0x1,0x1,0x2)) +MIX_COLUMN_MATRIX_INV = ((0xE,0xB,0xD,0x9), + (0x9,0xE,0xB,0xD), + (0xD,0x9,0xE,0xB), + (0xB,0xD,0x9,0xE)) +RIJNDAEL_EXP_TABLE = (0x01, 0x03, 0x05, 0x0F, 0x11, 0x33, 0x55, 0xFF, 0x1A, 0x2E, 0x72, 0x96, 0xA1, 0xF8, 0x13, 0x35, + 0x5F, 0xE1, 0x38, 0x48, 0xD8, 0x73, 0x95, 0xA4, 0xF7, 0x02, 0x06, 0x0A, 0x1E, 0x22, 0x66, 0xAA, + 0xE5, 0x34, 0x5C, 0xE4, 0x37, 0x59, 0xEB, 0x26, 0x6A, 0xBE, 0xD9, 0x70, 0x90, 0xAB, 0xE6, 0x31, + 0x53, 0xF5, 0x04, 0x0C, 0x14, 0x3C, 0x44, 0xCC, 0x4F, 0xD1, 0x68, 0xB8, 0xD3, 0x6E, 0xB2, 0xCD, + 0x4C, 0xD4, 0x67, 0xA9, 0xE0, 0x3B, 0x4D, 0xD7, 0x62, 0xA6, 0xF1, 0x08, 0x18, 0x28, 0x78, 0x88, + 0x83, 0x9E, 0xB9, 0xD0, 0x6B, 0xBD, 0xDC, 0x7F, 0x81, 0x98, 0xB3, 0xCE, 0x49, 0xDB, 0x76, 0x9A, + 0xB5, 0xC4, 0x57, 0xF9, 0x10, 0x30, 0x50, 0xF0, 0x0B, 0x1D, 0x27, 0x69, 0xBB, 0xD6, 0x61, 0xA3, + 0xFE, 0x19, 0x2B, 0x7D, 0x87, 0x92, 0xAD, 0xEC, 0x2F, 0x71, 0x93, 0xAE, 0xE9, 0x20, 0x60, 0xA0, + 0xFB, 0x16, 0x3A, 0x4E, 0xD2, 0x6D, 0xB7, 0xC2, 0x5D, 0xE7, 0x32, 0x56, 0xFA, 0x15, 0x3F, 0x41, + 0xC3, 0x5E, 0xE2, 0x3D, 0x47, 0xC9, 0x40, 0xC0, 0x5B, 0xED, 0x2C, 0x74, 0x9C, 0xBF, 0xDA, 0x75, + 0x9F, 0xBA, 0xD5, 0x64, 0xAC, 0xEF, 0x2A, 0x7E, 0x82, 0x9D, 0xBC, 0xDF, 0x7A, 0x8E, 0x89, 0x80, + 0x9B, 0xB6, 0xC1, 0x58, 0xE8, 0x23, 0x65, 0xAF, 0xEA, 0x25, 0x6F, 0xB1, 0xC8, 0x43, 0xC5, 0x54, + 0xFC, 0x1F, 0x21, 0x63, 0xA5, 0xF4, 0x07, 0x09, 0x1B, 0x2D, 0x77, 0x99, 0xB0, 0xCB, 0x46, 0xCA, + 0x45, 0xCF, 0x4A, 0xDE, 0x79, 0x8B, 0x86, 0x91, 0xA8, 0xE3, 0x3E, 0x42, 0xC6, 0x51, 0xF3, 0x0E, + 0x12, 0x36, 0x5A, 0xEE, 0x29, 0x7B, 0x8D, 0x8C, 0x8F, 0x8A, 0x85, 0x94, 0xA7, 0xF2, 0x0D, 0x17, + 0x39, 0x4B, 0xDD, 0x7C, 0x84, 0x97, 0xA2, 0xFD, 0x1C, 0x24, 0x6C, 0xB4, 0xC7, 0x52, 0xF6, 0x01) +RIJNDAEL_LOG_TABLE = (0x00, 0x00, 0x19, 0x01, 0x32, 0x02, 0x1a, 0xc6, 0x4b, 0xc7, 0x1b, 0x68, 0x33, 0xee, 0xdf, 0x03, + 0x64, 0x04, 0xe0, 0x0e, 0x34, 0x8d, 0x81, 0xef, 0x4c, 0x71, 0x08, 0xc8, 0xf8, 0x69, 0x1c, 0xc1, + 0x7d, 0xc2, 0x1d, 0xb5, 0xf9, 0xb9, 0x27, 0x6a, 0x4d, 0xe4, 0xa6, 0x72, 0x9a, 0xc9, 0x09, 0x78, + 0x65, 0x2f, 0x8a, 0x05, 0x21, 0x0f, 0xe1, 0x24, 0x12, 0xf0, 0x82, 0x45, 0x35, 0x93, 0xda, 0x8e, + 0x96, 0x8f, 0xdb, 0xbd, 0x36, 0xd0, 0xce, 0x94, 0x13, 0x5c, 0xd2, 0xf1, 0x40, 0x46, 0x83, 0x38, + 0x66, 0xdd, 0xfd, 0x30, 0xbf, 0x06, 0x8b, 0x62, 0xb3, 0x25, 0xe2, 0x98, 0x22, 0x88, 0x91, 0x10, + 0x7e, 0x6e, 0x48, 0xc3, 0xa3, 0xb6, 0x1e, 0x42, 0x3a, 0x6b, 0x28, 0x54, 0xfa, 0x85, 0x3d, 0xba, + 0x2b, 0x79, 0x0a, 0x15, 0x9b, 0x9f, 0x5e, 0xca, 0x4e, 0xd4, 0xac, 0xe5, 0xf3, 0x73, 0xa7, 0x57, + 0xaf, 0x58, 0xa8, 0x50, 0xf4, 0xea, 0xd6, 0x74, 0x4f, 0xae, 0xe9, 0xd5, 0xe7, 0xe6, 0xad, 0xe8, + 0x2c, 0xd7, 0x75, 0x7a, 0xeb, 0x16, 0x0b, 0xf5, 0x59, 0xcb, 0x5f, 0xb0, 0x9c, 0xa9, 0x51, 0xa0, + 0x7f, 0x0c, 0xf6, 0x6f, 0x17, 0xc4, 0x49, 0xec, 0xd8, 0x43, 0x1f, 0x2d, 0xa4, 0x76, 0x7b, 0xb7, + 0xcc, 0xbb, 0x3e, 0x5a, 0xfb, 0x60, 0xb1, 0x86, 0x3b, 0x52, 0xa1, 0x6c, 0xaa, 0x55, 0x29, 0x9d, + 0x97, 0xb2, 0x87, 0x90, 0x61, 0xbe, 0xdc, 0xfc, 0xbc, 0x95, 0xcf, 0xcd, 0x37, 0x3f, 0x5b, 0xd1, + 0x53, 0x39, 0x84, 0x3c, 0x41, 0xa2, 0x6d, 0x47, 0x14, 0x2a, 0x9e, 0x5d, 0x56, 0xf2, 0xd3, 0xab, + 0x44, 0x11, 0x92, 0xd9, 0x23, 0x20, 0x2e, 0x89, 0xb4, 0x7c, 0xb8, 0x26, 0x77, 0x99, 0xe3, 0xa5, + 0x67, 0x4a, 0xed, 0xde, 0xc5, 0x31, 0xfe, 0x18, 0x0d, 0x63, 0x8c, 0x80, 0xc0, 0xf7, 0x70, 0x07) def sub_bytes(data): return [SBOX[x] for x in data] +def sub_bytes_inv(data): + return [SBOX_INV[x] for x in data] + def rotate(data): return data[1:] + [data[0]] @@ -160,30 +260,31 @@ def key_schedule_core(data, rcon_iteration): def xor(data1, data2): return [x^y for x, y in zip(data1, data2)] -def mix_column(data): +def rijndael_mul(a, b): + if(a==0 or b==0): + return 0 + return RIJNDAEL_EXP_TABLE[(RIJNDAEL_LOG_TABLE[a] + RIJNDAEL_LOG_TABLE[b]) % 0xFF] + +def mix_column(data, matrix): data_mixed = [] for row in range(4): mixed = 0 for column in range(4): - addend = data[column] - if MIX_COLUMN_MATRIX[row][column] in (2,3): - addend <<= 1 - if addend > 0xff: - addend &= 0xff - addend ^= 0x1b - if MIX_COLUMN_MATRIX[row][column] == 3: - addend ^= data[column] - mixed ^= addend & 0xff + # xor is (+) and (-) + mixed ^= rijndael_mul(data[column], matrix[row][column]) data_mixed.append(mixed) return data_mixed -def mix_columns(data): +def mix_columns(data, matrix=MIX_COLUMN_MATRIX): data_mixed = [] for i in range(4): column = data[i*4 : (i+1)*4] - data_mixed += mix_column(column) + data_mixed += mix_column(column, matrix) return data_mixed +def mix_columns_inv(data): + return mix_columns(data, MIX_COLUMN_MATRIX_INV) + def shift_rows(data): data_shifted = [] for column in range(4): @@ -191,6 +292,13 @@ def shift_rows(data): data_shifted.append( data[((column + row) & 0b11) * 4 + row] ) return data_shifted +def shift_rows_inv(data): + data_shifted = [] + for column in range(4): + for row in range(4): + data_shifted.append( data[((column - row) & 0b11) * 4 + row] ) + return data_shifted + def inc(data): data = data[:] # copy for i in range(len(data)-1,-1,-1): diff --git a/youtube_dl/extractor/__init__.py b/youtube_dl/extractor/__init__.py index bd99648..a39a1e2 100644 --- a/youtube_dl/extractor/__init__.py +++ b/youtube_dl/extractor/__init__.py @@ -1,6 +1,8 @@ -from .appletrailers import AppleTrailersIE +from .academicearth import AcademicEarthCourseIE from .addanime import AddAnimeIE from .anitube import AnitubeIE +from .aparat import AparatIE +from .appletrailers import AppleTrailersIE from .archiveorg import ArchiveOrgIE from .ard import ARDIE from .arte import ( @@ -8,10 +10,12 @@ from .arte import ( ArteTVPlus7IE, ArteTVCreativeIE, ArteTVFutureIE, + ArteTVDDCIE, ) from .auengine import AUEngineIE from .bambuser import BambuserIE, BambuserChannelIE from .bandcamp import BandcampIE, BandcampAlbumIE +from .blinkx import BlinkxIE from .bliptv import BlipTVIE, BlipTVUserIE from .bloomberg import BloombergIE from .breakcom import BreakIE @@ -19,6 +23,8 @@ from .brightcove import BrightcoveIE from .c56 import C56IE from .canalplus import CanalplusIE from .canalc2 import Canalc2IE +from .cbs import CBSIE +from .channel9 import Channel9IE from .cinemassacre import CinemassacreIE from .clipfish import ClipfishIE from .clipsyndicate import ClipsyndicateIE @@ -27,6 +33,7 @@ from .collegehumor import CollegeHumorIE from .comedycentral import ComedyCentralIE, ComedyCentralShowsIE from .condenast import CondeNastIE from .criterion import CriterionIE +from .crunchyroll import CrunchyrollIE from .cspan import CSpanIE from .d8 import D8IE from .dailymotion import ( @@ -56,7 +63,7 @@ from .flickr import FlickrIE from .francetv import ( PluzzIE, FranceTvInfoIE, - France2IE, + FranceTVIE, GenerationQuoiIE ) from .freesound import FreesoundIE @@ -77,6 +84,10 @@ from .ina import InaIE from .infoq import InfoQIE from .instagram import InstagramIE from .internetvideoarchive import InternetVideoArchiveIE +from .ivi import ( + IviIE, + IviCompilationIE +) from .jeuxvideo import JeuxVideoIE from .jukebox import JukeboxIE from .justintv import JustinTVIE @@ -86,6 +97,7 @@ from .kickstarter import KickStarterIE from .keek import KeekIE from .liveleak import LiveLeakIE from .livestream import LivestreamIE, LivestreamOriginalIE +from .mdr import MDRIE from .metacafe import MetacafeIE from .metacritic import MetacriticIE from .mit import TechTVMITIE, MITIE @@ -99,17 +111,22 @@ from .myvideo import MyVideoIE from .naver import NaverIE from .nba import NBAIE from .nbc import NBCNewsIE +from .ndtv import NDTVIE from .newgrounds import NewgroundsIE from .nhl import NHLIE, NHLVideocenterIE from .niconico import NiconicoIE +from .ninegag import NineGagIE from .nowvideo import NowVideoIE from .ooyala import OoyalaIE from .orf import ORFIE from .pbs import PBSIE from .photobucket import PhotobucketIE from .podomatic import PodomaticIE +from .pornhd import PornHdIE from .pornhub import PornHubIE from .pornotube import PornotubeIE +from .pyvideo import PyvideoIE +from .radiofrance import RadioFranceIE from .rbmaradio import RBMARadioIE from .redtube import RedTubeIE from .ringtv import RingTVIE @@ -125,6 +142,7 @@ from .smotri import ( SmotriIE, SmotriCommunityIE, SmotriUserIE, + SmotriBroadcastIE, ) from .sohu import SohuIE from .soundcloud import SoundcloudIE, SoundcloudSetIE, SoundcloudUserIE @@ -144,6 +162,7 @@ from .teamcoco import TeamcocoIE from .techtalks import TechTalksIE from .ted import TEDIE from .tf1 import TF1IE +from .theplatform import ThePlatformIE from .thisav import ThisAVIE from .toutv import TouTvIE from .traileraddict import TrailerAddictIE @@ -168,6 +187,8 @@ from .vimeo import ( VimeoIE, VimeoChannelIE, VimeoUserIE, + VimeoAlbumIE, + VimeoGroupsIE, ) from .vine import VineIE from .viki import VikiIE @@ -176,6 +197,7 @@ from .wat import WatIE from .websurg import WeBSurgIE from .weibo import WeiboIE from .wimp import WimpIE +from .wistia import WistiaIE from .worldstarhiphop import WorldStarHipHopIE from .xhamster import XHamsterIE from .xnxx import XNXXIE @@ -203,6 +225,7 @@ from .youtube import ( YoutubeWatchLaterIE, YoutubeFavouritesIE, YoutubeHistoryIE, + YoutubeTopListIE, ) from .zdf import ZDFIE diff --git a/youtube_dl/extractor/academicearth.py b/youtube_dl/extractor/academicearth.py new file mode 100644 index 0000000..ac05f82 --- /dev/null +++ b/youtube_dl/extractor/academicearth.py @@ -0,0 +1,31 @@ +import re + +from .common import InfoExtractor + + +class AcademicEarthCourseIE(InfoExtractor): + _VALID_URL = r'^https?://(?:www\.)?academicearth\.org/(?:courses|playlists)/(?P<id>[^?#/]+)' + IE_NAME = u'AcademicEarth:Course' + + def _real_extract(self, url): + m = re.match(self._VALID_URL, url) + playlist_id = m.group('id') + + webpage = self._download_webpage(url, playlist_id) + title = self._html_search_regex( + r'<h1 class="playlist-name">(.*?)</h1>', webpage, u'title') + description = self._html_search_regex( + r'<p class="excerpt">(.*?)</p>', + webpage, u'description', fatal=False) + urls = re.findall( + r'<h3 class="lecture-title"><a target="_blank" href="([^"]+)">', + webpage) + entries = [self.url_result(u) for u in urls] + + return { + '_type': 'playlist', + 'id': playlist_id, + 'title': title, + 'description': description, + 'entries': entries, + } diff --git a/youtube_dl/extractor/addanime.py b/youtube_dl/extractor/addanime.py index b99d4b9..a3a1b99 100644 --- a/youtube_dl/extractor/addanime.py +++ b/youtube_dl/extractor/addanime.py @@ -13,7 +13,7 @@ from ..utils import ( class AddAnimeIE(InfoExtractor): - _VALID_URL = r'^http://(?:\w+\.)?add-anime\.net/watch_video.php\?(?:.*?)v=(?P<video_id>[\w_]+)(?:.*)' + _VALID_URL = r'^http://(?:\w+\.)?add-anime\.net/watch_video\.php\?(?:.*?)v=(?P<video_id>[\w_]+)(?:.*)' IE_NAME = u'AddAnime' _TEST = { u'url': u'http://www.add-anime.net/watch_video.php?v=24MR3YO5SAS9', diff --git a/youtube_dl/extractor/aparat.py b/youtube_dl/extractor/aparat.py new file mode 100644 index 0000000..7e93bc4 --- /dev/null +++ b/youtube_dl/extractor/aparat.py @@ -0,0 +1,56 @@ +#coding: utf-8 + +import re + +from .common import InfoExtractor +from ..utils import ( + ExtractorError, + HEADRequest, +) + + +class AparatIE(InfoExtractor): + _VALID_URL = r'^https?://(?:www\.)?aparat\.com/(?:v/|video/video/embed/videohash/)(?P<id>[a-zA-Z0-9]+)' + + _TEST = { + u'url': u'http://www.aparat.com/v/wP8On', + u'file': u'wP8On.mp4', + u'md5': u'6714e0af7e0d875c5a39c4dc4ab46ad1', + u'info_dict': { + u"title": u"تÛÙ Ú¯ÙÚ©Ø³Û 11 - زÙÙ Ûت", + }, + #u'skip': u'Extremely unreliable', + } + + def _real_extract(self, url): + m = re.match(self._VALID_URL, url) + video_id = m.group('id') + + # Note: There is an easier-to-parse configuration at + # http://www.aparat.com/video/video/config/videohash/%video_id + # but the URL in there does not work + embed_url = (u'http://www.aparat.com/video/video/embed/videohash/' + + video_id + u'/vt/frame') + webpage = self._download_webpage(embed_url, video_id) + + video_urls = re.findall(r'fileList\[[0-9]+\]\s*=\s*"([^"]+)"', webpage) + for i, video_url in enumerate(video_urls): + req = HEADRequest(video_url) + res = self._request_webpage( + req, video_id, note=u'Testing video URL %d' % i, errnote=False) + if res: + break + else: + raise ExtractorError(u'No working video URLs found') + + title = self._search_regex(r'\s+title:\s*"([^"]+)"', webpage, u'title') + thumbnail = self._search_regex( + r'\s+image:\s*"([^"]+)"', webpage, u'thumbnail', fatal=False) + + return { + 'id': video_id, + 'title': title, + 'url': video_url, + 'ext': 'mp4', + 'thumbnail': thumbnail, + } diff --git a/youtube_dl/extractor/appletrailers.py b/youtube_dl/extractor/appletrailers.py index 4befff3..ef5644a 100644 --- a/youtube_dl/extractor/appletrailers.py +++ b/youtube_dl/extractor/appletrailers.py @@ -1,5 +1,4 @@ import re -import xml.etree.ElementTree import json from .common import InfoExtractor @@ -10,7 +9,7 @@ from ..utils import ( class AppleTrailersIE(InfoExtractor): - _VALID_URL = r'https?://(?:www\.)?trailers.apple.com/trailers/(?P<company>[^/]+)/(?P<movie>[^/]+)' + _VALID_URL = r'https?://(?:www\.)?trailers\.apple\.com/trailers/(?P<company>[^/]+)/(?P<movie>[^/]+)' _TEST = { u"url": u"http://trailers.apple.com/trailers/wb/manofsteel/", u"playlist": [ @@ -65,18 +64,18 @@ class AppleTrailersIE(InfoExtractor): uploader_id = mobj.group('company') playlist_url = compat_urlparse.urljoin(url, u'includes/playlists/itunes.inc') - playlist_snippet = self._download_webpage(playlist_url, movie) - playlist_cleaned = re.sub(r'(?s)<script[^<]*?>.*?</script>', u'', playlist_snippet) - playlist_cleaned = re.sub(r'<img ([^<]*?)>', r'<img \1/>', playlist_cleaned) - # The ' in the onClick attributes are not escaped, it couldn't be parsed - # with xml.etree.ElementTree.fromstring - # like: http://trailers.apple.com/trailers/wb/gravity/ - def _clean_json(m): - return u'iTunes.playURL(%s);' % m.group(1).replace('\'', ''') - playlist_cleaned = re.sub(self._JSON_RE, _clean_json, playlist_cleaned) - playlist_html = u'<html>' + playlist_cleaned + u'</html>' + def fix_html(s): + s = re.sub(r'(?s)<script[^<]*?>.*?</script>', u'', s) + s = re.sub(r'<img ([^<]*?)>', r'<img \1/>', s) + # The ' in the onClick attributes are not escaped, it couldn't be parsed + # like: http://trailers.apple.com/trailers/wb/gravity/ + def _clean_json(m): + return u'iTunes.playURL(%s);' % m.group(1).replace('\'', ''') + s = re.sub(self._JSON_RE, _clean_json, s) + s = u'<html>' + s + u'</html>' + return s + doc = self._download_xml(playlist_url, movie, transform_source=fix_html) - doc = xml.etree.ElementTree.fromstring(playlist_html) playlist = [] for li in doc.findall('./div/ul/li'): on_click = li.find('.//a').attrib['onClick'] diff --git a/youtube_dl/extractor/archiveorg.py b/youtube_dl/extractor/archiveorg.py index 3ae0aeb..8bb5464 100644 --- a/youtube_dl/extractor/archiveorg.py +++ b/youtube_dl/extractor/archiveorg.py @@ -11,7 +11,7 @@ from ..utils import ( class ArchiveOrgIE(InfoExtractor): IE_NAME = 'archive.org' IE_DESC = 'archive.org videos' - _VALID_URL = r'(?:https?://)?(?:www\.)?archive.org/details/(?P<id>[^?/]+)(?:[?].*)?$' + _VALID_URL = r'(?:https?://)?(?:www\.)?archive\.org/details/(?P<id>[^?/]+)(?:[?].*)?$' _TEST = { u"url": u"http://archive.org/details/XD300-23_68HighlightsAResearchCntAugHumanIntellect", u'file': u'XD300-23_68HighlightsAResearchCntAugHumanIntellect.ogv', diff --git a/youtube_dl/extractor/arte.py b/youtube_dl/extractor/arte.py index 8b62ee7..9254fbf 100644 --- a/youtube_dl/extractor/arte.py +++ b/youtube_dl/extractor/arte.py @@ -10,6 +10,7 @@ from ..utils import ( determine_ext, get_element_by_id, compat_str, + get_element_by_attribute, ) # There are different sources of video in arte.tv, the extraction process @@ -17,8 +18,8 @@ from ..utils import ( # add tests. class ArteTvIE(InfoExtractor): - _VIDEOS_URL = r'(?:http://)?videos.arte.tv/(?P<lang>fr|de)/.*-(?P<id>.*?).html' - _LIVEWEB_URL = r'(?:http://)?liveweb.arte.tv/(?P<lang>fr|de)/(?P<subpage>.+?)/(?P<name>.+)' + _VIDEOS_URL = r'(?:http://)?videos\.arte\.tv/(?P<lang>fr|de)/.*-(?P<id>.*?)\.html' + _LIVEWEB_URL = r'(?:http://)?liveweb\.arte\.tv/(?P<lang>fr|de)/(?P<subpage>.+?)/(?P<name>.+)' _LIVE_URL = r'index-[0-9]+\.html$' IE_NAME = u'arte.tv' @@ -142,7 +143,9 @@ class ArteTVPlus7IE(InfoExtractor): def _extract_from_webpage(self, webpage, video_id, lang): json_url = self._html_search_regex(r'arte_vp_url="(.*?)"', webpage, 'json url') + return self._extract_from_json_url(json_url, video_id, lang) + def _extract_from_json_url(self, json_url, video_id, lang): json_info = self._download_webpage(json_url, video_id, 'Downloading info json') self.report_extraction(video_id) info = json.loads(json_info) @@ -257,3 +260,21 @@ class ArteTVFutureIE(ArteTVPlus7IE): webpage = self._download_webpage(url, anchor_id) row = get_element_by_id(anchor_id, webpage) return self._extract_from_webpage(row, anchor_id, lang) + + +class ArteTVDDCIE(ArteTVPlus7IE): + IE_NAME = u'arte.tv:ddc' + _VALID_URL = r'http?://ddc\.arte\.tv/(?P<lang>emission|folge)/(?P<id>.+)' + + def _real_extract(self, url): + video_id, lang = self._extract_url_info(url) + if lang == 'folge': + lang = 'de' + elif lang == 'emission': + lang = 'fr' + webpage = self._download_webpage(url, video_id) + scriptElement = get_element_by_attribute('class', 'visu_video_block', webpage) + script_url = self._html_search_regex(r'src="(.*?)"', scriptElement, 'script url') + javascriptPlayerGenerator = self._download_webpage(script_url, video_id, 'Download javascript player generator') + json_url = self._search_regex(r"json_url=(.*)&rendering_place.*", javascriptPlayerGenerator, 'json url') + return self._extract_from_json_url(json_url, video_id, lang) diff --git a/youtube_dl/extractor/auengine.py b/youtube_dl/extractor/auengine.py index 95c0380..bcccc0b 100644 --- a/youtube_dl/extractor/auengine.py +++ b/youtube_dl/extractor/auengine.py @@ -16,7 +16,7 @@ class AUEngineIE(InfoExtractor): u"title": u"[Commie]The Legend of the Legendary Heroes - 03 - Replication Eye (Alpha Stigma)[F9410F5A]" } } - _VALID_URL = r'(?:http://)?(?:www\.)?auengine\.com/embed.php\?.*?file=([^&]+).*?' + _VALID_URL = r'(?:http://)?(?:www\.)?auengine\.com/embed\.php\?.*?file=([^&]+).*?' def _real_extract(self, url): mobj = re.match(self._VALID_URL, url) diff --git a/youtube_dl/extractor/bambuser.py b/youtube_dl/extractor/bambuser.py index b80508e..d48c0c3 100644 --- a/youtube_dl/extractor/bambuser.py +++ b/youtube_dl/extractor/bambuser.py @@ -54,7 +54,7 @@ class BambuserIE(InfoExtractor): class BambuserChannelIE(InfoExtractor): IE_NAME = u'bambuser:channel' - _VALID_URL = r'http://bambuser.com/channel/(?P<user>.*?)(?:/|#|\?|$)' + _VALID_URL = r'https?://bambuser\.com/channel/(?P<user>.*?)(?:/|#|\?|$)' # The maximum number we can get with each request _STEP = 50 diff --git a/youtube_dl/extractor/blinkx.py b/youtube_dl/extractor/blinkx.py new file mode 100644 index 0000000..144ce64 --- /dev/null +++ b/youtube_dl/extractor/blinkx.py @@ -0,0 +1,90 @@ +import datetime +import json +import re + +from .common import InfoExtractor +from ..utils import ( + remove_start, +) + + +class BlinkxIE(InfoExtractor): + _VALID_URL = r'^(?:https?://(?:www\.)blinkx\.com/#?ce/|blinkx:)(?P<id>[^?]+)' + _IE_NAME = u'blinkx' + + _TEST = { + u'url': u'http://www.blinkx.com/ce/8aQUy7GVFYgFzpKhT0oqsilwOGFRVXk3R1ZGWWdGenBLaFQwb3FzaWx3OGFRVXk3R1ZGWWdGenB', + u'file': u'8aQUy7GV.mp4', + u'md5': u'2e9a07364af40163a908edbf10bb2492', + u'info_dict': { + u"title": u"Police Car Rolls Away", + u"uploader": u"stupidvideos.com", + u"upload_date": u"20131215", + u"description": u"A police car gently rolls away from a fight. Maybe it felt weird being around a confrontation and just had to get out of there!", + u"duration": 14.886, + u"thumbnails": [{ + "width": 100, + "height": 76, + "url": "http://cdn.blinkx.com/stream/b/41/StupidVideos/20131215/1873969261/1873969261_tn_0.jpg", + }], + }, + } + + def _real_extract(self, url): + m = re.match(self._VALID_URL, url) + video_id = m.group('id') + display_id = video_id[:8] + + api_url = (u'https://apib4.blinkx.com/api.php?action=play_video&' + + u'video=%s' % video_id) + data_json = self._download_webpage(api_url, display_id) + data = json.loads(data_json)['api']['results'][0] + dt = datetime.datetime.fromtimestamp(data['pubdate_epoch']) + upload_date = dt.strftime('%Y%m%d') + + duration = None + thumbnails = [] + formats = [] + for m in data['media']: + if m['type'] == 'jpg': + thumbnails.append({ + 'url': m['link'], + 'width': int(m['w']), + 'height': int(m['h']), + }) + elif m['type'] == 'original': + duration = m['d'] + elif m['type'] == 'youtube': + yt_id = m['link'] + self.to_screen(u'Youtube video detected: %s' % yt_id) + return self.url_result(yt_id, 'Youtube', video_id=yt_id) + elif m['type'] in ('flv', 'mp4'): + vcodec = remove_start(m['vcodec'], 'ff') + acodec = remove_start(m['acodec'], 'ff') + format_id = (u'%s-%sk-%s' % + (vcodec, + (int(m['vbr']) + int(m['abr'])) // 1000, + m['w'])) + formats.append({ + 'format_id': format_id, + 'url': m['link'], + 'vcodec': vcodec, + 'acodec': acodec, + 'abr': int(m['abr']) // 1000, + 'vbr': int(m['vbr']) // 1000, + 'width': int(m['w']), + 'height': int(m['h']), + }) + formats.sort(key=lambda f: (f['width'], f['vbr'], f['abr'])) + + return { + 'id': display_id, + 'fullid': video_id, + 'title': data['title'], + 'formats': formats, + 'uploader': data['channel_name'], + 'upload_date': upload_date, + 'description': data.get('description'), + 'thumbnails': thumbnails, + 'duration': duration, + } diff --git a/youtube_dl/extractor/bliptv.py b/youtube_dl/extractor/bliptv.py index 493504f..5e33a69 100644 --- a/youtube_dl/extractor/bliptv.py +++ b/youtube_dl/extractor/bliptv.py @@ -51,8 +51,7 @@ class BlipTVIE(InfoExtractor): url = 'http://blip.tv/play/g_%s' % api_mobj.group('video_id') urlp = compat_urllib_parse_urlparse(url) if urlp.path.startswith('/play/'): - request = compat_urllib_request.Request(url) - response = compat_urllib_request.urlopen(request) + response = self._request_webpage(url, None, False) redirecturl = response.geturl() rurlp = compat_urllib_parse_urlparse(redirecturl) file_id = compat_parse_qs(rurlp.fragment)['file'][0].rpartition('/')[2] @@ -69,25 +68,23 @@ class BlipTVIE(InfoExtractor): request.add_header('User-Agent', 'iTunes/10.6.1') self.report_extraction(mobj.group(1)) info = None - try: - urlh = compat_urllib_request.urlopen(request) - if urlh.headers.get('Content-Type', '').startswith('video/'): # Direct download - basename = url.split('/')[-1] - title,ext = os.path.splitext(basename) - title = title.decode('UTF-8') - ext = ext.replace('.', '') - self.report_direct_download(title) - info = { - 'id': title, - 'url': url, - 'uploader': None, - 'upload_date': None, - 'title': title, - 'ext': ext, - 'urlhandle': urlh - } - except (compat_urllib_error.URLError, compat_http_client.HTTPException, socket.error) as err: - raise ExtractorError(u'ERROR: unable to download video info webpage: %s' % compat_str(err)) + urlh = self._request_webpage(request, None, False, + u'unable to download video info webpage') + if urlh.headers.get('Content-Type', '').startswith('video/'): # Direct download + basename = url.split('/')[-1] + title,ext = os.path.splitext(basename) + title = title.decode('UTF-8') + ext = ext.replace('.', '') + self.report_direct_download(title) + info = { + 'id': title, + 'url': url, + 'uploader': None, + 'upload_date': None, + 'title': title, + 'ext': ext, + 'urlhandle': urlh + } if info is None: # Regular URL try: json_code_bytes = urlh.read() diff --git a/youtube_dl/extractor/bloomberg.py b/youtube_dl/extractor/bloomberg.py index 3666a78..755d9c9 100644 --- a/youtube_dl/extractor/bloomberg.py +++ b/youtube_dl/extractor/bloomberg.py @@ -4,7 +4,7 @@ from .common import InfoExtractor class BloombergIE(InfoExtractor): - _VALID_URL = r'https?://www\.bloomberg\.com/video/(?P<name>.+?).html' + _VALID_URL = r'https?://www\.bloomberg\.com/video/(?P<name>.+?)\.html' _TEST = { u'url': u'http://www.bloomberg.com/video/shah-s-presentation-on-foreign-exchange-strategies-qurhIVlJSB6hzkVi229d8g.html', diff --git a/youtube_dl/extractor/brightcove.py b/youtube_dl/extractor/brightcove.py index 66fe0ac..f7f0041 100644 --- a/youtube_dl/extractor/brightcove.py +++ b/youtube_dl/extractor/brightcove.py @@ -26,7 +26,7 @@ class BrightcoveIE(InfoExtractor): # From http://www.8tv.cat/8aldia/videos/xavier-sala-i-martin-aquesta-tarda-a-8-al-dia/ u'url': u'http://c.brightcove.com/services/viewer/htmlFederated?playerID=1654948606001&flashID=myExperience&%40videoPlayer=2371591881001', u'file': u'2371591881001.mp4', - u'md5': u'8eccab865181d29ec2958f32a6a754f5', + u'md5': u'5423e113865d26e40624dce2e4b45d95', u'note': u'Test Brightcove downloads and detection in GenericIE', u'info_dict': { u'title': u'Xavier Sala i MartÃn: âUn banc que no presta és un banc zombi que no serveix per a resâ', @@ -55,6 +55,18 @@ class BrightcoveIE(InfoExtractor): u'uploader': u'Mashable', }, }, + { + # test that the default referer works + # from http://national.ballet.ca/interact/video/Lost_in_Motion_II/ + u'url': u'http://link.brightcove.com/services/player/bcpid756015033001?bckey=AQ~~,AAAApYJi_Ck~,GxhXCegT1Dp39ilhXuxMJxasUhVNZiil&bctid=2878862109001', + u'info_dict': { + u'id': u'2878862109001', + u'ext': u'mp4', + u'title': u'Lost in Motion II', + u'description': u'md5:363109c02998fee92ec02211bd8000df', + u'uploader': u'National Ballet of Canada', + }, + }, ] @classmethod @@ -118,17 +130,21 @@ class BrightcoveIE(InfoExtractor): videoPlayer = query.get('@videoPlayer') if videoPlayer: - return self._get_video_info(videoPlayer[0], query_str, query) + return self._get_video_info(videoPlayer[0], query_str, query, + # We set the original url as the default 'Referer' header + referer=url) else: player_key = query['playerKey'] return self._get_playlist_info(player_key[0]) - def _get_video_info(self, video_id, query_str, query): + def _get_video_info(self, video_id, query_str, query, referer=None): request_url = self._FEDERATED_URL_TEMPLATE % query_str req = compat_urllib_request.Request(request_url) linkBase = query.get('linkBaseURL') if linkBase is not None: - req.add_header('Referer', linkBase[0]) + referer = linkBase[0] + if referer is not None: + req.add_header('Referer', referer) webpage = self._download_webpage(req, video_id) self.report_extraction(video_id) diff --git a/youtube_dl/extractor/cbs.py b/youtube_dl/extractor/cbs.py new file mode 100644 index 0000000..ac03158 --- /dev/null +++ b/youtube_dl/extractor/cbs.py @@ -0,0 +1,30 @@ +import re + +from .common import InfoExtractor + + +class CBSIE(InfoExtractor): + _VALID_URL = r'https?://(?:www\.)?cbs\.com/shows/[^/]+/video/(?P<id>[^/]+)/.*' + + _TEST = { + u'url': u'http://www.cbs.com/shows/garth-brooks/video/_u7W953k6la293J7EPTd9oHkSPs6Xn6_/connect-chat-feat-garth-brooks/', + u'file': u'4JUVEwq3wUT7.flv', + u'info_dict': { + u'title': u'Connect Chat feat. Garth Brooks', + u'description': u'Connect with country music singer Garth Brooks, as he chats with fans on Wednesday November 27, 2013. Be sure to tune in to Garth Brooks: Live from Las Vegas, Friday November 29, at 9/8c on CBS!', + u'duration': 1495, + }, + u'params': { + # rtmp download + u'skip_download': True, + }, + } + + def _real_extract(self, url): + mobj = re.match(self._VALID_URL, url) + video_id = mobj.group('id') + webpage = self._download_webpage(url, video_id) + real_id = self._search_regex( + r"video\.settings\.pid\s*=\s*'([^']+)';", + webpage, u'real video ID') + return self.url_result(u'theplatform:%s' % real_id) diff --git a/youtube_dl/extractor/channel9.py b/youtube_dl/extractor/channel9.py new file mode 100644 index 0000000..ae70ea2 --- /dev/null +++ b/youtube_dl/extractor/channel9.py @@ -0,0 +1,267 @@ +# encoding: utf-8 + +import re + +from .common import InfoExtractor +from ..utils import ExtractorError + +class Channel9IE(InfoExtractor): + ''' + Common extractor for channel9.msdn.com. + + The type of provided URL (video or playlist) is determined according to + meta Search.PageType from web page HTML rather than URL itself, as it is + not always possible to do. + ''' + IE_DESC = u'Channel 9' + IE_NAME = u'channel9' + _VALID_URL = r'^https?://(?:www\.)?channel9\.msdn\.com/(?P<contentpath>.+)/?' + + _TESTS = [ + { + u'url': u'http://channel9.msdn.com/Events/TechEd/Australia/2013/KOS002', + u'file': u'Events_TechEd_Australia_2013_KOS002.mp4', + u'md5': u'bbd75296ba47916b754e73c3a4bbdf10', + u'info_dict': { + u'title': u'Developer Kick-Off Session: Stuff We Love', + u'description': u'md5:c08d72240b7c87fcecafe2692f80e35f', + u'duration': 4576, + u'thumbnail': u'http://media.ch9.ms/ch9/9d51/03902f2d-fc97-4d3c-b195-0bfe15a19d51/KOS002_220.jpg', + u'session_code': u'KOS002', + u'session_day': u'Day 1', + u'session_room': u'Arena 1A', + u'session_speakers': [ u'Ed Blankenship', u'Andrew Coates', u'Brady Gaster', u'Patrick Klug', u'Mads Kristensen' ], + }, + }, + { + u'url': u'http://channel9.msdn.com/posts/Self-service-BI-with-Power-BI-nuclear-testing', + u'file': u'posts_Self-service-BI-with-Power-BI-nuclear-testing.mp4', + u'md5': u'b43ee4529d111bc37ba7ee4f34813e68', + u'info_dict': { + u'title': u'Self-service BI with Power BI - nuclear testing', + u'description': u'md5:d1e6ecaafa7fb52a2cacdf9599829f5b', + u'duration': 1540, + u'thumbnail': u'http://media.ch9.ms/ch9/87e1/0300391f-a455-4c72-bec3-4422f19287e1/selfservicenuk_512.jpg', + u'authors': [ u'Mike Wilmot' ], + }, + } + ] + + _RSS_URL = 'http://channel9.msdn.com/%s/RSS' + + # Sorted by quality + _known_formats = ['MP3', 'MP4', 'Mid Quality WMV', 'Mid Quality MP4', 'High Quality WMV', 'High Quality MP4'] + + def _restore_bytes(self, formatted_size): + if not formatted_size: + return 0 + m = re.match(r'^(?P<size>\d+(?:\.\d+)?)\s+(?P<units>[a-zA-Z]+)', formatted_size) + if not m: + return 0 + units = m.group('units') + try: + exponent = [u'B', u'KB', u'MB', u'GB', u'TB', u'PB', u'EB', u'ZB', u'YB'].index(units.upper()) + except ValueError: + return 0 + size = float(m.group('size')) + return int(size * (1024 ** exponent)) + + def _formats_from_html(self, html): + FORMAT_REGEX = r''' + (?x) + <a\s+href="(?P<url>[^"]+)">(?P<quality>[^<]+)</a>\s* + <span\s+class="usage">\((?P<note>[^\)]+)\)</span>\s* + (?:<div\s+class="popup\s+rounded">\s* + <h3>File\s+size</h3>\s*(?P<filesize>.*?)\s* + </div>)? # File size part may be missing + ''' + # Extract known formats + formats = [{'url': x.group('url'), + 'format_id': x.group('quality'), + 'format_note': x.group('note'), + 'format': '%s (%s)' % (x.group('quality'), x.group('note')), + 'filesize': self._restore_bytes(x.group('filesize')), # File size is approximate + } for x in list(re.finditer(FORMAT_REGEX, html)) if x.group('quality') in self._known_formats] + # Sort according to known formats list + formats.sort(key=lambda fmt: self._known_formats.index(fmt['format_id'])) + return formats + + def _extract_title(self, html): + title = self._html_search_meta(u'title', html, u'title') + if title is None: + title = self._og_search_title(html) + TITLE_SUFFIX = u' (Channel 9)' + if title is not None and title.endswith(TITLE_SUFFIX): + title = title[:-len(TITLE_SUFFIX)] + return title + + def _extract_description(self, html): + DESCRIPTION_REGEX = r'''(?sx) + <div\s+class="entry-content">\s* + <div\s+id="entry-body">\s* + (?P<description>.+?)\s* + </div>\s* + </div> + ''' + m = re.search(DESCRIPTION_REGEX, html) + if m is not None: + return m.group('description') + return self._html_search_meta(u'description', html, u'description') + + def _extract_duration(self, html): + m = re.search(r'data-video_duration="(?P<hours>\d{2}):(?P<minutes>\d{2}):(?P<seconds>\d{2})"', html) + return ((int(m.group('hours')) * 60 * 60) + (int(m.group('minutes')) * 60) + int(m.group('seconds'))) if m else None + + def _extract_slides(self, html): + m = re.search(r'<a href="(?P<slidesurl>[^"]+)" class="slides">Slides</a>', html) + return m.group('slidesurl') if m is not None else None + + def _extract_zip(self, html): + m = re.search(r'<a href="(?P<zipurl>[^"]+)" class="zip">Zip</a>', html) + return m.group('zipurl') if m is not None else None + + def _extract_avg_rating(self, html): + m = re.search(r'<p class="avg-rating">Avg Rating: <span>(?P<avgrating>[^<]+)</span></p>', html) + return float(m.group('avgrating')) if m is not None else 0 + + def _extract_rating_count(self, html): + m = re.search(r'<div class="rating-count">\((?P<ratingcount>[^<]+)\)</div>', html) + return int(self._fix_count(m.group('ratingcount'))) if m is not None else 0 + + def _extract_view_count(self, html): + m = re.search(r'<li class="views">\s*<span class="count">(?P<viewcount>[^<]+)</span> Views\s*</li>', html) + return int(self._fix_count(m.group('viewcount'))) if m is not None else 0 + + def _extract_comment_count(self, html): + m = re.search(r'<li class="comments">\s*<a href="#comments">\s*<span class="count">(?P<commentcount>[^<]+)</span> Comments\s*</a>\s*</li>', html) + return int(self._fix_count(m.group('commentcount'))) if m is not None else 0 + + def _fix_count(self, count): + return int(str(count).replace(',', '')) if count is not None else None + + def _extract_authors(self, html): + m = re.search(r'(?s)<li class="author">(.*?)</li>', html) + if m is None: + return None + return re.findall(r'<a href="/Niners/[^"]+">([^<]+)</a>', m.group(1)) + + def _extract_session_code(self, html): + m = re.search(r'<li class="code">\s*(?P<code>.+?)\s*</li>', html) + return m.group('code') if m is not None else None + + def _extract_session_day(self, html): + m = re.search(r'<li class="day">\s*<a href="/Events/[^"]+">(?P<day>[^<]+)</a>\s*</li>', html) + return m.group('day') if m is not None else None + + def _extract_session_room(self, html): + m = re.search(r'<li class="room">\s*(?P<room>.+?)\s*</li>', html) + return m.group('room') if m is not None else None + + def _extract_session_speakers(self, html): + return re.findall(r'<a href="/Events/Speakers/[^"]+">([^<]+)</a>', html) + + def _extract_content(self, html, content_path): + # Look for downloadable content + formats = self._formats_from_html(html) + slides = self._extract_slides(html) + zip_ = self._extract_zip(html) + + # Nothing to download + if len(formats) == 0 and slides is None and zip_ is None: + self._downloader.report_warning(u'None of recording, slides or zip are available for %s' % content_path) + return + + # Extract meta + title = self._extract_title(html) + description = self._extract_description(html) + thumbnail = self._og_search_thumbnail(html) + duration = self._extract_duration(html) + avg_rating = self._extract_avg_rating(html) + rating_count = self._extract_rating_count(html) + view_count = self._extract_view_count(html) + comment_count = self._extract_comment_count(html) + + common = {'_type': 'video', + 'id': content_path, + 'description': description, + 'thumbnail': thumbnail, + 'duration': duration, + 'avg_rating': avg_rating, + 'rating_count': rating_count, + 'view_count': view_count, + 'comment_count': comment_count, + } + + result = [] + + if slides is not None: + d = common.copy() + d.update({ 'title': title + '-Slides', 'url': slides }) + result.append(d) + + if zip_ is not None: + d = common.copy() + d.update({ 'title': title + '-Zip', 'url': zip_ }) + result.append(d) + + if len(formats) > 0: + d = common.copy() + d.update({ 'title': title, 'formats': formats }) + result.append(d) + + return result + + def _extract_entry_item(self, html, content_path): + contents = self._extract_content(html, content_path) + if contents is None: + return contents + + authors = self._extract_authors(html) + + for content in contents: + content['authors'] = authors + + return contents + + def _extract_session(self, html, content_path): + contents = self._extract_content(html, content_path) + if contents is None: + return contents + + session_meta = {'session_code': self._extract_session_code(html), + 'session_day': self._extract_session_day(html), + 'session_room': self._extract_session_room(html), + 'session_speakers': self._extract_session_speakers(html), + } + + for content in contents: + content.update(session_meta) + + return contents + + def _extract_list(self, content_path): + rss = self._download_xml(self._RSS_URL % content_path, content_path, u'Downloading RSS') + entries = [self.url_result(session_url.text, 'Channel9') + for session_url in rss.findall('./channel/item/link')] + title_text = rss.find('./channel/title').text + return self.playlist_result(entries, content_path, title_text) + + def _real_extract(self, url): + mobj = re.match(self._VALID_URL, url) + content_path = mobj.group('contentpath') + + webpage = self._download_webpage(url, content_path, u'Downloading web page') + + page_type_m = re.search(r'<meta name="Search.PageType" content="(?P<pagetype>[^"]+)"/>', webpage) + if page_type_m is None: + raise ExtractorError(u'Search.PageType not found, don\'t know how to process this page', expected=True) + + page_type = page_type_m.group('pagetype') + if page_type == 'List': # List page, may contain list of 'item'-like objects + return self._extract_list(content_path) + elif page_type == 'Entry.Item': # Any 'item'-like page, may contain downloadable content + return self._extract_entry_item(webpage, content_path) + elif page_type == 'Session': # Event session page, may contain downloadable content + return self._extract_session(webpage, content_path) + else: + raise ExtractorError(u'Unexpected Search.PageType %s' % page_type, expected=True) \ No newline at end of file diff --git a/youtube_dl/extractor/clipsyndicate.py b/youtube_dl/extractor/clipsyndicate.py index d4fc869..c60089a 100644 --- a/youtube_dl/extractor/clipsyndicate.py +++ b/youtube_dl/extractor/clipsyndicate.py @@ -1,9 +1,9 @@ import re -import xml.etree.ElementTree from .common import InfoExtractor from ..utils import ( find_xpath_attr, + fix_xml_all_ampersand, ) @@ -30,12 +30,10 @@ class ClipsyndicateIE(InfoExtractor): # it includes a required token flvars = self._search_regex(r'flvars: "(.*?)"', js_player, u'flvars') - playlist_page = self._download_webpage( + pdoc = self._download_xml( 'http://eplayer.clipsyndicate.com/osmf/playlist?%s' % flvars, - video_id, u'Downloading video info') - # Fix broken xml - playlist_page = re.sub('&', '&', playlist_page) - pdoc = xml.etree.ElementTree.fromstring(playlist_page.encode('utf-8')) + video_id, u'Downloading video info', + transform_source=fix_xml_all_ampersand) track_doc = pdoc.find('trackList/track') def find_param(name): diff --git a/youtube_dl/extractor/comedycentral.py b/youtube_dl/extractor/comedycentral.py index 53579aa..a54ce3e 100644 --- a/youtube_dl/extractor/comedycentral.py +++ b/youtube_dl/extractor/comedycentral.py @@ -12,7 +12,7 @@ from ..utils import ( class ComedyCentralIE(MTVServicesInfoExtractor): - _VALID_URL = r'http://www.comedycentral.com/(video-clips|episodes|cc-studios)/(?P<title>.*)' + _VALID_URL = r'https?://(?:www.)?comedycentral.com/(video-clips|episodes|cc-studios)/(?P<title>.*)' _FEED_URL = u'http://comedycentral.com/feeds/mrss/' _TEST = { diff --git a/youtube_dl/extractor/common.py b/youtube_dl/extractor/common.py index 1b04908..ba46a7b 100644 --- a/youtube_dl/extractor/common.py +++ b/youtube_dl/extractor/common.py @@ -18,6 +18,7 @@ from ..utils import ( sanitize_filename, unescapeHTML, ) +_NO_DEFAULT = object() class InfoExtractor(object): @@ -34,15 +35,39 @@ class InfoExtractor(object): The dictionaries must include the following fields: id: Video identifier. - url: Final video URL. title: Video title, unescaped. - ext: Video filename extension. - Instead of url and ext, formats can also specified. + Additionally, it must contain either a formats entry or url and ext: + + formats: A list of dictionaries for each format available, it must + be ordered from worst to best quality. Potential fields: + * url Mandatory. The URL of the video file + * ext Will be calculated from url if missing + * format A human-readable description of the format + ("mp4 container with h264/opus"). + Calculated from the format_id, width, height. + and format_note fields if missing. + * format_id A short description of the format + ("mp4_h264_opus" or "19") + * format_note Additional info about the format + ("3D" or "DASH video") + * width Width of the video, if known + * height Height of the video, if known + * abr Average audio bitrate in KBit/s + * acodec Name of the audio codec in use + * vbr Average video bitrate in KBit/s + * vcodec Name of the video codec in use + * filesize The number of bytes, if known in advance + * player_url SWF Player URL (used for rtmpdump). + url: Final video URL. + ext: Video filename extension. + format: The video format, defaults to ext (used for --get-format) + player_url: SWF Player URL (used for rtmpdump). + urlhandle: [internal] The urlHandle to be used to download the file, + like returned by urllib.request.urlopen The following fields are optional: - format: The video format, defaults to ext (used for --get-format) thumbnails: A list of dictionaries (with the entries "resolution" and "url") for the varying thumbnails thumbnail: Full URL to a video thumbnail image. @@ -51,32 +76,14 @@ class InfoExtractor(object): upload_date: Video upload date (YYYYMMDD). uploader_id: Nickname or id of the video uploader. location: Physical location of the video. - player_url: SWF Player URL (used for rtmpdump). subtitles: The subtitle file contents as a dictionary in the format {language: subtitles}. + duration: Length of the video in seconds, as an integer. 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 + like_count: Number of positive ratings of the video + dislike_count: Number of negative ratings of the video + comment_count: Number of comments on the video age_limit: Age restriction for the video, as an integer (years) - formats: A list of dictionaries for each format available, it must - be ordered from worst to best quality. Potential fields: - * url Mandatory. The URL of the video file - * ext Will be calculated from url if missing - * format A human-readable description of the format - ("mp4 container with h264/opus"). - Calculated from the format_id, width, height. - and format_note fields if missing. - * format_id A short description of the format - ("mp4_h264_opus" or "19") - * format_note Additional info about the format - ("3D" or "DASH video") - * width Width of the video, if known - * height Height of the video, if known - * abr Average audio bitrate in KBit/s - * acodec Name of the audio codec in use - * vbr Average video bitrate in KBit/s - * vcodec Name of the video codec in use - * filesize The number of bytes, if known in advance webpage_url: The url to the video webpage, if given to youtube-dl it should allow to get the same result again. (It will be set by YoutubeDL if it's missing) @@ -151,27 +158,40 @@ class InfoExtractor(object): def IE_NAME(self): return type(self).__name__[:-2] - def _request_webpage(self, url_or_request, video_id, note=None, errnote=None): + def _request_webpage(self, url_or_request, video_id, note=None, errnote=None, fatal=True): """ Returns the response handle """ if note is None: self.report_download_webpage(video_id) elif note is not False: - self.to_screen(u'%s: %s' % (video_id, note)) + if video_id is None: + self.to_screen(u'%s' % (note,)) + else: + self.to_screen(u'%s: %s' % (video_id, note)) try: return self._downloader.urlopen(url_or_request) except (compat_urllib_error.URLError, compat_http_client.HTTPException, socket.error) as err: + if errnote is False: + return False if errnote is None: errnote = u'Unable to download webpage' - raise ExtractorError(u'%s: %s' % (errnote, compat_str(err)), sys.exc_info()[2], cause=err) + errmsg = u'%s: %s' % (errnote, compat_str(err)) + if fatal: + raise ExtractorError(errmsg, sys.exc_info()[2], cause=err) + else: + self._downloader.report_warning(errmsg) + return False - def _download_webpage_handle(self, url_or_request, video_id, note=None, errnote=None): + def _download_webpage_handle(self, url_or_request, video_id, note=None, errnote=None, fatal=True): """ Returns a tuple (page content as string, URL handle) """ # Strip hashes from the URL (#1038) if isinstance(url_or_request, (compat_str, str)): url_or_request = url_or_request.partition('#')[0] - urlh = self._request_webpage(url_or_request, video_id, note, errnote) + urlh = self._request_webpage(url_or_request, video_id, note, errnote, fatal) + if urlh is False: + assert not fatal + return False content_type = urlh.headers.get('Content-Type', '') webpage_bytes = urlh.read() m = re.match(r'[a-zA-Z0-9_.-]+/[a-zA-Z0-9_.-]+\s*;\s*charset=(.+)', content_type) @@ -206,14 +226,22 @@ class InfoExtractor(object): content = webpage_bytes.decode(encoding, 'replace') return (content, urlh) - def _download_webpage(self, url_or_request, video_id, note=None, errnote=None): + def _download_webpage(self, url_or_request, video_id, note=None, errnote=None, fatal=True): """ Returns the data of the page as a string """ - return self._download_webpage_handle(url_or_request, video_id, note, errnote)[0] + res = self._download_webpage_handle(url_or_request, video_id, note, errnote, fatal) + if res is False: + return res + else: + content, _ = res + return content def _download_xml(self, url_or_request, video_id, - note=u'Downloading XML', errnote=u'Unable to download XML'): + note=u'Downloading XML', errnote=u'Unable to download XML', + transform_source=None): """Return the xml as an xml.etree.ElementTree.Element""" xml_string = self._download_webpage(url_or_request, video_id, note, errnote) + if transform_source: + xml_string = transform_source(xml_string) return xml.etree.ElementTree.fromstring(xml_string.encode('utf-8')) def to_screen(self, msg): @@ -237,7 +265,8 @@ class InfoExtractor(object): self.to_screen(u'Logging in') #Methods for following #608 - def url_result(self, url, ie=None, video_id=None): + @staticmethod + def url_result(url, ie=None, video_id=None): """Returns a url that points to a page that should be processed""" #TODO: ie should be the class used for getting the info video_info = {'_type': 'url', @@ -246,7 +275,8 @@ class InfoExtractor(object): if video_id is not None: video_info['id'] = video_id return video_info - def playlist_result(self, entries, playlist_id=None, playlist_title=None): + @staticmethod + def playlist_result(entries, playlist_id=None, playlist_title=None): """Returns a playlist""" video_info = {'_type': 'playlist', 'entries': entries} @@ -256,7 +286,7 @@ class InfoExtractor(object): video_info['title'] = playlist_title return video_info - def _search_regex(self, pattern, string, name, default=None, fatal=True, flags=0): + def _search_regex(self, pattern, string, name, default=_NO_DEFAULT, fatal=True, flags=0): """ Perform a regex search on the given string, using a single or a list of patterns returning the first matching group. @@ -270,7 +300,7 @@ class InfoExtractor(object): mobj = re.search(p, string, flags) if mobj: break - if sys.stderr.isatty() and os.name != 'nt': + if os.name != 'nt' and sys.stderr.isatty(): _name = u'\033[0;34m%s\033[0m' % name else: _name = name @@ -278,7 +308,7 @@ class InfoExtractor(object): if mobj: # return the first matching group return next(g for g in mobj.groups() if g is not None) - elif default is not None: + elif default is not _NO_DEFAULT: return default elif fatal: raise RegexNotFoundError(u'Unable to extract %s' % _name) @@ -287,7 +317,7 @@ class InfoExtractor(object): u'please report this issue on http://yt-dl.org/bug' % _name) return None - def _html_search_regex(self, pattern, string, name, default=None, fatal=True, flags=0): + def _html_search_regex(self, pattern, string, name, default=_NO_DEFAULT, fatal=True, flags=0): """ Like _search_regex, but strips HTML tags and unescapes entities. """ diff --git a/youtube_dl/extractor/crunchyroll.py b/youtube_dl/extractor/crunchyroll.py new file mode 100644 index 0000000..2b66bdd --- /dev/null +++ b/youtube_dl/extractor/crunchyroll.py @@ -0,0 +1,171 @@ +# encoding: utf-8 +import re, base64, zlib +from hashlib import sha1 +from math import pow, sqrt, floor +from .common import InfoExtractor +from ..utils import ( + ExtractorError, + compat_urllib_parse, + compat_urllib_request, + bytes_to_intlist, + intlist_to_bytes, + unified_strdate, + clean_html, +) +from ..aes import ( + aes_cbc_decrypt, + inc, +) + +class CrunchyrollIE(InfoExtractor): + _VALID_URL = r'(?:https?://)?(?:www\.)?(?P<url>crunchyroll\.com/[^/]*/[^/?&]*?(?P<video_id>[0-9]+))(?:[/?&]|$)' + _TESTS = [{ + u'url': u'http://www.crunchyroll.com/wanna-be-the-strongest-in-the-world/episode-1-an-idol-wrestler-is-born-645513', + u'file': u'645513.flv', + #u'md5': u'b1639fd6ddfaa43788c85f6d1dddd412', + u'info_dict': { + u'title': u'Wanna be the Strongest in the World Episode 1 â An Idol-Wrestler is Born!', + u'description': u'md5:2d17137920c64f2f49981a7797d275ef', + u'thumbnail': u'http://img1.ak.crunchyroll.com/i/spire1-tmb/20c6b5e10f1a47b10516877d3c039cae1380951166_full.jpg', + u'uploader': u'Yomiuri Telecasting Corporation (YTV)', + u'upload_date': u'20131013', + }, + u'params': { + # rtmp + u'skip_download': True, + }, + }] + + _FORMAT_IDS = { + u'360': (u'60', u'106'), + u'480': (u'61', u'106'), + u'720': (u'62', u'106'), + u'1080': (u'80', u'108'), + } + + def _decrypt_subtitles(self, data, iv, id): + data = bytes_to_intlist(data) + iv = bytes_to_intlist(iv) + id = int(id) + + def obfuscate_key_aux(count, modulo, start): + output = list(start) + for _ in range(count): + output.append(output[-1] + output[-2]) + # cut off start values + output = output[2:] + output = list(map(lambda x: x % modulo + 33, output)) + return output + + def obfuscate_key(key): + num1 = int(floor(pow(2, 25) * sqrt(6.9))) + num2 = (num1 ^ key) << 5 + num3 = key ^ num1 + num4 = num3 ^ (num3 >> 3) ^ num2 + prefix = intlist_to_bytes(obfuscate_key_aux(20, 97, (1, 2))) + shaHash = bytes_to_intlist(sha1(prefix + str(num4).encode(u'ascii')).digest()) + # Extend 160 Bit hash to 256 Bit + return shaHash + [0] * 12 + + key = obfuscate_key(id) + class Counter: + __value = iv + def next_value(self): + temp = self.__value + self.__value = inc(self.__value) + return temp + decrypted_data = intlist_to_bytes(aes_cbc_decrypt(data, key, iv)) + return zlib.decompress(decrypted_data) + + def _convert_subtitles_to_srt(self, subtitles): + i=1 + output = u'' + for start, end, text in re.findall(r'<event [^>]*?start="([^"]+)" [^>]*?end="([^"]+)" [^>]*?text="([^"]+)"[^>]*?>', subtitles): + start = start.replace(u'.', u',') + end = end.replace(u'.', u',') + text = clean_html(text) + text = text.replace(u'\\N', u'\n') + if not text: + continue + output += u'%d\n%s --> %s\n%s\n\n' % (i, start, end, text) + i+=1 + return output + + def _real_extract(self,url): + mobj = re.match(self._VALID_URL, url) + + webpage_url = u'http://www.' + mobj.group('url') + video_id = mobj.group(u'video_id') + webpage = self._download_webpage(webpage_url, video_id) + note_m = self._html_search_regex(r'<div class="showmedia-trailer-notice">(.+?)</div>', webpage, u'trailer-notice', default=u'') + if note_m: + raise ExtractorError(note_m) + + video_title = self._html_search_regex(r'<h1[^>]*>(.+?)</h1>', webpage, u'video_title', flags=re.DOTALL) + video_title = re.sub(r' {2,}', u' ', video_title) + video_description = self._html_search_regex(r'"description":"([^"]+)', webpage, u'video_description', default=u'') + if not video_description: + video_description = None + video_upload_date = self._html_search_regex(r'<div>Availability for free users:(.+?)</div>', webpage, u'video_upload_date', fatal=False, flags=re.DOTALL) + if video_upload_date: + video_upload_date = unified_strdate(video_upload_date) + video_uploader = self._html_search_regex(r'<div>\s*Publisher:(.+?)</div>', webpage, u'video_uploader', fatal=False, flags=re.DOTALL) + + playerdata_url = compat_urllib_parse.unquote(self._html_search_regex(r'"config_url":"([^"]+)', webpage, u'playerdata_url')) + playerdata_req = compat_urllib_request.Request(playerdata_url) + playerdata_req.data = compat_urllib_parse.urlencode({u'current_page': webpage_url}) + playerdata_req.add_header(u'Content-Type', u'application/x-www-form-urlencoded') + playerdata = self._download_webpage(playerdata_req, video_id, note=u'Downloading media info') + + stream_id = self._search_regex(r'<media_id>([^<]+)', playerdata, u'stream_id') + video_thumbnail = self._search_regex(r'<episode_image_url>([^<]+)', playerdata, u'thumbnail', fatal=False) + + formats = [] + for fmt in re.findall(r'\?p([0-9]{3,4})=1', webpage): + stream_quality, stream_format = self._FORMAT_IDS[fmt] + video_format = fmt+u'p' + streamdata_req = compat_urllib_request.Request(u'http://www.crunchyroll.com/xml/') + # urlencode doesn't work! + streamdata_req.data = u'req=RpcApiVideoEncode%5FGetStreamInfo&video%5Fencode%5Fquality='+stream_quality+u'&media%5Fid='+stream_id+u'&video%5Fformat='+stream_format + streamdata_req.add_header(u'Content-Type', u'application/x-www-form-urlencoded') + streamdata_req.add_header(u'Content-Length', str(len(streamdata_req.data))) + streamdata = self._download_webpage(streamdata_req, video_id, note=u'Downloading media info for '+video_format) + video_url = self._search_regex(r'<host>([^<]+)', streamdata, u'video_url') + video_play_path = self._search_regex(r'<file>([^<]+)', streamdata, u'video_play_path') + formats.append({ + u'url': video_url, + u'play_path': video_play_path, + u'ext': 'flv', + u'format': video_format, + u'format_id': video_format, + }) + + subtitles = {} + for sub_id, sub_name in re.findall(r'\?ssid=([0-9]+)" title="([^"]+)', webpage): + sub_page = self._download_webpage(u'http://www.crunchyroll.com/xml/?req=RpcApiSubtitle_GetXml&subtitle_script_id='+sub_id,\ + video_id, note=u'Downloading subtitles for '+sub_name) + id = self._search_regex(r'id=\'([0-9]+)', sub_page, u'subtitle_id', fatal=False) + iv = self._search_regex(r'<iv>([^<]+)', sub_page, u'subtitle_iv', fatal=False) + data = self._search_regex(r'<data>([^<]+)', sub_page, u'subtitle_data', fatal=False) + if not id or not iv or not data: + continue + id = int(id) + iv = base64.b64decode(iv) + data = base64.b64decode(data) + + subtitle = self._decrypt_subtitles(data, iv, id).decode(u'utf-8') + lang_code = self._search_regex(r'lang_code=\'([^\']+)', subtitle, u'subtitle_lang_code', fatal=False) + if not lang_code: + continue + subtitles[lang_code] = self._convert_subtitles_to_srt(subtitle) + + return { + u'id': video_id, + u'title': video_title, + u'description': video_description, + u'thumbnail': video_thumbnail, + u'uploader': video_uploader, + u'upload_date': video_upload_date, + u'subtitles': subtitles, + u'formats': formats, + } diff --git a/youtube_dl/extractor/cspan.py b/youtube_dl/extractor/cspan.py index 7bf03c5..d573068 100644 --- a/youtube_dl/extractor/cspan.py +++ b/youtube_dl/extractor/cspan.py @@ -6,7 +6,7 @@ from ..utils import ( ) class CSpanIE(InfoExtractor): - _VALID_URL = r'http://www.c-spanvideo.org/program/(.*)' + _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', diff --git a/youtube_dl/extractor/dailymotion.py b/youtube_dl/extractor/dailymotion.py index 71f5e03..6685c94 100644 --- a/youtube_dl/extractor/dailymotion.py +++ b/youtube_dl/extractor/dailymotion.py @@ -11,6 +11,7 @@ from ..utils import ( get_element_by_attribute, get_element_by_id, orderedSet, + str_to_int, ExtractorError, ) @@ -27,7 +28,7 @@ class DailymotionBaseInfoExtractor(InfoExtractor): class DailymotionIE(DailymotionBaseInfoExtractor, SubtitlesInfoExtractor): """Information Extractor for Dailymotion""" - _VALID_URL = r'(?i)(?:https?://)?(?:www\.)?dailymotion\.[a-z]{2,3}/(?:embed/)?video/([^/]+)' + _VALID_URL = r'(?i)(?:https?://)?(?:(www|touch)\.)?dailymotion\.[a-z]{2,3}/(?:(embed|#)/)?video/(?P<id>[^/?_]+)' IE_NAME = u'dailymotion' _FORMATS = [ @@ -80,7 +81,7 @@ class DailymotionIE(DailymotionBaseInfoExtractor, SubtitlesInfoExtractor): # Extract id and simplified title from URL mobj = re.match(self._VALID_URL, url) - video_id = mobj.group(1).split('_')[0].split('?')[0] + video_id = mobj.group('id') url = 'http://www.dailymotion.com/video/%s' % video_id @@ -100,10 +101,6 @@ class DailymotionIE(DailymotionBaseInfoExtractor, SubtitlesInfoExtractor): self.to_screen(u'Vevo video detected: %s' % vevo_id) return self.url_result(u'vevo:%s' % vevo_id, ie='Vevo') - video_uploader = self._search_regex([r'(?im)<span class="owner[^\"]+?">[^<]+?<a [^>]+?>([^<]+?)</a>', - # Looking for official user - r'<(?:span|a) .*?rel="author".*?>([^<]+?)</'], - webpage, 'video uploader', fatal=False) age_limit = self._rta_search(webpage) video_upload_date = None @@ -146,15 +143,21 @@ class DailymotionIE(DailymotionBaseInfoExtractor, SubtitlesInfoExtractor): self._list_available_subtitles(video_id, webpage) return + view_count = self._search_regex( + r'video_views_count[^>]+>\s+([\d\.,]+)', webpage, u'view count', fatal=False) + if view_count is not None: + view_count = str_to_int(view_count) + return { 'id': video_id, 'formats': formats, - 'uploader': video_uploader, + 'uploader': info['owner_screenname'], 'upload_date': video_upload_date, 'title': self._og_search_title(webpage), 'subtitles': video_subtitles, 'thumbnail': info['thumbnail_url'], 'age_limit': age_limit, + 'view_count': view_count, } def _get_available_subtitles(self, video_id, webpage): diff --git a/youtube_dl/extractor/daum.py b/youtube_dl/extractor/daum.py index d418ce4..4876ecb 100644 --- a/youtube_dl/extractor/daum.py +++ b/youtube_dl/extractor/daum.py @@ -9,7 +9,7 @@ from ..utils import ( class DaumIE(InfoExtractor): - _VALID_URL = r'https?://tvpot\.daum\.net/.*?clipid=(?P<id>\d+)' + _VALID_URL = r'https?://(?:m\.)?tvpot\.daum\.net/.*?clipid=(?P<id>\d+)' IE_NAME = u'daum.net' _TEST = { diff --git a/youtube_dl/extractor/dreisat.py b/youtube_dl/extractor/dreisat.py index 24ce794..cb7226f 100644 --- a/youtube_dl/extractor/dreisat.py +++ b/youtube_dl/extractor/dreisat.py @@ -11,7 +11,7 @@ from ..utils import ( class DreiSatIE(InfoExtractor): IE_NAME = '3sat' - _VALID_URL = r'(?:http://)?(?:www\.)?3sat.de/mediathek/index.php\?(?:(?:mode|display)=[^&]+&)*obj=(?P<id>[0-9]+)$' + _VALID_URL = r'(?:http://)?(?:www\.)?3sat\.de/mediathek/index\.php\?(?:(?:mode|display)=[^&]+&)*obj=(?P<id>[0-9]+)$' _TEST = { u"url": u"http://www.3sat.de/mediathek/index.php?obj=36983", u'file': u'36983.webm', diff --git a/youtube_dl/extractor/eighttracks.py b/youtube_dl/extractor/eighttracks.py index f21ef88..88f5526 100644 --- a/youtube_dl/extractor/eighttracks.py +++ b/youtube_dl/extractor/eighttracks.py @@ -10,7 +10,7 @@ from ..utils import ( class EightTracksIE(InfoExtractor): IE_NAME = '8tracks' - _VALID_URL = r'https?://8tracks.com/(?P<user>[^/]+)/(?P<id>[^/#]+)(?:#.*)?$' + _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", diff --git a/youtube_dl/extractor/exfm.py b/youtube_dl/extractor/exfm.py index a51d79b..682901d 100644 --- a/youtube_dl/extractor/exfm.py +++ b/youtube_dl/extractor/exfm.py @@ -8,7 +8,7 @@ class ExfmIE(InfoExtractor): IE_NAME = u'exfm' IE_DESC = u'ex.fm' _VALID_URL = r'(?:http://)?(?:www\.)?ex\.fm/song/([^/]+)' - _SOUNDCLOUD_URL = r'(?:http://)?(?:www\.)?api\.soundcloud.com/tracks/([^/]+)/stream' + _SOUNDCLOUD_URL = r'(?:http://)?(?:www\.)?api\.soundcloud\.com/tracks/([^/]+)/stream' _TESTS = [ { u'url': u'http://ex.fm/song/eh359', diff --git a/youtube_dl/extractor/facebook.py b/youtube_dl/extractor/facebook.py index 3b21071..4556079 100644 --- a/youtube_dl/extractor/facebook.py +++ b/youtube_dl/extractor/facebook.py @@ -17,7 +17,7 @@ from ..utils import ( class FacebookIE(InfoExtractor): """Information Extractor for Facebook""" - _VALID_URL = r'^(?:https?://)?(?:\w+\.)?facebook\.com/(?:video/video|photo)\.php\?(?:.*?)v=(?P<ID>\d+)(?:.*)' + _VALID_URL = r'^(?:https?://)?(?:\w+\.)?facebook\.com/(?:[^#?]*#!/)?(?:video/video|photo)\.php\?(?:.*?)v=(?P<ID>\d+)(?:.*)' _LOGIN_URL = 'https://www.facebook.com/login.php?next=http%3A%2F%2Ffacebook.com%2Fhome.php&login_attempt=1' _CHECKPOINT_URL = 'https://www.facebook.com/checkpoint/?next=http%3A%2F%2Ffacebook.com%2Fhome.php&_fb_noscript=1' _NETRC_MACHINE = 'facebook' @@ -27,7 +27,7 @@ class FacebookIE(InfoExtractor): u'file': u'120708114770723.mp4', u'md5': u'48975a41ccc4b7a581abd68651c1a5a8', u'info_dict': { - u"duration": 279, + u"duration": 279, u"title": u"PEOPLE ARE AWESOME 2013" } } diff --git a/youtube_dl/extractor/faz.py b/youtube_dl/extractor/faz.py index d0dfde6..c6ab695 100644 --- a/youtube_dl/extractor/faz.py +++ b/youtube_dl/extractor/faz.py @@ -9,7 +9,7 @@ from ..utils import ( class FazIE(InfoExtractor): IE_NAME = u'faz.net' - _VALID_URL = r'https?://www\.faz\.net/multimedia/videos/.*?-(?P<id>\d+).html' + _VALID_URL = r'https?://www\.faz\.net/multimedia/videos/.*?-(?P<id>\d+)\.html' _TEST = { u'url': u'http://www.faz.net/multimedia/videos/stockholm-chemie-nobelpreis-fuer-drei-amerikanische-forscher-12610585.html', diff --git a/youtube_dl/extractor/fktv.py b/youtube_dl/extractor/fktv.py index dba1a8d..d7048c8 100644 --- a/youtube_dl/extractor/fktv.py +++ b/youtube_dl/extractor/fktv.py @@ -12,7 +12,7 @@ from ..utils import ( class FKTVIE(InfoExtractor): IE_NAME = u'fernsehkritik.tv' - _VALID_URL = r'(?:http://)?(?:www\.)?fernsehkritik.tv/folge-(?P<ep>[0-9]+)(?:/.*)?' + _VALID_URL = r'(?:http://)?(?:www\.)?fernsehkritik\.tv/folge-(?P<ep>[0-9]+)(?:/.*)?' _TEST = { u'url': u'http://fernsehkritik.tv/folge-1', @@ -52,7 +52,7 @@ class FKTVIE(InfoExtractor): class FKTVPosteckeIE(InfoExtractor): IE_NAME = u'fernsehkritik.tv:postecke' - _VALID_URL = r'(?:http://)?(?:www\.)?fernsehkritik.tv/inline-video/postecke.php\?(.*&)?ep=(?P<ep>[0-9]+)(&|$)' + _VALID_URL = r'(?:http://)?(?:www\.)?fernsehkritik\.tv/inline-video/postecke\.php\?(.*&)?ep=(?P<ep>[0-9]+)(&|$)' _TEST = { u'url': u'http://fernsehkritik.tv/inline-video/postecke.php?iframe=true&width=625&height=440&ep=120', u'file': u'0120.flv', diff --git a/youtube_dl/extractor/francetv.py b/youtube_dl/extractor/francetv.py index 6e19710..ad85bc1 100644 --- a/youtube_dl/extractor/francetv.py +++ b/youtube_dl/extractor/francetv.py @@ -21,7 +21,7 @@ class FranceTVBaseInfoExtractor(InfoExtractor): thumbnail_path = info.find('image').text return {'id': video_id, - 'ext': 'mp4', + 'ext': 'flv' if video_url.startswith('rtmp') else 'mp4', 'url': video_url, 'title': info.find('titre').text, 'thumbnail': compat_urlparse.urljoin('http://pluzz.francetv.fr', thumbnail_path), @@ -45,7 +45,7 @@ class PluzzIE(FranceTVBaseInfoExtractor): class FranceTvInfoIE(FranceTVBaseInfoExtractor): IE_NAME = u'francetvinfo.fr' - _VALID_URL = r'https?://www\.francetvinfo\.fr/replay.*/(?P<title>.+).html' + _VALID_URL = r'https?://www\.francetvinfo\.fr/replay.*/(?P<title>.+)\.html' _TEST = { u'url': u'http://www.francetvinfo.fr/replay-jt/france-3/soir-3/jt-grand-soir-3-lundi-26-aout-2013_393427.html', @@ -66,35 +66,101 @@ class FranceTvInfoIE(FranceTVBaseInfoExtractor): return self._extract_video(video_id) -class France2IE(FranceTVBaseInfoExtractor): - IE_NAME = u'france2.fr' - _VALID_URL = r'''(?x)https?://www\.france2\.fr/ +class FranceTVIE(FranceTVBaseInfoExtractor): + IE_NAME = u'francetv' + IE_DESC = u'France 2, 3, 4, 5 and Ã' + _VALID_URL = r'''(?x)https?://www\.france[2345o]\.fr/ (?: - emissions/.*?/videos/(?P<id>\d+) - | emission/(?P<key>[^/?]+) + emissions/.*?/(videos|emissions)/(?P<id>[^/?]+) + | (emissions?|jt)/(?P<key>[^/?]+) )''' - _TEST = { - u'url': u'http://www.france2.fr/emissions/13h15-le-samedi-le-dimanche/videos/75540104', - u'file': u'75540104.mp4', - u'info_dict': { - u'title': u'13h15, le samedi...', - u'description': u'md5:2e5b58ba7a2d3692b35c792be081a03d', + _TESTS = [ + # france2 + { + u'url': u'http://www.france2.fr/emissions/13h15-le-samedi-le-dimanche/videos/75540104', + u'file': u'75540104.mp4', + u'info_dict': { + u'title': u'13h15, le samedi...', + u'description': u'md5:2e5b58ba7a2d3692b35c792be081a03d', + }, + u'params': { + # m3u8 download + u'skip_download': True, + }, }, - u'params': { - u'skip_download': True, + # france3 + { + u'url': u'http://www.france3.fr/emissions/pieces-a-conviction/diffusions/13-11-2013_145575', + u'info_dict': { + u'id': u'000702326_CAPP_PicesconvictionExtrait313022013_120220131722_Au', + u'ext': u'flv', + u'title': u'Le scandale du prix des médicaments', + u'description': u'md5:1384089fbee2f04fc6c9de025ee2e9ce', + }, + u'params': { + # rtmp download + u'skip_download': True, + }, }, - } + # france4 + { + u'url': u'http://www.france4.fr/emissions/hero-corp/videos/rhozet_herocorp_bonus_1_20131106_1923_06112013172108_F4', + u'info_dict': { + u'id': u'rhozet_herocorp_bonus_1_20131106_1923_06112013172108_F4', + u'ext': u'flv', + u'title': u'Hero Corp Making of - Extrait 1', + u'description': u'md5:c87d54871b1790679aec1197e73d650a', + }, + u'params': { + # rtmp download + u'skip_download': True, + }, + }, + # france5 + { + u'url': u'http://www.france5.fr/emissions/c-a-dire/videos/92837968', + u'info_dict': { + u'id': u'92837968', + u'ext': u'mp4', + u'title': u'C à dire ?!', + u'description': u'md5:fb1db1cbad784dcce7c7a7bd177c8e2f', + }, + u'params': { + # m3u8 download + u'skip_download': True, + }, + }, + # franceo + { + u'url': u'http://www.franceo.fr/jt/info-afrique/04-12-2013', + u'info_dict': { + u'id': u'92327925', + u'ext': u'mp4', + u'title': u'Infô-Afrique', + u'description': u'md5:ebf346da789428841bee0fd2a935ea55', + }, + u'params': { + # m3u8 download + u'skip_download': True, + }, + u'skip': u'The id changes frequently', + }, + ] def _real_extract(self, url): mobj = re.match(self._VALID_URL, url) if mobj.group('key'): webpage = self._download_webpage(url, mobj.group('key')) - video_id = self._html_search_regex( - r'''(?x)<div\s+class="video-player">\s* + id_res = [ + (r'''(?x)<div\s+class="video-player">\s* <a\s+href="http://videos.francetv.fr/video/([0-9]+)"\s+ - class="francetv-video-player">''', - webpage, u'video ID') + class="francetv-video-player">'''), + (r'<a id="player_direct" href="http://info\.francetelevisions' + '\.fr/\?id-video=([^"/&]+)'), + (r'<a class="video" id="ftv_player_(.+?)"'), + ] + video_id = self._html_search_regex(id_res, webpage, u'video ID') else: video_id = mobj.group('id') return self._extract_video(video_id) diff --git a/youtube_dl/extractor/gamekings.py b/youtube_dl/extractor/gamekings.py index c91669b..a3a5251 100644 --- a/youtube_dl/extractor/gamekings.py +++ b/youtube_dl/extractor/gamekings.py @@ -4,7 +4,7 @@ from .common import InfoExtractor class GamekingsIE(InfoExtractor): - _VALID_URL = r'http?://www\.gamekings\.tv/videos/(?P<name>[0-9a-z\-]+)' + _VALID_URL = r'http://www\.gamekings\.tv/videos/(?P<name>[0-9a-z\-]+)' _TEST = { u"url": u"http://www.gamekings.tv/videos/phoenix-wright-ace-attorney-dual-destinies-review/", u'file': u'20130811.mp4', diff --git a/youtube_dl/extractor/gametrailers.py b/youtube_dl/extractor/gametrailers.py index 3a8bef2..d82a5d4 100644 --- a/youtube_dl/extractor/gametrailers.py +++ b/youtube_dl/extractor/gametrailers.py @@ -4,8 +4,7 @@ from .mtv import MTVServicesInfoExtractor class GametrailersIE(MTVServicesInfoExtractor): - _VALID_URL = r'http://www.gametrailers.com/(?P<type>videos|reviews|full-episodes)/(?P<id>.*?)/(?P<title>.*)' - + _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'70e9a5d7-cf25-4a10-9104-6f3e7342ae0d.mp4', diff --git a/youtube_dl/extractor/generic.py b/youtube_dl/extractor/generic.py index 10ae062..7a14c98 100644 --- a/youtube_dl/extractor/generic.py +++ b/youtube_dl/extractor/generic.py @@ -11,10 +11,14 @@ from ..utils import ( compat_urlparse, ExtractorError, + HEADRequest, smuggle_url, unescapeHTML, + unified_strdate, + url_basename, ) from .brightcove import BrightcoveIE +from .ooyala import OoyalaIE class GenericIE(InfoExtractor): @@ -71,6 +75,27 @@ class GenericIE(InfoExtractor): u'skip_download': True, }, }, + # Direct link to a video + { + u'url': u'http://media.w3.org/2010/05/sintel/trailer.mp4', + u'file': u'trailer.mp4', + u'md5': u'67d406c2bcb6af27fa886f31aa934bbe', + u'info_dict': { + u'id': u'trailer', + u'title': u'trailer', + u'upload_date': u'20100513', + } + }, + # ooyala video + { + u'url': u'http://www.rollingstone.com/music/videos/norwegian-dj-cashmere-cat-goes-spartan-on-with-me-premiere-20131219', + u'md5': u'5644c6ca5d5782c1d0d350dad9bd840c', + u'info_dict': { + u'id': u'BwY2RxaTrTkslxOfcan0UCf0YqyvWysJ', + u'ext': u'mp4', + u'title': u'2cc213299525360.mov', #that's what we get + }, + }, ] def report_download_webpage(self, video_id): @@ -83,23 +108,20 @@ class GenericIE(InfoExtractor): """Report information extraction.""" self._downloader.to_screen(u'[redirect] Following redirect to %s' % new_url) - def _test_redirect(self, url): + def _send_head(self, url): """Check if it is a redirect, like url shorteners, in case return the new url.""" - class HeadRequest(compat_urllib_request.Request): - def get_method(self): - return "HEAD" class HEADRedirectHandler(compat_urllib_request.HTTPRedirectHandler): """ Subclass the HTTPRedirectHandler to make it use our - HeadRequest also on the redirected URL + HEADRequest also on the redirected URL """ def redirect_request(self, req, fp, code, msg, headers, newurl): if code in (301, 302, 303, 307): newurl = newurl.replace(' ', '%20') newheaders = dict((k,v) for k,v in req.headers.items() if k.lower() not in ("content-length", "content-type")) - return HeadRequest(newurl, + return HEADRequest(newurl, headers=newheaders, origin_req_host=req.get_origin_req_host(), unverifiable=True) @@ -128,32 +150,49 @@ class GenericIE(InfoExtractor): compat_urllib_request.HTTPErrorProcessor, compat_urllib_request.HTTPSHandler]: opener.add_handler(handler()) - response = opener.open(HeadRequest(url)) + response = opener.open(HEADRequest(url)) if response is None: raise ExtractorError(u'Invalid URL protocol') - new_url = response.geturl() - - if url == new_url: - return False - - self.report_following_redirect(new_url) - return new_url + return response def _real_extract(self, url): parsed_url = compat_urlparse.urlparse(url) if not parsed_url.scheme: self._downloader.report_warning('The url doesn\'t specify the protocol, trying with http') return self.url_result('http://' + url) + video_id = os.path.splitext(url.split('/')[-1])[0] try: - new_url = self._test_redirect(url) - if new_url: - return [self.url_result(new_url)] + response = self._send_head(url) + + # Check for redirect + new_url = response.geturl() + if url != new_url: + self.report_following_redirect(new_url) + return self.url_result(new_url) + + # Check for direct link to a video + content_type = response.headers.get('Content-Type', '') + m = re.match(r'^(?P<type>audio|video|application(?=/ogg$))/(?P<format_id>.+)$', content_type) + if m: + upload_date = response.headers.get('Last-Modified') + if upload_date: + upload_date = unified_strdate(upload_date) + return { + 'id': video_id, + 'title': os.path.splitext(url_basename(url))[0], + 'formats': [{ + 'format_id': m.group('format_id'), + 'url': url, + 'vcodec': u'none' if m.group('type') == 'audio' else None + }], + 'upload_date': upload_date, + } + except compat_urllib_error.HTTPError: # This may be a stupid server that doesn't like HEAD, our UA, or so pass - video_id = url.split('/')[-1] try: webpage = self._download_webpage(url, video_id) except ValueError: @@ -169,8 +208,13 @@ class GenericIE(InfoExtractor): # Site Name | Video Title # Video Title - Tagline | Site Name # and so on and so forth; it's just not practical - video_title = self._html_search_regex(r'<title>(.*)</title>', - webpage, u'video title', default=u'video', flags=re.DOTALL) + video_title = self._html_search_regex( + r'(?s)<title>(.*?)</title>', webpage, u'video title', + default=u'video') + + # video uploader is domain name + video_uploader = self._search_regex( + r'^(?:https?://)?([^/]*)/.*', url, u'video uploader') # Look for BrightCove: bc_url = BrightcoveIE._extract_brightcove_url(webpage) @@ -178,7 +222,7 @@ class GenericIE(InfoExtractor): self.to_screen(u'Brightcove video detected.') return self.url_result(bc_url, 'Brightcove') - # Look for embedded Vimeo player + # Look for embedded (iframe) Vimeo player mobj = re.search( r'<iframe[^>]+?src="(https?://player.vimeo.com/video/.+?)"', webpage) if mobj: @@ -186,9 +230,18 @@ class GenericIE(InfoExtractor): surl = smuggle_url(player_url, {'Referer': url}) return self.url_result(surl, 'Vimeo') + # Look for embedded (swf embed) Vimeo player + mobj = re.search( + r'<embed[^>]+?src="(https?://(?:www\.)?vimeo.com/moogaloop.swf.+?)"', webpage) + if mobj: + return self.url_result(mobj.group(1), 'Vimeo') + # Look for embedded YouTube player - matches = re.findall( - r'<iframe[^>]+?src=(["\'])(?P<url>(?:https?:)?//(?:www\.)?youtube.com/embed/.+?)\1', webpage) + matches = re.findall(r'''(?x) + (?:<iframe[^>]+?src=|embedSWF\(\s*) + (["\'])(?P<url>(?:https?:)?//(?:www\.)?youtube\.com/ + (?:embed|v)/.+?) + \1''', webpage) if matches: urlrs = [self.url_result(unescapeHTML(tuppl[1]), 'Youtube') for tuppl in matches] @@ -197,13 +250,38 @@ class GenericIE(InfoExtractor): # Look for embedded Dailymotion player matches = re.findall( - r'<iframe[^>]+?src=(["\'])(?P<url>(?:https?:)?//(?:www\.)?dailymotion.com/embed/video/.+?)\1', webpage) + r'<iframe[^>]+?src=(["\'])(?P<url>(?:https?:)?//(?:www\.)?dailymotion\.com/embed/video/.+?)\1', webpage) if matches: urlrs = [self.url_result(unescapeHTML(tuppl[1]), 'Dailymotion') for tuppl in matches] return self.playlist_result( urlrs, playlist_id=video_id, playlist_title=video_title) + # Look for embedded Wistia player + match = re.search( + r'<iframe[^>]+?src=(["\'])(?P<url>(?:https?:)?//(?:fast\.)?wistia\.net/embed/iframe/.+?)\1', webpage) + if match: + return { + '_type': 'url_transparent', + 'url': unescapeHTML(match.group('url')), + 'ie_key': 'Wistia', + 'uploader': video_uploader, + 'title': video_title, + 'id': video_id, + } + + # Look for embedded blip.tv player + mobj = re.search(r'<meta\s[^>]*https?://api.blip.tv/\w+/redirect/\w+/(\d+)', webpage) + if mobj: + return self.url_result('http://blip.tv/seo/-'+mobj.group(1), 'BlipTV') + mobj = re.search(r'<(?:iframe|embed|object)\s[^>]*https?://(?:\w+\.)?blip.tv/(?:play/|api\.swf#)([a-zA-Z0-9]+)', webpage) + if mobj: + player_url = 'http://blip.tv/play/%s.x?p=1' % mobj.group(1) + player_page = self._download_webpage(player_url, mobj.group(1)) + blip_video_id = self._search_regex(r'data-episode-id="(\d+)', player_page, u'blip_video_id', fatal=False) + if blip_video_id: + return self.url_result('http://blip.tv/seo/-'+blip_video_id, 'BlipTV') + # Look for Bandcamp pages with custom domain mobj = re.search(r'<meta property="og:url"[^>]*?content="(.*?bandcamp\.com.*?)"', webpage) if mobj is not None: @@ -211,6 +289,22 @@ class GenericIE(InfoExtractor): # Don't set the extractor because it can be a track url or an album return self.url_result(burl) + # Look for embedded Vevo player + mobj = re.search( + r'<iframe[^>]+?src=(["\'])(?P<url>(?:https?:)?//(?:cache\.)?vevo\.com/.+?)\1', webpage) + if mobj is not None: + return self.url_result(mobj.group('url')) + + # Look for Ooyala videos + mobj = re.search(r'player.ooyala.com/[^"?]+\?[^"]*?(?:embedCode|ec)=([^"&]+)', webpage) + if mobj is not None: + return OoyalaIE._build_url_result(mobj.group(1)) + + # Look for Aparat videos + mobj = re.search(r'<iframe src="(http://www.aparat.com/video/[^"]+)"', webpage) + if mobj is not None: + return self.url_result(mobj.group(1), 'Aparat') + # Start with something easy: JW Player in SWFObject mobj = re.search(r'flashvars: [\'"](?:.*&)?file=(http[^\'"&]*)', webpage) if mobj is None: @@ -247,14 +341,9 @@ class GenericIE(InfoExtractor): # here's a fun little line of code for you: video_id = os.path.splitext(video_id)[0] - # video uploader is domain name - video_uploader = self._search_regex(r'(?:https?://)?([^/]*)/.*', - url, u'video uploader') - return { 'id': video_id, 'url': video_url, 'uploader': video_uploader, - 'upload_date': None, 'title': video_title, } diff --git a/youtube_dl/extractor/hotnewhiphop.py b/youtube_dl/extractor/hotnewhiphop.py index 3798118..0ee74fb 100644 --- a/youtube_dl/extractor/hotnewhiphop.py +++ b/youtube_dl/extractor/hotnewhiphop.py @@ -11,7 +11,7 @@ class HotNewHipHopIE(InfoExtractor): u'file': u'1435540.mp3', u'md5': u'2c2cd2f76ef11a9b3b581e8b232f3d96', u'info_dict': { - u"title": u"Freddie Gibbs - Lay It Down" + u"title": u'Freddie Gibbs "Lay It Down"' } } diff --git a/youtube_dl/extractor/ign.py b/youtube_dl/extractor/ign.py index c52146f..381af91 100644 --- a/youtube_dl/extractor/ign.py +++ b/youtube_dl/extractor/ign.py @@ -44,7 +44,7 @@ class IGNIE(InfoExtractor): { u'file': u'638672ee848ae4ff108df2a296418ee2.mp4', u'info_dict': { - u'title': u'GTA 5\'s Twisted Beauty in Super Slow Motion', + u'title': u'26 Twisted Moments from GTA 5 in Slow Motion', u'description': u'The twisted beauty of GTA 5 in stunning slow motion.', }, }, @@ -103,7 +103,7 @@ class IGNIE(InfoExtractor): class OneUPIE(IGNIE): """Extractor for 1up.com, it uses the ign videos system.""" - _VALID_URL = r'https?://gamevideos.1up.com/(?P<type>video)/id/(?P<name_or_id>.+)' + _VALID_URL = r'https?://gamevideos\.1up\.com/(?P<type>video)/id/(?P<name_or_id>.+)' IE_NAME = '1up.com' _DESCRIPTION_RE = r'<div id="vid_summary">(.+?)</div>' diff --git a/youtube_dl/extractor/imdb.py b/youtube_dl/extractor/imdb.py index d8e9712..e5332cc 100644 --- a/youtube_dl/extractor/imdb.py +++ b/youtube_dl/extractor/imdb.py @@ -11,7 +11,7 @@ from ..utils import ( class ImdbIE(InfoExtractor): IE_NAME = u'imdb' IE_DESC = u'Internet Movie Database trailers' - _VALID_URL = r'http://www\.imdb\.com/video/imdb/vi(?P<id>\d+)' + _VALID_URL = r'http://(?:www|m)\.imdb\.com/video/imdb/vi(?P<id>\d+)' _TEST = { u'url': u'http://www.imdb.com/video/imdb/vi2524815897', @@ -21,20 +21,20 @@ class ImdbIE(InfoExtractor): u'ext': u'mp4', u'title': u'Ice Age: Continental Drift Trailer (No. 2) - IMDb', u'description': u'md5:9061c2219254e5d14e03c25c98e96a81', - u'duration': 151, } } def _real_extract(self, url): mobj = re.match(self._VALID_URL, url) video_id = mobj.group('id') - webpage = self._download_webpage(url,video_id) + webpage = self._download_webpage('http://www.imdb.com/video/imdb/vi%s' % video_id, video_id) descr = get_element_by_attribute('itemprop', 'description', webpage) available_formats = re.findall( r'case \'(?P<f_id>.*?)\' :$\s+url = \'(?P<path>.*?)\'', webpage, flags=re.MULTILINE) formats = [] for f_id, f_path in available_formats: + f_path = f_path.strip() format_page = self._download_webpage( compat_urlparse.urljoin(url, f_path), u'Downloading info for %s format' % f_id) @@ -46,7 +46,6 @@ class ImdbIE(InfoExtractor): formats.append({ 'format_id': f_id, 'url': format_info['url'], - 'height': int(info['titleObject']['encoding']['selected'][:-1]), }) return { @@ -55,5 +54,4 @@ class ImdbIE(InfoExtractor): 'formats': formats, 'description': descr, 'thumbnail': format_info['slate'], - 'duration': int(info['titleObject']['title']['duration_seconds']), } diff --git a/youtube_dl/extractor/instagram.py b/youtube_dl/extractor/instagram.py index 213aac4..660573d 100644 --- a/youtube_dl/extractor/instagram.py +++ b/youtube_dl/extractor/instagram.py @@ -3,7 +3,7 @@ import re from .common import InfoExtractor class InstagramIE(InfoExtractor): - _VALID_URL = r'(?:http://)?instagram.com/p/(.*?)/' + _VALID_URL = r'(?:http://)?instagram\.com/p/(.*?)/' _TEST = { u'url': u'http://instagram.com/p/aye83DjauH/?foo=bar#abc', u'file': u'aye83DjauH.mp4', diff --git a/youtube_dl/extractor/ivi.py b/youtube_dl/extractor/ivi.py new file mode 100644 index 0000000..4bdf55f --- /dev/null +++ b/youtube_dl/extractor/ivi.py @@ -0,0 +1,154 @@ +# encoding: utf-8 + +import re +import json + +from .common import InfoExtractor +from ..utils import ( + compat_urllib_request, + ExtractorError, +) + + +class IviIE(InfoExtractor): + IE_DESC = u'ivi.ru' + IE_NAME = u'ivi' + _VALID_URL = r'^https?://(?:www\.)?ivi\.ru/watch(?:/(?P<compilationid>[^/]+))?/(?P<videoid>\d+)' + + _TESTS = [ + # Single movie + { + u'url': u'http://www.ivi.ru/watch/53141', + u'file': u'53141.mp4', + u'md5': u'6ff5be2254e796ed346251d117196cf4', + u'info_dict': { + u'title': u'Ðван ÐаÑилÑÐµÐ²Ð¸Ñ Ð¼ÐµÐ½ÑÐµÑ Ð¿ÑоÑеÑÑиÑ', + u'description': u'md5:14d8eda24e9d93d29b5857012c6d6346', + u'duration': 5498, + u'thumbnail': u'http://thumbs.ivi.ru/f20.vcp.digitalaccess.ru/contents/d/1/c3c885163a082c29bceeb7b5a267a6.jpg', + }, + u'skip': u'Only works from Russia', + }, + # Serial's serie + { + u'url': u'http://www.ivi.ru/watch/dezhurnyi_angel/74791', + u'file': u'74791.mp4', + u'md5': u'3e6cc9a848c1d2ebcc6476444967baa9', + u'info_dict': { + u'title': u'ÐежÑÑнÑй ангел - 1 ÑеÑиÑ', + u'duration': 2490, + u'thumbnail': u'http://thumbs.ivi.ru/f7.vcp.digitalaccess.ru/contents/8/e/bc2f6c2b6e5d291152fdd32c059141.jpg', + }, + u'skip': u'Only works from Russia', + } + ] + + # Sorted by quality + _known_formats = ['MP4-low-mobile', 'MP4-mobile', 'FLV-lo', 'MP4-lo', 'FLV-hi', 'MP4-hi', 'MP4-SHQ'] + + # Sorted by size + _known_thumbnails = ['Thumb-120x90', 'Thumb-160', 'Thumb-640x480'] + + def _extract_description(self, html): + m = re.search(r'<meta name="description" content="(?P<description>[^"]+)"/>', html) + return m.group('description') if m is not None else None + + def _extract_comment_count(self, html): + m = re.search(u'(?s)<a href="#" id="view-comments" class="action-button dim gradient">\s*ÐомменÑаÑии:\s*(?P<commentcount>\d+)\s*</a>', html) + return int(m.group('commentcount')) if m is not None else 0 + + def _real_extract(self, url): + mobj = re.match(self._VALID_URL, url) + video_id = mobj.group('videoid') + + api_url = 'http://api.digitalaccess.ru/api/json/' + + data = {u'method': u'da.content.get', + u'params': [video_id, {u'site': u's183', + u'referrer': u'http://www.ivi.ru/watch/%s' % video_id, + u'contentid': video_id + } + ] + } + + request = compat_urllib_request.Request(api_url, json.dumps(data)) + + video_json_page = self._download_webpage(request, video_id, u'Downloading video JSON') + video_json = json.loads(video_json_page) + + if u'error' in video_json: + error = video_json[u'error'] + if error[u'origin'] == u'NoRedisValidData': + raise ExtractorError(u'Video %s does not exist' % video_id, expected=True) + raise ExtractorError(u'Unable to download video %s: %s' % (video_id, error[u'message']), expected=True) + + result = video_json[u'result'] + + formats = [{'url': x[u'url'], + 'format_id': x[u'content_format'] + } for x in result[u'files'] if x[u'content_format'] in self._known_formats] + formats.sort(key=lambda fmt: self._known_formats.index(fmt['format_id'])) + + if len(formats) == 0: + self._downloader.report_warning(u'No media links available for %s' % video_id) + return + + duration = result[u'duration'] + compilation = result[u'compilation'] + title = result[u'title'] + + title = '%s - %s' % (compilation, title) if compilation is not None else title + + previews = result[u'preview'] + previews.sort(key=lambda fmt: self._known_thumbnails.index(fmt['content_format'])) + thumbnail = previews[-1][u'url'] if len(previews) > 0 else None + + video_page = self._download_webpage(url, video_id, u'Downloading video page') + description = self._extract_description(video_page) + comment_count = self._extract_comment_count(video_page) + + return { + 'id': video_id, + 'title': title, + 'thumbnail': thumbnail, + 'description': description, + 'duration': duration, + 'comment_count': comment_count, + 'formats': formats, + } + + +class IviCompilationIE(InfoExtractor): + IE_DESC = u'ivi.ru compilations' + IE_NAME = u'ivi:compilation' + _VALID_URL = r'^https?://(?:www\.)?ivi\.ru/watch/(?!\d+)(?P<compilationid>[a-z\d_-]+)(?:/season(?P<seasonid>\d+))?$' + + def _extract_entries(self, html, compilation_id): + return [self.url_result('http://www.ivi.ru/watch/%s/%s' % (compilation_id, serie), 'Ivi') + for serie in re.findall(r'<strong><a href="/watch/%s/(\d+)">(?:[^<]+)</a></strong>' % compilation_id, html)] + + def _real_extract(self, url): + mobj = re.match(self._VALID_URL, url) + compilation_id = mobj.group('compilationid') + season_id = mobj.group('seasonid') + + if season_id is not None: # Season link + season_page = self._download_webpage(url, compilation_id, u'Downloading season %s web page' % season_id) + playlist_id = '%s/season%s' % (compilation_id, season_id) + playlist_title = self._html_search_meta(u'title', season_page, u'title') + entries = self._extract_entries(season_page, compilation_id) + else: # Compilation link + compilation_page = self._download_webpage(url, compilation_id, u'Downloading compilation web page') + playlist_id = compilation_id + playlist_title = self._html_search_meta(u'title', compilation_page, u'title') + seasons = re.findall(r'<a href="/watch/%s/season(\d+)">[^<]+</a>' % compilation_id, compilation_page) + if len(seasons) == 0: # No seasons in this compilation + entries = self._extract_entries(compilation_page, compilation_id) + else: + entries = [] + for season_id in seasons: + season_page = self._download_webpage('http://www.ivi.ru/watch/%s/season%s' % (compilation_id, season_id), + compilation_id, u'Downloading season %s web page' % season_id) + entries.extend(self._extract_entries(season_page, compilation_id)) + + return self.playlist_result(entries, playlist_id, playlist_title) \ No newline at end of file diff --git a/youtube_dl/extractor/jukebox.py b/youtube_dl/extractor/jukebox.py index c7bb234..592c64e 100644 --- a/youtube_dl/extractor/jukebox.py +++ b/youtube_dl/extractor/jukebox.py @@ -8,7 +8,7 @@ from ..utils import ( ) class JukeboxIE(InfoExtractor): - _VALID_URL = r'^http://www\.jukebox?\..+?\/.+[,](?P<video_id>[a-z0-9\-]+).html' + _VALID_URL = r'^http://www\.jukebox?\..+?\/.+[,](?P<video_id>[a-z0-9\-]+)\.html' _IFRAME = r'<iframe .*src="(?P<iframe>[^"]*)".*>' _VIDEO_URL = r'"config":{"file":"(?P<video_url>http:[^"]+[.](?P<video_ext>[^.?]+)[?]mdtk=[0-9]+)"' _TITLE = r'<h1 class="inline">(?P<title>[^<]+)</h1>.*<span id="infos_article_artist">(?P<artist>[^<]+)</span>' diff --git a/youtube_dl/extractor/liveleak.py b/youtube_dl/extractor/liveleak.py index dd062a1..5ae57a7 100644 --- a/youtube_dl/extractor/liveleak.py +++ b/youtube_dl/extractor/liveleak.py @@ -8,7 +8,7 @@ from ..utils import ( class LiveLeakIE(InfoExtractor): - _VALID_URL = r'^(?:http?://)?(?:\w+\.)?liveleak\.com/view\?(?:.*?)i=(?P<video_id>[\w_]+)(?:.*)' + _VALID_URL = r'^(?:http://)?(?:\w+\.)?liveleak\.com/view\?(?:.*?)i=(?P<video_id>[\w_]+)(?:.*)' IE_NAME = u'liveleak' _TEST = { u'url': u'http://www.liveleak.com/view?i=757_1364311680', diff --git a/youtube_dl/extractor/livestream.py b/youtube_dl/extractor/livestream.py index 9bc35b1..1dcd1fb 100644 --- a/youtube_dl/extractor/livestream.py +++ b/youtube_dl/extractor/livestream.py @@ -11,7 +11,7 @@ from ..utils import ( class LivestreamIE(InfoExtractor): IE_NAME = u'livestream' - _VALID_URL = r'http://new.livestream.com/.*?/(?P<event_name>.*?)(/videos/(?P<id>\d+))?/?$' + _VALID_URL = r'http://new\.livestream\.com/.*?/(?P<event_name>.*?)(/videos/(?P<id>\d+))?/?$' _TEST = { u'url': u'http://new.livestream.com/CoheedandCambria/WebsterHall/videos/4719370', u'file': u'4719370.mp4', diff --git a/youtube_dl/extractor/mdr.py b/youtube_dl/extractor/mdr.py new file mode 100644 index 0000000..08ce064 --- /dev/null +++ b/youtube_dl/extractor/mdr.py @@ -0,0 +1,63 @@ +import re + +from .common import InfoExtractor +from ..utils import ( + ExtractorError, +) + + +class MDRIE(InfoExtractor): + _VALID_URL = r'^(?P<domain>(?:https?://)?(?:www\.)?mdr\.de)/mediathek/(?:.*)/(?P<type>video|audio)(?P<video_id>[^/_]+)_.*' + + # No tests, MDR regularily deletes its videos + + def _real_extract(self, url): + m = re.match(self._VALID_URL, url) + video_id = m.group('video_id') + domain = m.group('domain') + + # determine title and media streams from webpage + html = self._download_webpage(url, video_id) + + title = self._html_search_regex(r'<h2>(.*?)</h2>', html, u'title') + xmlurl = self._search_regex( + r'(/mediathek/(?:.+)/(?:video|audio)[0-9]+-avCustom.xml)', html, u'XML URL') + + doc = self._download_xml(domain + xmlurl, video_id) + formats = [] + for a in doc.findall('./assets/asset'): + url_el = a.find('.//progressiveDownloadUrl') + if url_el is None: + continue + abr = int(a.find('bitrateAudio').text) // 1000 + media_type = a.find('mediaType').text + format = { + 'abr': abr, + 'filesize': int(a.find('fileSize').text), + 'url': url_el.text, + } + + vbr_el = a.find('bitrateVideo') + if vbr_el is None: + format.update({ + 'vcodec': 'none', + 'format_id': u'%s-%d' % (media_type, abr), + }) + else: + vbr = int(vbr_el.text) // 1000 + format.update({ + 'vbr': vbr, + 'width': int(a.find('frameWidth').text), + 'height': int(a.find('frameHeight').text), + 'format_id': u'%s-%d' % (media_type, vbr), + }) + formats.append(format) + formats.sort(key=lambda f: (f.get('vbr'), f['abr'])) + if not formats: + raise ExtractorError(u'Could not find any valid formats') + + return { + 'id': video_id, + 'title': title, + 'formats': formats, + } diff --git a/youtube_dl/extractor/metacafe.py b/youtube_dl/extractor/metacafe.py index 91480ba..99d3c83 100644 --- a/youtube_dl/extractor/metacafe.py +++ b/youtube_dl/extractor/metacafe.py @@ -1,14 +1,10 @@ import re -import socket from .common import InfoExtractor from ..utils import ( - compat_http_client, compat_parse_qs, - compat_urllib_error, compat_urllib_parse, compat_urllib_request, - compat_str, determine_ext, ExtractorError, ) @@ -69,6 +65,21 @@ class MetacafeIE(InfoExtractor): u'age_limit': 18, }, }, + # cbs video + { + u'url': u'http://www.metacafe.com/watch/cb-0rOxMBabDXN6/samsung_galaxy_note_2_samsungs_next_generation_phablet/', + u'info_dict': { + u'id': u'0rOxMBabDXN6', + u'ext': u'flv', + u'title': u'Samsung Galaxy Note 2: Samsung\'s next-generation phablet', + u'description': u'md5:54d49fac53d26d5a0aaeccd061ada09d', + u'duration': 129, + }, + u'params': { + # rtmp download + u'skip_download': True, + }, + }, ] @@ -78,12 +89,8 @@ class MetacafeIE(InfoExtractor): def _real_initialize(self): # Retrieve disclaimer - request = compat_urllib_request.Request(self._DISCLAIMER) - try: - self.report_disclaimer() - compat_urllib_request.urlopen(request).read() - except (compat_urllib_error.URLError, compat_http_client.HTTPException, socket.error) as err: - raise ExtractorError(u'Unable to retrieve disclaimer: %s' % compat_str(err)) + self.report_disclaimer() + self._download_webpage(self._DISCLAIMER, None, False, u'Unable to retrieve disclaimer') # Confirm age disclaimer_form = { @@ -92,11 +99,8 @@ class MetacafeIE(InfoExtractor): } request = compat_urllib_request.Request(self._FILTER_POST, compat_urllib_parse.urlencode(disclaimer_form)) request.add_header('Content-Type', 'application/x-www-form-urlencoded') - try: - self.report_age_confirmation() - compat_urllib_request.urlopen(request).read() - except (compat_urllib_error.URLError, compat_http_client.HTTPException, socket.error) as err: - raise ExtractorError(u'Unable to confirm age: %s' % compat_str(err)) + self.report_age_confirmation() + self._download_webpage(request, None, False, u'Unable to confirm age') def _real_extract(self, url): # Extract id and simplified title from URL @@ -106,10 +110,16 @@ class MetacafeIE(InfoExtractor): video_id = mobj.group(1) - # Check if video comes from YouTube - mobj2 = re.match(r'^yt-(.*)$', video_id) - if mobj2 is not None: - return [self.url_result('http://www.youtube.com/watch?v=%s' % mobj2.group(1), 'Youtube')] + # the video may come from an external site + m_external = re.match('^(\w{2})-(.*)$', video_id) + if m_external is not None: + prefix, ext_id = m_external.groups() + # Check if video comes from YouTube + if prefix == 'yt': + return self.url_result('http://www.youtube.com/watch?v=%s' % ext_id, 'Youtube') + # CBS videos use theplatform.com + if prefix == 'cb': + return self.url_result('theplatform:%s' % ext_id, 'ThePlatform') # Retrieve video webpage to extract further information req = compat_urllib_request.Request('http://www.metacafe.com/watch/%s/' % video_id) diff --git a/youtube_dl/extractor/metacritic.py b/youtube_dl/extractor/metacritic.py index 6b95b49..e560c1d 100644 --- a/youtube_dl/extractor/metacritic.py +++ b/youtube_dl/extractor/metacritic.py @@ -1,8 +1,10 @@ import re -import xml.etree.ElementTree import operator from .common import InfoExtractor +from ..utils import ( + fix_xml_all_ampersand, +) class MetacriticIE(InfoExtractor): @@ -23,9 +25,8 @@ class MetacriticIE(InfoExtractor): video_id = mobj.group('id') webpage = self._download_webpage(url, video_id) # The xml is not well formatted, there are raw '&' - info_xml = self._download_webpage('http://www.metacritic.com/video_data?video=' + video_id, - video_id, u'Downloading info xml').replace('&', '&') - info = xml.etree.ElementTree.fromstring(info_xml.encode('utf-8')) + info = self._download_xml('http://www.metacritic.com/video_data?video=' + video_id, + video_id, u'Downloading info xml', transform_source=fix_xml_all_ampersand) clip = next(c for c in info.findall('playList/clip') if c.find('id').text == video_id) formats = [] diff --git a/youtube_dl/extractor/mixcloud.py b/youtube_dl/extractor/mixcloud.py index e2baf44..125d815 100644 --- a/youtube_dl/extractor/mixcloud.py +++ b/youtube_dl/extractor/mixcloud.py @@ -1,13 +1,10 @@ import json import re -import socket from .common import InfoExtractor from ..utils import ( - compat_http_client, - compat_urllib_error, - compat_urllib_request, unified_strdate, + ExtractorError, ) @@ -31,13 +28,18 @@ class MixcloudIE(InfoExtractor): """Returns 1st active url from list""" for url in url_list: try: - compat_urllib_request.urlopen(url) + # We only want to know if the request succeed + # don't download the whole file + self._request_webpage(url, None, False) return url - except (compat_urllib_error.URLError, compat_http_client.HTTPException, socket.error): + except ExtractorError: url = None return None + def _get_url(self, template_url): + return self.check_urls(template_url % i for i in range(30)) + def _real_extract(self, url): mobj = re.match(self._VALID_URL, url) @@ -53,13 +55,18 @@ class MixcloudIE(InfoExtractor): preview_url = self._search_regex(r'data-preview-url="(.+?)"', webpage, u'preview url') song_url = preview_url.replace('/previews/', '/cloudcasts/originals/') template_url = re.sub(r'(stream\d*)', 'stream%d', song_url) - final_song_url = self.check_urls(template_url % i for i in range(30)) + final_song_url = self._get_url(template_url) + if final_song_url is None: + self.to_screen('Trying with m4a extension') + template_url = template_url.replace('.mp3', '.m4a').replace('originals/', 'm4a/64/') + final_song_url = self._get_url(template_url) + if final_song_url is None: + raise ExtractorError(u'Unable to extract track url') return { 'id': track_id, 'title': info['name'], 'url': final_song_url, - 'ext': 'mp3', 'description': info.get('description'), 'thumbnail': info['pictures'].get('extra_large'), 'uploader': info['user']['name'], diff --git a/youtube_dl/extractor/mtv.py b/youtube_dl/extractor/mtv.py index 6b3feb5..ed11f52 100644 --- a/youtube_dl/extractor/mtv.py +++ b/youtube_dl/extractor/mtv.py @@ -82,13 +82,20 @@ class MTVServicesInfoExtractor(InfoExtractor): def _get_videos_info(self, uri): video_id = self._id_from_uri(uri) data = compat_urllib_parse.urlencode({'uri': uri}) - idoc = self._download_xml(self._FEED_URL +'?' + data, video_id, - u'Downloading info') + + def fix_ampersand(s): + """ Fix unencoded ampersand in XML """ + return s.replace(u'& ', '& ') + idoc = self._download_xml( + self._FEED_URL + '?' + data, video_id, + u'Downloading info', transform_source=fix_ampersand) return [self._get_video_info(item) for item in idoc.findall('.//item')] class MTVIE(MTVServicesInfoExtractor): - _VALID_URL = r'^https?://(?:www\.)?mtv\.com/videos/.+?/(?P<videoid>[0-9]+)/[^/]+$' + _VALID_URL = r'''(?x)^https?:// + (?:(?:www\.)?mtv\.com/videos/.+?/(?P<videoid>[0-9]+)/[^/]+$| + m\.mtv\.com/videos/video\.rbml\?.*?id=(?P<mgid>[^&]+))''' _FEED_URL = 'http://www.mtv.com/player/embed/AS3/rss/' @@ -122,16 +129,17 @@ class MTVIE(MTVServicesInfoExtractor): def _real_extract(self, url): mobj = re.match(self._VALID_URL, url) video_id = mobj.group('videoid') - - webpage = self._download_webpage(url, video_id) - - # Some videos come from Vevo.com - m_vevo = re.search(r'isVevoVideo = true;.*?vevoVideoId = "(.*?)";', - webpage, re.DOTALL) - if m_vevo: - vevo_id = m_vevo.group(1); - self.to_screen(u'Vevo video detected: %s' % vevo_id) - return self.url_result('vevo:%s' % vevo_id, ie='Vevo') - - uri = self._html_search_regex(r'/uri/(.*?)\?', webpage, u'uri') + uri = mobj.group('mgid') + if uri is None: + webpage = self._download_webpage(url, video_id) + + # Some videos come from Vevo.com + m_vevo = re.search(r'isVevoVideo = true;.*?vevoVideoId = "(.*?)";', + webpage, re.DOTALL) + if m_vevo: + vevo_id = m_vevo.group(1); + self.to_screen(u'Vevo video detected: %s' % vevo_id) + return self.url_result('vevo:%s' % vevo_id, ie='Vevo') + + uri = self._html_search_regex(r'/uri/(.*?)\?', webpage, u'uri') return self._get_videos_info(uri) diff --git a/youtube_dl/extractor/muzu.py b/youtube_dl/extractor/muzu.py index 03e31ea..1772b7f 100644 --- a/youtube_dl/extractor/muzu.py +++ b/youtube_dl/extractor/muzu.py @@ -9,7 +9,7 @@ from ..utils import ( class MuzuTVIE(InfoExtractor): - _VALID_URL = r'https?://www.muzu.tv/(.+?)/(.+?)/(?P<id>\d+)' + _VALID_URL = r'https?://www\.muzu\.tv/(.+?)/(.+?)/(?P<id>\d+)' IE_NAME = u'muzu.tv' _TEST = { diff --git a/youtube_dl/extractor/myspass.py b/youtube_dl/extractor/myspass.py index 0067bf1..4becdde 100644 --- a/youtube_dl/extractor/myspass.py +++ b/youtube_dl/extractor/myspass.py @@ -9,7 +9,7 @@ from ..utils import ( class MySpassIE(InfoExtractor): - _VALID_URL = r'http://www.myspass.de/.*' + _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', diff --git a/youtube_dl/extractor/naver.py b/youtube_dl/extractor/naver.py index c012ec0..4cab306 100644 --- a/youtube_dl/extractor/naver.py +++ b/youtube_dl/extractor/naver.py @@ -9,7 +9,7 @@ from ..utils import ( class NaverIE(InfoExtractor): - _VALID_URL = r'https?://tvcast\.naver\.com/v/(?P<id>\d+)' + _VALID_URL = r'https?://(?:m\.)?tvcast\.naver\.com/v/(?P<id>\d+)' _TEST = { u'url': u'http://tvcast.naver.com/v/81652', diff --git a/youtube_dl/extractor/ndtv.py b/youtube_dl/extractor/ndtv.py new file mode 100644 index 0000000..d81df3c --- /dev/null +++ b/youtube_dl/extractor/ndtv.py @@ -0,0 +1,64 @@ +import re + +from .common import InfoExtractor +from ..utils import month_by_name + + +class NDTVIE(InfoExtractor): + _VALID_URL = r'^https?://(?:www\.)?ndtv\.com/video/player/[^/]*/[^/]*/(?P<id>[a-z0-9]+)' + + _TEST = { + u"url": u"http://www.ndtv.com/video/player/news/ndtv-exclusive-don-t-need-character-certificate-from-rahul-gandhi-says-arvind-kejriwal/300710", + u"file": u"300710.mp4", + u"md5": u"39f992dbe5fb531c395d8bbedb1e5e88", + u"info_dict": { + u"title": u"NDTV exclusive: Don't need character certificate from Rahul Gandhi, says Arvind Kejriwal", + u"description": u"In an exclusive interview to NDTV, Aam Aadmi Party's Arvind Kejriwal says it makes no difference to him that Rahul Gandhi said the Congress needs to learn from his party.", + u"upload_date": u"20131208", + u"duration": 1327, + u"thumbnail": u"http://i.ndtvimg.com/video/images/vod/medium/2013-12/big_300710_1386518307.jpg", + }, + } + + def _real_extract(self, url): + mobj = re.match(self._VALID_URL, url) + video_id = mobj.group('id') + + webpage = self._download_webpage(url, video_id) + + filename = self._search_regex( + r"__filename='([^']+)'", webpage, u'video filename') + video_url = (u'http://bitcast-b.bitgravity.com/ndtvod/23372/ndtv/%s' % + filename) + + duration_str = filename = self._search_regex( + r"__duration='([^']+)'", webpage, u'duration', fatal=False) + duration = None if duration_str is None else int(duration_str) + + date_m = re.search(r'''(?x) + <p\s+class="vod_dateline">\s* + Published\s+On:\s* + (?P<monthname>[A-Za-z]+)\s+(?P<day>[0-9]+),\s*(?P<year>[0-9]+) + ''', webpage) + upload_date = None + assert date_m + if date_m is not None: + month = month_by_name(date_m.group('monthname')) + if month is not None: + upload_date = '%s%02d%02d' % ( + date_m.group('year'), month, int(date_m.group('day'))) + + description = self._og_search_description(webpage) + READ_MORE = u' (Read more)' + if description.endswith(READ_MORE): + description = description[:-len(READ_MORE)] + + return { + 'id': video_id, + 'url': video_url, + 'title': self._og_search_title(webpage), + 'description': description, + 'thumbnail': self._og_search_thumbnail(webpage), + 'duration': duration, + 'upload_date': upload_date, + } diff --git a/youtube_dl/extractor/ninegag.py b/youtube_dl/extractor/ninegag.py new file mode 100644 index 0000000..ea986c0 --- /dev/null +++ b/youtube_dl/extractor/ninegag.py @@ -0,0 +1,43 @@ +import json +import re + +from .common import InfoExtractor + + +class NineGagIE(InfoExtractor): + IE_NAME = '9gag' + _VALID_URL = r'^https?://(?:www\.)?9gag\.tv/v/(?P<id>[0-9]+)' + + _TEST = { + u"url": u"http://9gag.tv/v/1912", + u"file": u"1912.mp4", + u"info_dict": { + u"description": u"This 3-minute video will make you smile and then make you feel untalented and insignificant. Anyway, you should share this awesomeness. (Thanks, Dino!)", + u"title": u"\"People Are Awesome 2013\" Is Absolutely Awesome" + }, + u'add_ie': [u'Youtube'] + } + + def _real_extract(self, url): + mobj = re.match(self._VALID_URL, url) + video_id = mobj.group('id') + + webpage = self._download_webpage(url, video_id) + data_json = self._html_search_regex(r'''(?x) + <div\s*id="tv-video"\s*data-video-source="youtube"\s* + data-video-meta="([^"]+)"''', webpage, u'video metadata') + + data = json.loads(data_json) + + return { + '_type': 'url_transparent', + 'url': data['youtubeVideoId'], + 'ie_key': 'Youtube', + 'id': video_id, + 'title': data['title'], + 'description': data['description'], + 'view_count': int(data['view_count']), + 'like_count': int(data['statistic']['like']), + 'dislike_count': int(data['statistic']['dislike']), + 'thumbnail': data['thumbnail_url'], + } diff --git a/youtube_dl/extractor/ooyala.py b/youtube_dl/extractor/ooyala.py index 1f7b4d2..d08e477 100644 --- a/youtube_dl/extractor/ooyala.py +++ b/youtube_dl/extractor/ooyala.py @@ -22,6 +22,11 @@ class OoyalaIE(InfoExtractor): def _url_for_embed_code(embed_code): return 'http://player.ooyala.com/player.js?embedCode=%s' % embed_code + @classmethod + def _build_url_result(cls, embed_code): + return cls.url_result(cls._url_for_embed_code(embed_code), + ie=cls.ie_key()) + def _extract_result(self, info, more_info): return {'id': info['embedCode'], 'ext': 'mp4', diff --git a/youtube_dl/extractor/orf.py b/youtube_dl/extractor/orf.py index cfca2a0..b42eae8 100644 --- a/youtube_dl/extractor/orf.py +++ b/youtube_dl/extractor/orf.py @@ -12,7 +12,7 @@ from ..utils import ( ) class ORFIE(InfoExtractor): - _VALID_URL = r'https?://tvthek.orf.at/(programs/.+?/episodes|topics/.+?)/(?P<id>\d+)' + _VALID_URL = r'https?://tvthek\.orf\.at/(programs/.+?/episodes|topics/.+?)/(?P<id>\d+)' def _real_extract(self, url): mobj = re.match(self._VALID_URL, url) diff --git a/youtube_dl/extractor/pbs.py b/youtube_dl/extractor/pbs.py index 65462d8..25f0192 100644 --- a/youtube_dl/extractor/pbs.py +++ b/youtube_dl/extractor/pbs.py @@ -5,7 +5,7 @@ from .common import InfoExtractor class PBSIE(InfoExtractor): - _VALID_URL = r'https?://video.pbs.org/video/(?P<id>\d+)/?' + _VALID_URL = r'https?://video\.pbs\.org/video/(?P<id>\d+)/?' _TEST = { u'url': u'http://video.pbs.org/video/2365006249/', diff --git a/youtube_dl/extractor/pornhd.py b/youtube_dl/extractor/pornhd.py new file mode 100644 index 0000000..71abd50 --- /dev/null +++ b/youtube_dl/extractor/pornhd.py @@ -0,0 +1,38 @@ +import re + +from .common import InfoExtractor +from ..utils import compat_urllib_parse + + +class PornHdIE(InfoExtractor): + _VALID_URL = r'(?:http://)?(?:www\.)?pornhd\.com/videos/(?P<video_id>[0-9]+)/(?P<video_title>.+)' + _TEST = { + u'url': u'http://www.pornhd.com/videos/1962/sierra-day-gets-his-cum-all-over-herself-hd-porn-video', + u'file': u'1962.flv', + u'md5': u'35272469887dca97abd30abecc6cdf75', + u'info_dict': { + u"title": u"sierra-day-gets-his-cum-all-over-herself-hd-porn-video", + u"age_limit": 18, + } + } + + def _real_extract(self, url): + mobj = re.match(self._VALID_URL, url) + + video_id = mobj.group('video_id') + video_title = mobj.group('video_title') + + webpage = self._download_webpage(url, video_id) + + video_url = self._html_search_regex( + r'&hd=(http.+?)&', webpage, u'video URL') + video_url = compat_urllib_parse.unquote(video_url) + age_limit = 18 + + return { + 'id': video_id, + 'url': video_url, + 'ext': 'flv', + 'title': video_title, + 'age_limit': age_limit, + } diff --git a/youtube_dl/extractor/pornhub.py b/youtube_dl/extractor/pornhub.py index 8b34719..d9135c6 100644 --- a/youtube_dl/extractor/pornhub.py +++ b/youtube_dl/extractor/pornhub.py @@ -12,7 +12,7 @@ from ..aes import ( ) class PornHubIE(InfoExtractor): - _VALID_URL = r'^(?:https?://)?(?:www\.)?(?P<url>pornhub\.com/view_video\.php\?viewkey=(?P<videoid>[0-9]+))' + _VALID_URL = r'^(?:https?://)?(?:www\.)?(?P<url>pornhub\.com/view_video\.php\?viewkey=(?P<videoid>[0-9a-f]+))' _TEST = { u'url': u'http://www.pornhub.com/view_video.php?viewkey=648719015', u'file': u'648719015.mp4', diff --git a/youtube_dl/extractor/pyvideo.py b/youtube_dl/extractor/pyvideo.py new file mode 100644 index 0000000..3305459 --- /dev/null +++ b/youtube_dl/extractor/pyvideo.py @@ -0,0 +1,51 @@ +import re +import os + +from .common import InfoExtractor + + +class PyvideoIE(InfoExtractor): + _VALID_URL = r'(?:http://)?(?:www\.)?pyvideo\.org/video/(?P<id>\d+)/(.*)' + _TESTS = [{ + u'url': u'http://pyvideo.org/video/1737/become-a-logging-expert-in-30-minutes', + u'file': u'24_4WWkSmNo.mp4', + u'md5': u'de317418c8bc76b1fd8633e4f32acbc6', + u'info_dict': { + u"title": u"Become a logging expert in 30 minutes", + u"description": u"md5:9665350d466c67fb5b1598de379021f7", + u"upload_date": u"20130320", + u"uploader": u"NextDayVideo", + u"uploader_id": u"NextDayVideo", + }, + u'add_ie': ['Youtube'], + }, + { + u'url': u'http://pyvideo.org/video/2542/gloriajw-spotifywitherikbernhardsson182m4v', + u'md5': u'5fe1c7e0a8aa5570330784c847ff6d12', + u'info_dict': { + u'id': u'2542', + u'ext': u'm4v', + u'title': u'Gloriajw-SpotifyWithErikBernhardsson182', + }, + }, + ] + + def _real_extract(self, url): + mobj = re.match(self._VALID_URL, url) + video_id = mobj.group('id') + webpage = self._download_webpage(url, video_id) + m_youtube = re.search(r'(https?://www\.youtube\.com/watch\?v=.*)', webpage) + + if m_youtube is not None: + return self.url_result(m_youtube.group(1), 'Youtube') + + title = self._html_search_regex(r'<div class="section">.*?<h3>([^>]+?)</h3>', + webpage, u'title', flags=re.DOTALL) + video_url = self._search_regex([r'<source src="(.*?)"', + r'<dt>Download</dt>.*?<a href="(.+?)"'], + webpage, u'video url', flags=re.DOTALL) + return { + 'id': video_id, + 'title': os.path.splitext(title)[0], + 'url': video_url, + } diff --git a/youtube_dl/extractor/radiofrance.py b/youtube_dl/extractor/radiofrance.py new file mode 100644 index 0000000..34652f6 --- /dev/null +++ b/youtube_dl/extractor/radiofrance.py @@ -0,0 +1,55 @@ +# coding: utf-8 +import re + +from .common import InfoExtractor + + +class RadioFranceIE(InfoExtractor): + _VALID_URL = r'^https?://maison\.radiofrance\.fr/radiovisions/(?P<id>[^?#]+)' + IE_NAME = u'radiofrance' + + _TEST = { + u'url': u'http://maison.radiofrance.fr/radiovisions/one-one', + u'file': u'one-one.ogg', + u'md5': u'bdbb28ace95ed0e04faab32ba3160daf', + u'info_dict': { + u"title": u"One to one", + u"description": u"Plutôt que d'imaginer la radio de demain comme technologie ou comme création de contenu, je veux montrer que quelles que soient ses évolutions, j'ai l'intime conviction que la radio continuera d'être un grand média de proximité pour les auditeurs.", + u"uploader": u"Thomas Hercouët", + }, + } + + def _real_extract(self, url): + m = re.match(self._VALID_URL, url) + video_id = m.group('id') + + webpage = self._download_webpage(url, video_id) + title = self._html_search_regex(r'<h1>(.*?)</h1>', webpage, u'title') + description = self._html_search_regex( + r'<div class="bloc_page_wrapper"><div class="text">(.*?)</div>', + webpage, u'description', fatal=False) + uploader = self._html_search_regex( + r'<div class="credit"> © (.*?)</div>', + webpage, u'uploader', fatal=False) + + formats_str = self._html_search_regex( + r'class="jp-jplayer[^"]*" data-source="([^"]+)">', + webpage, u'audio URLs') + formats = [ + { + 'format_id': fm[0], + 'url': fm[1], + 'vcodec': 'none', + } + for fm in + re.findall(r"([a-z0-9]+)\s*:\s*'([^']+)'", formats_str) + ] + # No sorting, we don't know any more about these formats + + return { + 'id': video_id, + 'title': title, + 'formats': formats, + 'description': description, + 'uploader': uploader, + } diff --git a/youtube_dl/extractor/rtlnow.py b/youtube_dl/extractor/rtlnow.py index 2f238de..ccf0b15 100644 --- a/youtube_dl/extractor/rtlnow.py +++ b/youtube_dl/extractor/rtlnow.py @@ -7,14 +7,15 @@ from ..utils import ( ExtractorError, ) + class RTLnowIE(InfoExtractor): """Information Extractor for RTL NOW, RTL2 NOW, RTL NITRO, SUPER RTL NOW, VOX NOW and n-tv NOW""" - _VALID_URL = r'(?:http://)?(?P<url>(?P<base_url>rtl-now\.rtl\.de/|rtl2now\.rtl2\.de/|(?:www\.)?voxnow\.de/|(?:www\.)?rtlnitronow\.de/|(?:www\.)?superrtlnow\.de/|(?:www\.)?n-tvnow\.de/)[a-zA-Z0-9-]+/[a-zA-Z0-9-]+\.php\?(?:container_id|film_id)=(?P<video_id>[0-9]+)&player=1(?:&season=[0-9]+)?(?:&.*)?)' + _VALID_URL = r'(?:http://)?(?P<url>(?P<domain>rtl-now\.rtl\.de|rtl2now\.rtl2\.de|(?:www\.)?voxnow\.de|(?:www\.)?rtlnitronow\.de|(?:www\.)?superrtlnow\.de|(?:www\.)?n-tvnow\.de)/+[a-zA-Z0-9-]+/[a-zA-Z0-9-]+\.php\?(?:container_id|film_id)=(?P<video_id>[0-9]+)&player=1(?:&season=[0-9]+)?(?:&.*)?)' _TESTS = [{ u'url': u'http://rtl-now.rtl.de/ahornallee/folge-1.php?film_id=90419&player=1&season=1', u'file': u'90419.flv', u'info_dict': { - u'upload_date': u'20070416', + u'upload_date': u'20070416', u'title': u'Ahornallee - Folge 1 - Der Einzug', u'description': u'Folge 1 - Der Einzug', }, @@ -81,7 +82,7 @@ class RTLnowIE(InfoExtractor): mobj = re.match(self._VALID_URL, url) webpage_url = u'http://' + mobj.group('url') - video_page_url = u'http://' + mobj.group('base_url') + video_page_url = u'http://' + mobj.group('domain') + u'/' video_id = mobj.group(u'video_id') webpage = self._download_webpage(webpage_url, video_id) diff --git a/youtube_dl/extractor/rutube.py b/youtube_dl/extractor/rutube.py index a18034f..e3e9bc0 100644 --- a/youtube_dl/extractor/rutube.py +++ b/youtube_dl/extractor/rutube.py @@ -11,7 +11,7 @@ from ..utils import ( class RutubeIE(InfoExtractor): - _VALID_URL = r'https?://rutube.ru/video/(?P<long_id>\w+)' + _VALID_URL = r'https?://rutube\.ru/video/(?P<long_id>\w+)' _TEST = { u'url': u'http://rutube.ru/video/3eac3b4561676c17df9132a9a1e62e3e/', diff --git a/youtube_dl/extractor/slashdot.py b/youtube_dl/extractor/slashdot.py index f5003c7..d68646d 100644 --- a/youtube_dl/extractor/slashdot.py +++ b/youtube_dl/extractor/slashdot.py @@ -4,7 +4,7 @@ from .common import InfoExtractor class SlashdotIE(InfoExtractor): - _VALID_URL = r'https?://tv.slashdot.org/video/\?embed=(?P<id>.*?)(&|$)' + _VALID_URL = r'https?://tv\.slashdot\.org/video/\?embed=(?P<id>.*?)(&|$)' _TEST = { u'add_ie': ['Ooyala'], diff --git a/youtube_dl/extractor/smotri.py b/youtube_dl/extractor/smotri.py index f035a32..beea58d 100644 --- a/youtube_dl/extractor/smotri.py +++ b/youtube_dl/extractor/smotri.py @@ -1,13 +1,17 @@ # encoding: utf-8 +import os.path import re import json import hashlib +import uuid from .common import InfoExtractor from ..utils import ( - determine_ext, - ExtractorError + compat_urllib_parse, + compat_urllib_request, + ExtractorError, + url_basename, ) @@ -130,7 +134,16 @@ class SmotriIE(InfoExtractor): # We will extract some from the video web page instead video_page_url = 'http://' + mobj.group('url') video_page = self._download_webpage(video_page_url, video_id, u'Downloading video page') - + + # Warning if video is unavailable + warning = self._html_search_regex( + r'<div class="videoUnModer">(.*?)</div>', video_page, + u'warning messagef', default=None) + if warning is not None: + self._downloader.report_warning( + u'Video %s may not be available; smotri said: %s ' % + (video_id, warning)) + # Adult content if re.search(u'EroConfirmText">', video_page) is not None: self.report_age_confirmation() @@ -146,38 +159,44 @@ class SmotriIE(InfoExtractor): # Extract the rest of meta data video_title = self._search_meta(u'name', video_page, u'title') if not video_title: - video_title = video_url.rsplit('/', 1)[-1] + video_title = os.path.splitext(url_basename(video_url))[0] video_description = self._search_meta(u'description', video_page) END_TEXT = u' на ÑайÑе Smotri.com' - if video_description.endswith(END_TEXT): + if video_description and video_description.endswith(END_TEXT): video_description = video_description[:-len(END_TEXT)] START_TEXT = u'СмоÑÑеÑÑ Ð¾Ð½Ð»Ð°Ð¹Ð½ Ñолик ' - if video_description.startswith(START_TEXT): + if video_description and video_description.startswith(START_TEXT): video_description = video_description[len(START_TEXT):] video_thumbnail = self._search_meta(u'thumbnail', video_page) upload_date_str = self._search_meta(u'uploadDate', video_page, u'upload date') - upload_date_m = re.search(r'(?P<year>\d{4})\.(?P<month>\d{2})\.(?P<day>\d{2})T', upload_date_str) - video_upload_date = ( - ( - upload_date_m.group('year') + - upload_date_m.group('month') + - upload_date_m.group('day') + if upload_date_str: + upload_date_m = re.search(r'(?P<year>\d{4})\.(?P<month>\d{2})\.(?P<day>\d{2})T', upload_date_str) + video_upload_date = ( + ( + upload_date_m.group('year') + + upload_date_m.group('month') + + upload_date_m.group('day') + ) + if upload_date_m else None ) - if upload_date_m else None - ) + else: + video_upload_date = None duration_str = self._search_meta(u'duration', video_page) - duration_m = re.search(r'T(?P<hours>[0-9]{2})H(?P<minutes>[0-9]{2})M(?P<seconds>[0-9]{2})S', duration_str) - video_duration = ( - ( - (int(duration_m.group('hours')) * 60 * 60) + - (int(duration_m.group('minutes')) * 60) + - int(duration_m.group('seconds')) + if duration_str: + duration_m = re.search(r'T(?P<hours>[0-9]{2})H(?P<minutes>[0-9]{2})M(?P<seconds>[0-9]{2})S', duration_str) + video_duration = ( + ( + (int(duration_m.group('hours')) * 60 * 60) + + (int(duration_m.group('minutes')) * 60) + + int(duration_m.group('seconds')) + ) + if duration_m else None ) - if duration_m else None - ) + else: + video_duration = None video_uploader = self._html_search_regex( u'<div class="DescrUser"><div>ÐвÑоÑ.*?onmouseover="popup_user_info[^"]+">(.*?)</a>', @@ -200,7 +219,7 @@ class SmotriIE(InfoExtractor): 'uploader': video_uploader, 'upload_date': video_upload_date, 'uploader_id': video_uploader_id, - 'video_duration': video_duration, + 'duration': video_duration, 'view_count': video_view_count, 'age_limit': 18 if adult_content else 0, 'video_page_url': video_page_url @@ -250,3 +269,105 @@ class SmotriUserIE(InfoExtractor): u'user nickname') return self.playlist_result(entries, user_id, user_nickname) + + +class SmotriBroadcastIE(InfoExtractor): + IE_DESC = u'Smotri.com broadcasts' + IE_NAME = u'smotri:broadcast' + _VALID_URL = r'^https?://(?:www\.)?(?P<url>smotri\.com/live/(?P<broadcastid>[^/]+))/?.*' + + def _real_extract(self, url): + mobj = re.match(self._VALID_URL, url) + broadcast_id = mobj.group('broadcastid') + + broadcast_url = 'http://' + mobj.group('url') + broadcast_page = self._download_webpage(broadcast_url, broadcast_id, u'Downloading broadcast page') + + if re.search(u'>РежиÑÑÐµÑ Ñ Ð»Ð¾Ð³Ð¸Ð½Ð¾Ð¼ <br/>"%s"<br/> <span>не ÑÑÑеÑÑвÑеÑ<' % broadcast_id, broadcast_page) is not None: + raise ExtractorError(u'Broadcast %s does not exist' % broadcast_id, expected=True) + + # Adult content + if re.search(u'EroConfirmText">', broadcast_page) is not None: + + (username, password) = self._get_login_info() + if username is None: + raise ExtractorError(u'Erotic broadcasts allowed only for registered users, ' + u'use --username and --password options to provide account credentials.', expected=True) + + # Log in + login_form_strs = { + u'login-hint53': '1', + u'confirm_erotic': '1', + u'login': username, + u'password': password, + } + # Convert to UTF-8 *before* urlencode because Python 2.x's urlencode + # chokes on unicode + login_form = dict((k.encode('utf-8'), v.encode('utf-8')) for k,v in login_form_strs.items()) + login_data = compat_urllib_parse.urlencode(login_form).encode('utf-8') + login_url = broadcast_url + '/?no_redirect=1' + request = compat_urllib_request.Request(login_url, login_data) + request.add_header('Content-Type', 'application/x-www-form-urlencoded') + broadcast_page = self._download_webpage( + request, broadcast_id, note=u'Logging in and confirming age') + + if re.search(u'>ÐевеÑнÑй логин или паÑолÑ<', broadcast_page) is not None: + raise ExtractorError(u'Unable to log in: bad username or password', expected=True) + + adult_content = True + else: + adult_content = False + + ticket = self._html_search_regex( + u'window\.broadcast_control\.addFlashVar\\(\'file\', \'([^\']+)\'\\);', + broadcast_page, u'broadcast ticket') + + url = 'http://smotri.com/broadcast/view/url/?ticket=%s' % ticket + + broadcast_password = self._downloader.params.get('videopassword', None) + if broadcast_password: + url += '&pass=%s' % hashlib.md5(broadcast_password.encode('utf-8')).hexdigest() + + broadcast_json_page = self._download_webpage(url, broadcast_id, u'Downloading broadcast JSON') + + try: + broadcast_json = json.loads(broadcast_json_page) + + protected_broadcast = broadcast_json['_pass_protected'] == 1 + if protected_broadcast and not broadcast_password: + raise ExtractorError(u'This broadcast is protected by a password, use the --video-password option', expected=True) + + broadcast_offline = broadcast_json['is_play'] == 0 + if broadcast_offline: + raise ExtractorError(u'Broadcast %s is offline' % broadcast_id, expected=True) + + rtmp_url = broadcast_json['_server'] + if not rtmp_url.startswith('rtmp://'): + raise ExtractorError(u'Unexpected broadcast rtmp URL') + + broadcast_playpath = broadcast_json['_streamName'] + broadcast_thumbnail = broadcast_json['_imgURL'] + broadcast_title = broadcast_json['title'] + broadcast_description = broadcast_json['description'] + broadcaster_nick = broadcast_json['nick'] + broadcaster_login = broadcast_json['login'] + rtmp_conn = 'S:%s' % uuid.uuid4().hex + except KeyError: + if protected_broadcast: + raise ExtractorError(u'Bad broadcast password', expected=True) + raise ExtractorError(u'Unexpected broadcast JSON') + + return { + 'id': broadcast_id, + 'url': rtmp_url, + 'title': broadcast_title, + 'thumbnail': broadcast_thumbnail, + 'description': broadcast_description, + 'uploader': broadcaster_nick, + 'uploader_id': broadcaster_login, + 'age_limit': 18 if adult_content else 0, + 'ext': 'flv', + 'play_path': broadcast_playpath, + 'rtmp_live': True, + 'rtmp_conn': rtmp_conn + } diff --git a/youtube_dl/extractor/soundcloud.py b/youtube_dl/extractor/soundcloud.py index 3a19ab1..e22ff9c 100644 --- a/youtube_dl/extractor/soundcloud.py +++ b/youtube_dl/extractor/soundcloud.py @@ -1,3 +1,4 @@ +# encoding: utf-8 import json import re import itertools @@ -23,9 +24,12 @@ class SoundcloudIE(InfoExtractor): """ _VALID_URL = r'''^(?:https?://)? - (?:(?:(?:www\.)?soundcloud\.com/([\w\d-]+)/([\w\d-]+)/?(?:[?].*)?$) + (?:(?:(?:www\.|m\.)?soundcloud\.com/ + (?P<uploader>[\w\d-]+)/ + (?!sets/)(?P<title>[\w\d-]+)/? + (?P<token>[^?]+?)?(?:[?].*)?$) |(?:api\.soundcloud\.com/tracks/(?P<track_id>\d+)) - |(?P<widget>w.soundcloud.com/player/?.*?url=.*) + |(?P<widget>w\.soundcloud\.com/player/?.*?url=.*) ) ''' IE_NAME = u'soundcloud' @@ -56,6 +60,32 @@ class SoundcloudIE(InfoExtractor): u'skip_download': True, }, }, + # private link + { + u'url': u'https://soundcloud.com/jaimemf/youtube-dl-test-video-a-y-baw/s-8Pjrp', + u'md5': u'aa0dd32bfea9b0c5ef4f02aacd080604', + u'info_dict': { + u'id': u'123998367', + u'ext': u'mp3', + u'title': u'Youtube - Dl Test Video \'\' AÌâ', + u'uploader': u'jaimeMF', + u'description': u'test chars: \"\'/\\äâ', + u'upload_date': u'20131209', + }, + }, + # downloadable song + { + u'url': u'https://soundcloud.com/simgretina/just-your-problem-baby-1', + u'md5': u'56a8b69568acaa967b4c49f9d1d52d19', + u'info_dict': { + u'id': u'105614606', + u'ext': u'wav', + u'title': u'Just Your Problem Baby (Acapella)', + u'description': u'Vocals', + u'uploader': u'Sim Gretina', + u'upload_date': u'20130815', + }, + }, ] _CLIENT_ID = 'b45b1aa10f1ac2941910a7f0d10f8e28' @@ -73,7 +103,7 @@ class SoundcloudIE(InfoExtractor): def _resolv_url(cls, url): return 'http://api.soundcloud.com/resolve.json?url=' + url + '&client_id=' + cls._CLIENT_ID - def _extract_info_dict(self, info, full_title=None, quiet=False): + def _extract_info_dict(self, info, full_title=None, quiet=False, secret_token=None): track_id = compat_str(info['id']) name = full_title or track_id if quiet: @@ -82,7 +112,7 @@ class SoundcloudIE(InfoExtractor): thumbnail = info['artwork_url'] if thumbnail is not None: thumbnail = thumbnail.replace('-large', '-t500x500') - ext = info.get('original_format', u'mp3') + ext = u'mp3' result = { 'id': track_id, 'uploader': info['user']['username'], @@ -98,14 +128,16 @@ class SoundcloudIE(InfoExtractor): track_id, self._CLIENT_ID)) result['formats'] = [{ 'format_id': 'download', - 'ext': ext, + 'ext': info.get('original_format', u'mp3'), 'url': format_url, 'vcodec': 'none', }] else: # We have to retrieve the url + streams_url = ('http://api.soundcloud.com/i1/tracks/{0}/streams?' + 'client_id={1}&secret_token={2}'.format(track_id, self._IPHONE_CLIENT_ID, secret_token)) stream_json = self._download_webpage( - 'http://api.soundcloud.com/i1/tracks/{0}/streams?client_id={1}'.format(track_id, self._IPHONE_CLIENT_ID), + streams_url, track_id, u'Downloading track url') formats = [] @@ -157,6 +189,7 @@ class SoundcloudIE(InfoExtractor): raise ExtractorError(u'Invalid URL: %s' % url) track_id = mobj.group('track_id') + token = None if track_id is not None: info_json_url = 'http://api.soundcloud.com/tracks/' + track_id + '.json?client_id=' + self._CLIENT_ID full_title = track_id @@ -165,19 +198,22 @@ class SoundcloudIE(InfoExtractor): return self.url_result(query['url'][0], ie='Soundcloud') else: # extract uploader (which is in the url) - uploader = mobj.group(1) + uploader = mobj.group('uploader') # extract simple title (uploader + slug of song title) - slug_title = mobj.group(2) - full_title = '%s/%s' % (uploader, slug_title) + slug_title = mobj.group('title') + token = mobj.group('token') + full_title = resolve_title = '%s/%s' % (uploader, slug_title) + if token: + resolve_title += '/%s' % token self.report_resolve(full_title) - url = 'http://soundcloud.com/%s/%s' % (uploader, slug_title) + url = 'http://soundcloud.com/%s' % resolve_title info_json_url = self._resolv_url(url) info_json = self._download_webpage(info_json_url, full_title, u'Downloading info JSON') info = json.loads(info_json) - return self._extract_info_dict(info, full_title) + return self._extract_info_dict(info, full_title, secret_token=token) class SoundcloudSetIE(SoundcloudIE): _VALID_URL = r'^(?:https?://)?(?:www\.)?soundcloud\.com/([\w\d-]+)/sets/([\w\d-]+)(?:[?].*)?$' @@ -217,7 +253,7 @@ class SoundcloudSetIE(SoundcloudIE): class SoundcloudUserIE(SoundcloudIE): - _VALID_URL = r'https?://(www\.)?soundcloud.com/(?P<user>[^/]+)(/?(tracks/)?)?(\?.*)?$' + _VALID_URL = r'https?://(www\.)?soundcloud\.com/(?P<user>[^/]+)(/?(tracks/)?)?(\?.*)?$' IE_NAME = u'soundcloud:user' # it's in tests/test_playlists.py diff --git a/youtube_dl/extractor/space.py b/youtube_dl/extractor/space.py index 0d32a06..11455e0 100644 --- a/youtube_dl/extractor/space.py +++ b/youtube_dl/extractor/space.py @@ -6,7 +6,7 @@ from ..utils import RegexNotFoundError, ExtractorError class SpaceIE(InfoExtractor): - _VALID_URL = r'https?://www\.space\.com/\d+-(?P<title>[^/\.\?]*?)-video.html' + _VALID_URL = r'https?://www\.space\.com/\d+-(?P<title>[^/\.\?]*?)-video\.html' _TEST = { u'add_ie': ['Brightcove'], u'url': u'http://www.space.com/23373-huge-martian-landforms-detail-revealed-by-european-probe-video.html', diff --git a/youtube_dl/extractor/stanfordoc.py b/youtube_dl/extractor/stanfordoc.py index b27838b..44c52c7 100644 --- a/youtube_dl/extractor/stanfordoc.py +++ b/youtube_dl/extractor/stanfordoc.py @@ -1,14 +1,7 @@ import re -import socket -import xml.etree.ElementTree from .common import InfoExtractor from ..utils import ( - compat_http_client, - compat_str, - compat_urllib_error, - compat_urllib_request, - ExtractorError, orderedSet, unescapeHTML, @@ -18,7 +11,7 @@ from ..utils import ( class StanfordOpenClassroomIE(InfoExtractor): IE_NAME = u'stanfordoc' IE_DESC = u'Stanford Open ClassRoom' - _VALID_URL = r'^(?:https?://)?openclassroom.stanford.edu(?P<path>/?|(/MainFolder/(?:HomePage|CoursePage|VideoPage)\.php([?]course=(?P<course>[^&]+)(&video=(?P<video>[^&]+))?(&.*)?)?))$' + _VALID_URL = r'^(?:https?://)?openclassroom\.stanford\.edu(?P<path>/?|(/MainFolder/(?:HomePage|CoursePage|VideoPage)\.php([?]course=(?P<course>[^&]+)(&video=(?P<video>[^&]+))?(&.*)?)?))$' _TEST = { u'url': u'http://openclassroom.stanford.edu/MainFolder/VideoPage.php?course=PracticalUnix&video=intro-environment&speed=100', u'file': u'PracticalUnix_intro-environment.mp4', @@ -45,11 +38,7 @@ class StanfordOpenClassroomIE(InfoExtractor): self.report_extraction(info['id']) baseUrl = 'http://openclassroom.stanford.edu/MainFolder/courses/' + course + '/videos/' xmlUrl = baseUrl + video + '.xml' - try: - metaXml = compat_urllib_request.urlopen(xmlUrl).read() - except (compat_urllib_error.URLError, compat_http_client.HTTPException, socket.error) as err: - raise ExtractorError(u'Unable to download video info XML: %s' % compat_str(err)) - mdoc = xml.etree.ElementTree.fromstring(metaXml) + mdoc = self._download_xml(xmlUrl, info['id']) try: info['title'] = mdoc.findall('./title')[0].text info['url'] = baseUrl + mdoc.findall('./videoFile')[0].text @@ -95,12 +84,9 @@ class StanfordOpenClassroomIE(InfoExtractor): 'upload_date': None, } - self.report_download_webpage(info['id']) rootURL = 'http://openclassroom.stanford.edu/MainFolder/HomePage.php' - try: - rootpage = compat_urllib_request.urlopen(rootURL).read() - except (compat_urllib_error.URLError, compat_http_client.HTTPException, socket.error) as err: - raise ExtractorError(u'Unable to download course info page: ' + compat_str(err)) + rootpage = self._download_webpage(rootURL, info['id'], + errnote=u'Unable to download course info page') info['title'] = info['id'] diff --git a/youtube_dl/extractor/tf1.py b/youtube_dl/extractor/tf1.py index 772134a..2c5c88b 100644 --- a/youtube_dl/extractor/tf1.py +++ b/youtube_dl/extractor/tf1.py @@ -7,7 +7,7 @@ from .common import InfoExtractor class TF1IE(InfoExtractor): """TF1 uses the wat.tv player.""" - _VALID_URL = r'http://videos.tf1.fr/.*-(.*?).html' + _VALID_URL = r'http://videos\.tf1\.fr/.*-(.*?)\.html' _TEST = { u'url': u'http://videos.tf1.fr/auto-moto/citroen-grand-c4-picasso-2013-presentation-officielle-8062060.html', u'file': u'10635995.mp4', diff --git a/youtube_dl/extractor/theplatform.py b/youtube_dl/extractor/theplatform.py new file mode 100644 index 0000000..cec6526 --- /dev/null +++ b/youtube_dl/extractor/theplatform.py @@ -0,0 +1,80 @@ +import re +import json + +from .common import InfoExtractor +from ..utils import ( + ExtractorError, + xpath_with_ns, +) + +_x = lambda p: xpath_with_ns(p, {'smil': 'http://www.w3.org/2005/SMIL21/Language'}) + + +class ThePlatformIE(InfoExtractor): + _VALID_URL = r'(?:https?://link\.theplatform\.com/s/[^/]+/|theplatform:)(?P<id>[^/\?]+)' + + _TEST = { + # from http://www.metacafe.com/watch/cb-e9I_cZgTgIPd/blackberrys_big_bold_z30/ + u'url': u'http://link.theplatform.com/s/dJ5BDC/e9I_cZgTgIPd/meta.smil?format=smil&Tracking=true&mbr=true', + u'info_dict': { + u'id': u'e9I_cZgTgIPd', + u'ext': u'flv', + u'title': u'Blackberry\'s big, bold Z30', + u'description': u'The Z30 is Blackberry\'s biggest, baddest mobile messaging device yet.', + u'duration': 247, + }, + u'params': { + # rtmp download + u'skip_download': True, + }, + } + + def _get_info(self, video_id): + smil_url = ('http://link.theplatform.com/s/dJ5BDC/{0}/meta.smil?' + 'format=smil&mbr=true'.format(video_id)) + meta = self._download_xml(smil_url, video_id) + + try: + error_msg = next( + n.attrib['abstract'] + for n in meta.findall(_x('.//smil:ref')) + if n.attrib.get('title') == u'Geographic Restriction') + except StopIteration: + pass + else: + raise ExtractorError(error_msg, expected=True) + + info_url = 'http://link.theplatform.com/s/dJ5BDC/{0}?format=preview'.format(video_id) + info_json = self._download_webpage(info_url, video_id) + info = json.loads(info_json) + + head = meta.find(_x('smil:head')) + body = meta.find(_x('smil:body')) + base_url = head.find(_x('smil:meta')).attrib['base'] + switch = body.find(_x('smil:switch')) + formats = [] + for f in switch.findall(_x('smil:video')): + attr = f.attrib + formats.append({ + 'url': base_url, + 'play_path': 'mp4:' + attr['src'], + 'ext': 'flv', + 'width': int(attr['width']), + 'height': int(attr['height']), + 'vbr': int(attr['system-bitrate']), + }) + formats.sort(key=lambda f: (f['height'], f['width'], f['vbr'])) + + return { + 'id': video_id, + 'title': info['title'], + 'formats': formats, + 'description': info['description'], + 'thumbnail': info['defaultThumbnailUrl'], + 'duration': info['duration']//1000, + } + + def _real_extract(self, url): + mobj = re.match(self._VALID_URL, url) + video_id = mobj.group('id') + return self._get_info(video_id) diff --git a/youtube_dl/extractor/unistra.py b/youtube_dl/extractor/unistra.py index 516e189..474610e 100644 --- a/youtube_dl/extractor/unistra.py +++ b/youtube_dl/extractor/unistra.py @@ -3,7 +3,7 @@ import re from .common import InfoExtractor class UnistraIE(InfoExtractor): - _VALID_URL = r'http://utv.unistra.fr/(?:index|video).php\?id_video\=(\d+)' + _VALID_URL = r'http://utv\.unistra\.fr/(?:index|video)\.php\?id_video\=(\d+)' _TEST = { u'url': u'http://utv.unistra.fr/video.php?id_video=154', diff --git a/youtube_dl/extractor/vbox7.py b/youtube_dl/extractor/vbox7.py index 4f803bc..5a136a9 100644 --- a/youtube_dl/extractor/vbox7.py +++ b/youtube_dl/extractor/vbox7.py @@ -15,7 +15,7 @@ class Vbox7IE(InfoExtractor): _TEST = { u'url': u'http://vbox7.com/play:249bb972c2', u'file': u'249bb972c2.flv', - u'md5': u'9c70d6d956f888bdc08c124acc120cfe', + u'md5': u'99f65c0c9ef9b682b97313e052734c3f', u'info_dict': { u"title": u"\u0421\u043c\u044f\u0445! \u0427\u0443\u0434\u043e - \u0447\u0438\u0441\u0442 \u0437\u0430 \u0441\u0435\u043a\u0443\u043d\u0434\u0438 - \u0421\u043a\u0440\u0438\u0442\u0430 \u043a\u0430\u043c\u0435\u0440\u0430" } diff --git a/youtube_dl/extractor/veehd.py b/youtube_dl/extractor/veehd.py index 3a99a29..3cf8c85 100644 --- a/youtube_dl/extractor/veehd.py +++ b/youtube_dl/extractor/veehd.py @@ -9,7 +9,7 @@ from ..utils import ( ) class VeeHDIE(InfoExtractor): - _VALID_URL = r'https?://veehd.com/video/(?P<id>\d+)' + _VALID_URL = r'https?://veehd\.com/video/(?P<id>\d+)' _TEST = { u'url': u'http://veehd.com/video/4686958', diff --git a/youtube_dl/extractor/vevo.py b/youtube_dl/extractor/vevo.py index 4378b17..a4b26a2 100644 --- a/youtube_dl/extractor/vevo.py +++ b/youtube_dl/extractor/vevo.py @@ -15,7 +15,12 @@ class VevoIE(InfoExtractor): Accepts urls from vevo.com or in the format 'vevo:{id}' (currently used by MTVIE) """ - _VALID_URL = r'((http://www.vevo.com/watch/.*?/.*?/)|(vevo:))(?P<id>.*?)(\?|$)' + _VALID_URL = r'''(?x) + (?:https?://www\.vevo\.com/watch/(?:[^/]+/[^/]+/)?| + https?://cache\.vevo\.com/m/html/embed\.html\?video=| + https?://videoplayer\.vevo\.com/embed/embedded\?videoId=| + vevo:) + (?P<id>[^&?#]+)''' _TESTS = [{ u'url': u'http://www.vevo.com/watch/hurts/somebody-to-die-for/GB1101300280', u'file': u'GB1101300280.mp4', @@ -24,7 +29,7 @@ class VevoIE(InfoExtractor): u"upload_date": u"20130624", u"uploader": u"Hurts", u"title": u"Somebody to Die For", - u"duration": 230, + u"duration": 230.12, u"width": 1920, u"height": 1080, } diff --git a/youtube_dl/extractor/vice.py b/youtube_dl/extractor/vice.py index 6b93afa..87812d6 100644 --- a/youtube_dl/extractor/vice.py +++ b/youtube_dl/extractor/vice.py @@ -6,7 +6,7 @@ from ..utils import ExtractorError class ViceIE(InfoExtractor): - _VALID_URL = r'http://www.vice.com/.*?/(?P<name>.+)' + _VALID_URL = r'http://www\.vice\.com/.*?/(?P<name>.+)' _TEST = { u'url': u'http://www.vice.com/Fringes/cowboy-capitalists-part-1', diff --git a/youtube_dl/extractor/viddler.py b/youtube_dl/extractor/viddler.py index 75335df..9328ef4 100644 --- a/youtube_dl/extractor/viddler.py +++ b/youtube_dl/extractor/viddler.py @@ -2,13 +2,10 @@ import json import re from .common import InfoExtractor -from ..utils import ( - determine_ext, -) class ViddlerIE(InfoExtractor): - _VALID_URL = r'(?P<domain>https?://(?:www\.)?viddler.com)/(?:v|embed|player)/(?P<id>[a-z0-9]+)' + _VALID_URL = r'(?P<domain>https?://(?:www\.)?viddler\.com)/(?:v|embed|player)/(?P<id>[a-z0-9]+)' _TEST = { u"url": u"http://www.viddler.com/v/43903784", u'file': u'43903784.mp4', diff --git a/youtube_dl/extractor/videofyme.py b/youtube_dl/extractor/videofyme.py index 912802d..f751690 100644 --- a/youtube_dl/extractor/videofyme.py +++ b/youtube_dl/extractor/videofyme.py @@ -7,7 +7,7 @@ from ..utils import ( ) class VideofyMeIE(InfoExtractor): - _VALID_URL = r'https?://(www.videofy.me/.+?|p.videofy.me/v)/(?P<id>\d+)(&|#|$)' + _VALID_URL = r'https?://(www\.videofy\.me/.+?|p\.videofy\.me/v)/(?P<id>\d+)(&|#|$)' IE_NAME = u'videofy.me' _TEST = { diff --git a/youtube_dl/extractor/videopremium.py b/youtube_dl/extractor/videopremium.py index acae814..65463c7 100644 --- a/youtube_dl/extractor/videopremium.py +++ b/youtube_dl/extractor/videopremium.py @@ -15,6 +15,7 @@ class VideoPremiumIE(InfoExtractor): u'params': { u'skip_download': True, }, + u'skip': u'Test file has been deleted.', } def _real_extract(self, url): diff --git a/youtube_dl/extractor/vimeo.py b/youtube_dl/extractor/vimeo.py index f27763a..c3623fc 100644 --- a/youtube_dl/extractor/vimeo.py +++ b/youtube_dl/extractor/vimeo.py @@ -16,11 +16,20 @@ from ..utils import ( unsmuggle_url, ) + class VimeoIE(InfoExtractor): """Information extractor for vimeo.com.""" # _VALID_URL matches Vimeo URLs - _VALID_URL = r'(?P<proto>https?://)?(?:(?:www|(?P<player>player))\.)?vimeo(?P<pro>pro)?\.com/(?:(?:(?:groups|album)/[^/]+)|(?:.*?)/)?(?P<direct_link>play_redirect_hls\?clip_id=)?(?:videos?/)?(?P<id>[0-9]+)/?(?:[?].*)?(?:#.*)?$' + _VALID_URL = r'''(?x) + (?P<proto>https?://)? + (?:(?:www|(?P<player>player))\.)? + vimeo(?P<pro>pro)?\.com/ + (?:.*?/)? + (?:(?:play_redirect_hls|moogaloop\.swf)\?clip_id=)? + (?:videos?/)? + (?P<id>[0-9]+) + /?(?:[?&].*)?(?:[#].*)?$''' _NETRC_MACHINE = 'vimeo' IE_NAME = u'vimeo' _TESTS = [ @@ -115,7 +124,7 @@ class VimeoIE(InfoExtractor): def _real_initialize(self): self._login() - def _real_extract(self, url, new_video=True): + def _real_extract(self, url): url, data = unsmuggle_url(url) headers = std_headers if data is not None: @@ -151,8 +160,14 @@ class VimeoIE(InfoExtractor): config = json.loads(config_json) except RegexNotFoundError: # For pro videos or player.vimeo.com urls - config = self._search_regex([r' = {config:({.+?}),assets:', r'(?:c|b)=({.+?});'], - webpage, u'info section', flags=re.DOTALL) + # We try to find out to which variable is assigned the config dic + m_variable_name = re.search('(\w)\.video\.id', webpage) + if m_variable_name is not None: + config_re = r'%s=({.+?});' % re.escape(m_variable_name.group(1)) + else: + config_re = [r' = {config:({.+?}),assets:', r'(?:[abc])=({.+?});'] + config = self._search_regex(config_re, webpage, u'info section', + flags=re.DOTALL) config = json.loads(config) except Exception as e: if re.search('The creator of this video has not given you permission to embed it on this domain.', webpage): @@ -196,6 +211,16 @@ class VimeoIE(InfoExtractor): if mobj is not None: video_upload_date = mobj.group(1) + mobj.group(2) + mobj.group(3) + try: + view_count = int(self._search_regex(r'UserPlays:(\d+)', webpage, u'view count')) + like_count = int(self._search_regex(r'UserLikes:(\d+)', webpage, u'like count')) + comment_count = int(self._search_regex(r'UserComments:(\d+)', webpage, u'comment count')) + except RegexNotFoundError: + # This info is only available in vimeo.com/{id} urls + view_count = None + like_count = None + comment_count = None + # Vimeo specific: extract request signature and timestamp sig = config['request']['signature'] timestamp = config['request']['timestamp'] @@ -242,6 +267,9 @@ class VimeoIE(InfoExtractor): 'description': video_description, 'formats': formats, 'webpage_url': url, + 'view_count': view_count, + 'like_count': like_count, + 'comment_count': comment_count, } @@ -251,11 +279,17 @@ class VimeoChannelIE(InfoExtractor): _MORE_PAGES_INDICATOR = r'<a.+?rel="next"' _TITLE_RE = r'<link rel="alternate"[^>]+?title="(.*?)"' + def _page_url(self, base_url, pagenum): + return '%s/videos/page:%d/' % (base_url, pagenum) + + def _extract_list_title(self, webpage): + return self._html_search_regex(self._TITLE_RE, webpage, u'list title') + def _extract_videos(self, list_id, base_url): video_ids = [] for pagenum in itertools.count(1): webpage = self._download_webpage( - '%s/videos/page:%d/' % (base_url, pagenum),list_id, + self._page_url(base_url, pagenum) ,list_id, u'Downloading page %s' % pagenum) video_ids.extend(re.findall(r'id="clip_(\d+?)"', webpage)) if re.search(self._MORE_PAGES_INDICATOR, webpage, re.DOTALL) is None: @@ -263,11 +297,9 @@ class VimeoChannelIE(InfoExtractor): entries = [self.url_result('http://vimeo.com/%s' % video_id, 'Vimeo') for video_id in video_ids] - list_title = self._html_search_regex(self._TITLE_RE, webpage, - u'list title') return {'_type': 'playlist', 'id': list_id, - 'title': list_title, + 'title': self._extract_list_title(webpage), 'entries': entries, } @@ -284,7 +316,7 @@ class VimeoUserIE(VimeoChannelIE): @classmethod def suitable(cls, url): - if VimeoChannelIE.suitable(url) or VimeoIE.suitable(url): + if VimeoChannelIE.suitable(url) or VimeoIE.suitable(url) or VimeoAlbumIE.suitable(url) or VimeoGroupsIE.suitable(url): return False return super(VimeoUserIE, cls).suitable(url) @@ -292,3 +324,30 @@ class VimeoUserIE(VimeoChannelIE): mobj = re.match(self._VALID_URL, url) name = mobj.group('name') return self._extract_videos(name, 'http://vimeo.com/%s' % name) + + +class VimeoAlbumIE(VimeoChannelIE): + IE_NAME = u'vimeo:album' + _VALID_URL = r'(?:https?://)?vimeo.\com/album/(?P<id>\d+)' + _TITLE_RE = r'<header id="page_header">\n\s*<h1>(.*?)</h1>' + + def _page_url(self, base_url, pagenum): + return '%s/page:%d/' % (base_url, pagenum) + + def _real_extract(self, url): + mobj = re.match(self._VALID_URL, url) + album_id = mobj.group('id') + return self._extract_videos(album_id, 'http://vimeo.com/album/%s' % album_id) + + +class VimeoGroupsIE(VimeoAlbumIE): + IE_NAME = u'vimeo:group' + _VALID_URL = r'(?:https?://)?vimeo.\com/groups/(?P<name>[^/]+)' + + def _extract_list_title(self, webpage): + return self._og_search_title(webpage) + + def _real_extract(self, url): + mobj = re.match(self._VALID_URL, url) + name = mobj.group('name') + return self._extract_videos(name, 'http://vimeo.com/groups/%s' % name) diff --git a/youtube_dl/extractor/wat.py b/youtube_dl/extractor/wat.py index 29c25f0..4fab6c6 100644 --- a/youtube_dl/extractor/wat.py +++ b/youtube_dl/extractor/wat.py @@ -11,7 +11,7 @@ from ..utils import ( class WatIE(InfoExtractor): - _VALID_URL=r'http://www.wat.tv/.*-(?P<shortID>.*?)_.*?.html' + _VALID_URL=r'http://www\.wat\.tv/.*-(?P<shortID>.*?)_.*?\.html' IE_NAME = 'wat.tv' _TEST = { u'url': u'http://www.wat.tv/video/world-war-philadelphia-vost-6bv55_2fjr7_.html', diff --git a/youtube_dl/extractor/wimp.py b/youtube_dl/extractor/wimp.py index b9c3b13..82a626e 100644 --- a/youtube_dl/extractor/wimp.py +++ b/youtube_dl/extractor/wimp.py @@ -11,7 +11,8 @@ class WimpIE(InfoExtractor): u'file': u'deerfence.flv', u'md5': u'8b215e2e0168c6081a1cf84b2846a2b5', u'info_dict': { - u"title": u"Watch Till End: Herd of deer jump over a fence." + u"title": u"Watch Till End: Herd of deer jump over a fence.", + u"description": u"These deer look as fluid as running water when they jump over this fence as a herd. This video is one that needs to be watched until the very end for the true majesty to be witnessed, but once it comes, it's sure to take your breath away.", } } @@ -19,18 +20,14 @@ class WimpIE(InfoExtractor): mobj = re.match(self._VALID_URL, url) video_id = mobj.group(1) webpage = self._download_webpage(url, video_id) - title = self._search_regex(r'<meta name="description" content="(.+?)" />',webpage, 'video title') - thumbnail_url = self._search_regex(r'<meta property="og\:image" content="(.+?)" />', webpage,'video thumbnail') googleString = self._search_regex("googleCode = '(.*?)'", webpage, 'file url') googleString = base64.b64decode(googleString).decode('ascii') - final_url = self._search_regex('","(.*?)"', googleString,'final video url') - ext = final_url.rpartition(u'.')[2] - - return [{ - 'id': video_id, - 'url': final_url, - 'ext': ext, - 'title': title, - 'thumbnail': thumbnail_url, - }] + final_url = self._search_regex('","(.*?)"', googleString, u'final video url') + return { + 'id': video_id, + 'url': final_url, + 'title': self._og_search_title(webpage), + 'thumbnail': self._og_search_thumbnail(webpage), + 'description': self._og_search_description(webpage), + } diff --git a/youtube_dl/extractor/wistia.py b/youtube_dl/extractor/wistia.py new file mode 100644 index 0000000..e1748c2 --- /dev/null +++ b/youtube_dl/extractor/wistia.py @@ -0,0 +1,55 @@ +import json +import re + +from .common import InfoExtractor + + +class WistiaIE(InfoExtractor): + _VALID_URL = r'^https?://(?:fast\.)?wistia\.net/embed/iframe/(?P<id>[a-z0-9]+)' + + _TEST = { + u"url": u"http://fast.wistia.net/embed/iframe/sh7fpupwlt", + u"file": u"sh7fpupwlt.mov", + u"md5": u"cafeb56ec0c53c18c97405eecb3133df", + u"info_dict": { + u"title": u"cfh_resourceful_zdkh_final_1" + }, + } + + def _real_extract(self, url): + mobj = re.match(self._VALID_URL, url) + video_id = mobj.group('id') + + webpage = self._download_webpage(url, video_id) + data_json = self._html_search_regex( + r'Wistia.iframeInit\((.*?), {}\);', webpage, u'video data') + + data = json.loads(data_json) + + formats = [] + thumbnails = [] + for atype, a in data['assets'].items(): + if atype == 'still': + thumbnails.append({ + 'url': a['url'], + 'resolution': '%dx%d' % (a['width'], a['height']), + }) + continue + if atype == 'preview': + continue + formats.append({ + 'format_id': atype, + 'url': a['url'], + 'width': a['width'], + 'height': a['height'], + 'filesize': a['size'], + 'ext': a['ext'], + }) + formats.sort(key=lambda a: a['filesize']) + + return { + 'id': video_id, + 'title': data['name'], + 'formats': formats, + 'thumbnails': thumbnails, + } diff --git a/youtube_dl/extractor/xhamster.py b/youtube_dl/extractor/xhamster.py index 279f75e..ef9997e 100644 --- a/youtube_dl/extractor/xhamster.py +++ b/youtube_dl/extractor/xhamster.py @@ -26,7 +26,7 @@ class XHamsterIE(InfoExtractor): { u'url': u'http://xhamster.com/movies/2221348/britney_spears_sexy_booty.html?hd', u'file': u'2221348.flv', - u'md5': u'970a94178ca4118c5aa3aaea21211b81', + u'md5': u'e767b9475de189320f691f49c679c4c7', u'info_dict': { u"upload_date": u"20130914", u"uploader_id": u"jojo747400", @@ -46,7 +46,7 @@ class XHamsterIE(InfoExtractor): return mobj.group('server')+'/key='+mobj.group('file') def is_hd(webpage): - return webpage.find('<div class=\'icon iconHD\'>') != -1 + return webpage.find('<div class=\'icon iconHD\'') != -1 mobj = re.match(self._VALID_URL, url) diff --git a/youtube_dl/extractor/xtube.py b/youtube_dl/extractor/xtube.py index e3458d2..1a6a768 100644 --- a/youtube_dl/extractor/xtube.py +++ b/youtube_dl/extractor/xtube.py @@ -32,7 +32,7 @@ class XTubeIE(InfoExtractor): video_title = self._html_search_regex(r'<div class="p_5px[^>]*>([^<]+)', webpage, u'title') video_uploader = self._html_search_regex(r'so_s\.addVariable\("owner_u", "([^"]+)', webpage, u'uploader', fatal=False) - video_description = self._html_search_regex(r'<p class="video_description">([^<]+)', webpage, u'description', default=None) + video_description = self._html_search_regex(r'<p class="video_description">([^<]+)', webpage, u'description', fatal=False) video_url= self._html_search_regex(r'var videoMp4 = "([^"]+)', webpage, u'video_url').replace('\\/', '/') path = compat_urllib_parse_urlparse(video_url).path extension = os.path.splitext(path)[1][1:] diff --git a/youtube_dl/extractor/yahoo.py b/youtube_dl/extractor/yahoo.py index e457c47..5c9c361 100644 --- a/youtube_dl/extractor/yahoo.py +++ b/youtube_dl/extractor/yahoo.py @@ -47,7 +47,7 @@ class YahooIE(InfoExtractor): # The 'meta' field is not always in the video webpage, we request it # from another page long_id = info['id'] - return self._get_info(info['id'], video_id) + return self._get_info(long_id, video_id) def _get_info(self, long_id, video_id): query = ('SELECT * FROM yahoo.media.video.streams WHERE id="%s"' diff --git a/youtube_dl/extractor/youjizz.py b/youtube_dl/extractor/youjizz.py index 1fcc518..e971b5b 100644 --- a/youtube_dl/extractor/youjizz.py +++ b/youtube_dl/extractor/youjizz.py @@ -7,7 +7,7 @@ from ..utils import ( class YouJizzIE(InfoExtractor): - _VALID_URL = r'^(?:https?://)?(?:\w+\.)?youjizz\.com/videos/(?P<videoid>[^.]+).html$' + _VALID_URL = r'^(?:https?://)?(?:\w+\.)?youjizz\.com/videos/(?P<videoid>[^.]+)\.html$' _TEST = { u'url': u'http://www.youjizz.com/videos/zeichentrick-1-2189178.html', u'file': u'2189178.flv', diff --git a/youtube_dl/extractor/youtube.py b/youtube_dl/extractor/youtube.py index 7fff761..a685765 100644 --- a/youtube_dl/extractor/youtube.py +++ b/youtube_dl/extractor/youtube.py @@ -7,7 +7,6 @@ import itertools import json import os.path import re -import socket import string import struct import traceback @@ -17,9 +16,7 @@ from .common import InfoExtractor, SearchInfoExtractor from .subtitles import SubtitlesInfoExtractor from ..utils import ( compat_chr, - compat_http_client, compat_parse_qs, - compat_urllib_error, compat_urllib_parse, compat_urllib_request, compat_urlparse, @@ -45,19 +42,11 @@ class YoutubeBaseInfoExtractor(InfoExtractor): # If True it will raise an error if no login info is provided _LOGIN_REQUIRED = False - def report_lang(self): - """Report attempt to set language.""" - self.to_screen(u'Setting language') - def _set_language(self): - request = compat_urllib_request.Request(self._LANG_URL) - try: - self.report_lang() - compat_urllib_request.urlopen(request).read() - except (compat_urllib_error.URLError, compat_http_client.HTTPException, socket.error) as err: - self._downloader.report_warning(u'unable to set language: %s' % compat_str(err)) - return False - return True + return bool(self._download_webpage( + self._LANG_URL, None, + note=u'Setting language', errnote='unable to set language', + fatal=False)) def _login(self): (username, password) = self._get_login_info() @@ -67,12 +56,12 @@ class YoutubeBaseInfoExtractor(InfoExtractor): raise ExtractorError(u'No login info available, needed for using %s.' % self.IE_NAME, expected=True) return False - request = compat_urllib_request.Request(self._LOGIN_URL) - try: - login_page = compat_urllib_request.urlopen(request).read().decode('utf-8') - except (compat_urllib_error.URLError, compat_http_client.HTTPException, socket.error) as err: - self._downloader.report_warning(u'unable to fetch login page: %s' % compat_str(err)) - return False + login_page = self._download_webpage( + self._LOGIN_URL, None, + note=u'Downloading login page', + errnote=u'unable to fetch login page', fatal=False) + if login_page is False: + return galx = self._search_regex(r'(?s)<input.+?name="GALX".+?value="(.+?)"', login_page, u'Login GALX parameter') @@ -102,29 +91,28 @@ class YoutubeBaseInfoExtractor(InfoExtractor): # chokes on unicode login_form = dict((k.encode('utf-8'), v.encode('utf-8')) for k,v in login_form_strs.items()) login_data = compat_urllib_parse.urlencode(login_form).encode('ascii') - request = compat_urllib_request.Request(self._LOGIN_URL, login_data) - try: - self.report_login() - login_results = compat_urllib_request.urlopen(request).read().decode('utf-8') - if re.search(r'(?i)<form[^>]* id="gaia_loginform"', login_results) is not None: - self._downloader.report_warning(u'unable to log in: bad username or password') - return False - except (compat_urllib_error.URLError, compat_http_client.HTTPException, socket.error) as err: - self._downloader.report_warning(u'unable to log in: %s' % compat_str(err)) + + req = compat_urllib_request.Request(self._LOGIN_URL, login_data) + login_results = self._download_webpage( + req, None, + note=u'Logging in', errnote=u'unable to log in', fatal=False) + if login_results is False: + return False + if re.search(r'(?i)<form[^>]* id="gaia_loginform"', login_results) is not None: + self._downloader.report_warning(u'unable to log in: bad username or password') return False return True def _confirm_age(self): age_form = { - 'next_url': '/', - 'action_confirm': 'Confirm', - } - request = compat_urllib_request.Request(self._AGE_URL, compat_urllib_parse.urlencode(age_form)) - try: - self.report_age_confirmation() - compat_urllib_request.urlopen(request).read().decode('utf-8') - except (compat_urllib_error.URLError, compat_http_client.HTTPException, socket.error) as err: - raise ExtractorError(u'Unable to confirm age: %s' % compat_str(err)) + 'next_url': '/', + 'action_confirm': 'Confirm', + } + req = compat_urllib_request.Request(self._AGE_URL, compat_urllib_parse.urlencode(age_form)) + + self._download_webpage( + req, None, + note=u'Confirming age', errnote=u'Unable to confirm age') return True def _real_initialize(self): @@ -388,10 +376,6 @@ class YoutubeIE(YoutubeBaseInfoExtractor, SubtitlesInfoExtractor): super(YoutubeIE, self).__init__(*args, **kwargs) self._player_cache = {} - def report_video_webpage_download(self, video_id): - """Report attempt to download video webpage.""" - self.to_screen(u'%s: Downloading video webpage' % video_id) - def report_video_info_webpage_download(self, video_id): """Report attempt to download video info webpage.""" self.to_screen(u'%s: Downloading video info webpage' % video_id) @@ -1258,15 +1242,8 @@ class YoutubeIE(YoutubeBaseInfoExtractor, SubtitlesInfoExtractor): video_id = self._extract_id(url) # Get video webpage - self.report_video_webpage_download(video_id) url = 'https://www.youtube.com/watch?v=%s&gl=US&hl=en&has_verified=1' % video_id - request = compat_urllib_request.Request(url) - try: - video_webpage_bytes = compat_urllib_request.urlopen(request).read() - except (compat_urllib_error.URLError, compat_http_client.HTTPException, socket.error) as err: - raise ExtractorError(u'Unable to download video webpage: %s' % compat_str(err)) - - video_webpage = video_webpage_bytes.decode('utf-8', 'ignore') + video_webpage = self._download_webpage(url, video_id) # Attempt to extract SWF player URL mobj = re.search(r'swfConfig.*?"(https?:\\/\\/.*?watch.*?-.*?\.swf)"', video_webpage) @@ -1383,6 +1360,16 @@ class YoutubeIE(YoutubeBaseInfoExtractor, SubtitlesInfoExtractor): else: video_description = u'' + def _extract_count(klass): + count = self._search_regex( + r'class="%s">([\d,]+)</span>' % re.escape(klass), + video_webpage, klass, default=None) + if count is not None: + return int(count.replace(',', '')) + return None + like_count = _extract_count(u'likes-count') + dislike_count = _extract_count(u'dislikes-count') + # subtitles video_subtitles = self.extract_subtitles(video_id, video_webpage) @@ -1392,9 +1379,9 @@ class YoutubeIE(YoutubeBaseInfoExtractor, SubtitlesInfoExtractor): if 'length_seconds' not in video_info: self._downloader.report_warning(u'unable to extract video duration') - video_duration = '' + video_duration = None else: - video_duration = compat_urllib_parse.unquote_plus(video_info['length_seconds'][0]) + video_duration = int(compat_urllib_parse.unquote_plus(video_info['length_seconds'][0])) # annotations video_annotations = None @@ -1515,6 +1502,8 @@ class YoutubeIE(YoutubeBaseInfoExtractor, SubtitlesInfoExtractor): 'annotations': video_annotations, 'webpage_url': 'https://www.youtube.com/watch?v=%s' % video_id, 'view_count': view_count, + 'like_count': like_count, + 'dislike_count': dislike_count, }) return results @@ -1529,10 +1518,10 @@ class YoutubePlaylistIE(YoutubeBaseInfoExtractor): \? (?:.*?&)*? (?:p|a|list)= | p/ ) - ((?:PL|EC|UU|FL)?[0-9A-Za-z-_]{10,}) + ((?:PL|EC|UU|FL|RD)?[0-9A-Za-z-_]{10,}) .* | - ((?:PL|EC|UU|FL)[0-9A-Za-z-_]{10,}) + ((?:PL|EC|UU|FL|RD)[0-9A-Za-z-_]{10,}) )""" _TEMPLATE_URL = 'https://www.youtube.com/playlist?list=%s&page=%s' _MORE_PAGES_INDICATOR = r'data-link-type="next"' @@ -1554,7 +1543,7 @@ class YoutubePlaylistIE(YoutubeBaseInfoExtractor): def _extract_mix(self, playlist_id): # The mixes are generated from a a single video # the id of the playlist is just 'RD' + video_id - url = 'https://youtube.com/watch?v=%s&list=%s' % (playlist_id[2:], playlist_id) + url = 'https://youtube.com/watch?v=%s&list=%s' % (playlist_id[-11:], playlist_id) webpage = self._download_webpage(url, playlist_id, u'Downloading Youtube mix') title_span = (get_element_by_attribute('class', 'title long-title', webpage) or get_element_by_attribute('class', 'title ', webpage)) @@ -1582,9 +1571,12 @@ class YoutubePlaylistIE(YoutubeBaseInfoExtractor): else: self.to_screen(u'Downloading playlist PL%s - add --no-playlist to just download video %s' % (playlist_id, video_id)) - if len(playlist_id) == 13: # 'RD' + 11 characters for the video id + if playlist_id.startswith('RD'): # Mixes require a custom extraction process return self._extract_mix(playlist_id) + if playlist_id.startswith('TL'): + raise ExtractorError(u'For downloading YouTube.com top lists, use ' + u'the "yttoplist" keyword, for example "youtube-dl \'yttoplist:music:Top Tracks\'"', expected=True) # Extract the video ids from the playlist pages ids = [] @@ -1607,6 +1599,38 @@ class YoutubePlaylistIE(YoutubeBaseInfoExtractor): return self.playlist_result(url_results, playlist_id, playlist_title) +class YoutubeTopListIE(YoutubePlaylistIE): + IE_NAME = u'youtube:toplist' + IE_DESC = (u'YouTube.com top lists, "yttoplist:{channel}:{list title}"' + u' (Example: "yttoplist:music:Top Tracks")') + _VALID_URL = r'yttoplist:(?P<chann>.*?):(?P<title>.*?)$' + + def _real_extract(self, url): + mobj = re.match(self._VALID_URL, url) + channel = mobj.group('chann') + title = mobj.group('title') + query = compat_urllib_parse.urlencode({'title': title}) + playlist_re = 'href="([^"]+?%s[^"]+?)"' % re.escape(query) + channel_page = self._download_webpage('https://www.youtube.com/%s' % channel, title) + link = self._html_search_regex(playlist_re, channel_page, u'list') + url = compat_urlparse.urljoin('https://www.youtube.com/', link) + + video_re = r'data-index="\d+".*?data-video-id="([0-9A-Za-z_-]{11})"' + ids = [] + # sometimes the webpage doesn't contain the videos + # retry until we get them + for i in itertools.count(0): + msg = u'Downloading Youtube mix' + if i > 0: + msg += ', retry #%d' % i + webpage = self._download_webpage(url, title, msg) + ids = orderedSet(re.findall(video_re, webpage)) + if ids: + break + url_results = self._ids_to_results(ids) + return self.playlist_result(url_results, playlist_title=title) + + class YoutubeChannelIE(InfoExtractor): IE_DESC = u'YouTube.com channels' _VALID_URL = r"^(?:https?://)?(?:youtu\.be|(?:\w+\.)?youtube(?:-nocookie)?\.com)/channel/([0-9A-Za-z_-]+)" @@ -1632,10 +1656,11 @@ class YoutubeChannelIE(InfoExtractor): video_ids = [] url = 'https://www.youtube.com/channel/%s/videos' % channel_id channel_page = self._download_webpage(url, channel_id) - if re.search(r'channel-header-autogenerated-label', channel_page) is not None: - autogenerated = True - else: - autogenerated = False + autogenerated = re.search(r'''(?x) + class="[^"]*?(?: + channel-header-autogenerated-label| + yt-channel-title-autogenerated + )[^"]*"''', channel_page) is not None if autogenerated: # The videos are contained in a single page @@ -1692,7 +1717,7 @@ class YoutubeUserIE(InfoExtractor): # page by page until there are no video ids - it means we got # all of them. - video_ids = [] + url_results = [] for pagenum in itertools.count(0): start_index = pagenum * self._GDATA_PAGE_SIZE + 1 @@ -1710,10 +1735,17 @@ class YoutubeUserIE(InfoExtractor): break # Extract video identifiers - ids_in_page = [] - for entry in response['feed']['entry']: - ids_in_page.append(entry['id']['$t'].split('/')[-1]) - video_ids.extend(ids_in_page) + entries = response['feed']['entry'] + for entry in entries: + title = entry['title']['$t'] + video_id = entry['id']['$t'].split('/')[-1] + url_results.append({ + '_type': 'url', + 'url': video_id, + 'ie_key': 'Youtube', + 'id': 'video_id', + 'title': title, + }) # A little optimization - if current page is not # "full", ie. does not contain PAGE_SIZE video ids then @@ -1721,12 +1753,9 @@ class YoutubeUserIE(InfoExtractor): # are no more ids on further pages - no need to query # again. - if len(ids_in_page) < self._GDATA_PAGE_SIZE: + if len(entries) < self._GDATA_PAGE_SIZE: break - url_results = [ - self.url_result(video_id, 'Youtube', video_id=video_id) - for video_id in video_ids] return self.playlist_result(url_results, playlist_title=username) @@ -1737,10 +1766,6 @@ class YoutubeSearchIE(SearchInfoExtractor): IE_NAME = u'youtube:search' _SEARCH_KEY = 'ytsearch' - def report_download_page(self, query, pagenum): - """Report attempt to download search page with given number.""" - self._downloader.to_screen(u'[youtube] query "%s": Downloading page %s' % (query, pagenum)) - def _get_n_results(self, query, n): """Get a specified number of results for a query""" @@ -1749,16 +1774,15 @@ class YoutubeSearchIE(SearchInfoExtractor): limit = n while (50 * pagenum) < limit: - self.report_download_page(query, pagenum+1) result_url = self._API_URL % (compat_urllib_parse.quote_plus(query), (50*pagenum)+1) - request = compat_urllib_request.Request(result_url) - try: - data = compat_urllib_request.urlopen(request).read().decode('utf-8') - except (compat_urllib_error.URLError, compat_http_client.HTTPException, socket.error) as err: - raise ExtractorError(u'Unable to download API page: %s' % compat_str(err)) - api_response = json.loads(data)['data'] - - if not 'items' in api_response: + data_json = self._download_webpage( + result_url, video_id=u'query "%s"' % query, + note=u'Downloading page %s' % (pagenum + 1), + errnote=u'Unable to download API page') + data = json.loads(data_json) + api_response = data['data'] + + if 'items' not in api_response: raise ExtractorError(u'[youtube] No video results') new_ids = list(video['id'] for video in api_response['items']) diff --git a/youtube_dl/extractor/zdf.py b/youtube_dl/extractor/zdf.py index 689f197..35ece35 100644 --- a/youtube_dl/extractor/zdf.py +++ b/youtube_dl/extractor/zdf.py @@ -73,14 +73,14 @@ class ZDFIE(InfoExtractor): try: proto_pref = -PROTO_ORDER.index(format_m.group('proto')) except ValueError: - proto_pref = 999 + proto_pref = -999 quality = fnode.find('./quality').text QUALITY_ORDER = ['veryhigh', '300', 'high', 'med', 'low'] try: quality_pref = -QUALITY_ORDER.index(quality) except ValueError: - quality_pref = 999 + quality_pref = -999 abr = int(fnode.find('./audioBitrate').text) // 1000 vbr = int(fnode.find('./videoBitrate').text) // 1000 diff --git a/youtube_dl/utils.py b/youtube_dl/utils.py index c486ef8..2e48f18 100644 --- a/youtube_dl/utils.py +++ b/youtube_dl/utils.py @@ -1,6 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- +import ctypes import datetime import email.utils import errno @@ -15,9 +16,9 @@ import platform import re import ssl import socket +import subprocess import sys import traceback -import xml.etree.ElementTree import zlib try: @@ -548,7 +549,7 @@ def make_HTTPS_handler(opts_no_check_certificate): def connect(self): sock = socket.create_connection((self.host, self.port), self.timeout) - if self._tunnel_host: + if getattr(self, '_tunnel_host', False): self.sock = sock self._tunnel() try: @@ -562,11 +563,14 @@ def make_HTTPS_handler(opts_no_check_certificate): return HTTPSHandlerV3() else: context = ssl.SSLContext(ssl.PROTOCOL_SSLv3) - context.set_default_verify_paths() - context.verify_mode = (ssl.CERT_NONE if opts_no_check_certificate else ssl.CERT_REQUIRED) + context.set_default_verify_paths() + try: + context.load_default_certs() + except AttributeError: + pass # Python < 3.4 return compat_urllib_request.HTTPSHandler(context=context) class ExtractorError(Exception): @@ -763,6 +767,10 @@ def unified_strdate(date_str): upload_date = datetime.datetime.strptime(date_str, expression).strftime('%Y%m%d') except: pass + if upload_date is None: + timetuple = email.utils.parsedate_tz(date_str) + if timetuple: + upload_date = datetime.datetime(*timetuple[:6]).strftime('%Y%m%d') return upload_date def determine_ext(url, default_ext=u'unknown_video'): @@ -1021,3 +1029,72 @@ def format_bytes(bytes): suffix = [u'B', u'KiB', u'MiB', u'GiB', u'TiB', u'PiB', u'EiB', u'ZiB', u'YiB'][exponent] converted = float(bytes) / float(1024 ** exponent) return u'%.2f%s' % (converted, suffix) + + +def str_to_int(int_str): + int_str = re.sub(r'[,\.]', u'', int_str) + return int(int_str) + + +def get_term_width(): + columns = os.environ.get('COLUMNS', None) + if columns: + return int(columns) + + try: + sp = subprocess.Popen( + ['stty', 'size'], + stdout=subprocess.PIPE, stderr=subprocess.PIPE) + out, err = sp.communicate() + return int(out.split()[1]) + except: + pass + return None + + +def month_by_name(name): + """ Return the number of a month by (locale-independently) English name """ + + ENGLISH_NAMES = [ + u'January', u'February', u'March', u'April', u'May', u'June', + u'July', u'August', u'September', u'October', u'November', u'December'] + try: + return ENGLISH_NAMES.index(name) + 1 + except ValueError: + return None + + +def fix_xml_all_ampersand(xml_str): + """Replace all the '&' by '&' in XML""" + return xml_str.replace(u'&', u'&') + + +def setproctitle(title): + assert isinstance(title, type(u'')) + try: + libc = ctypes.cdll.LoadLibrary("libc.so.6") + except OSError: + return + title = title + buf = ctypes.create_string_buffer(len(title) + 1) + buf.value = title.encode('utf-8') + try: + libc.prctl(15, ctypes.byref(buf), 0, 0, 0) + except AttributeError: + return # Strange libc, just skip this + + +def remove_start(s, start): + if s.startswith(start): + return s[len(start):] + return s + + +def url_basename(url): + path = compat_urlparse.urlparse(url).path + return path.strip(u'/').split(u'/')[-1] + + +class HEADRequest(compat_urllib_request.Request): + def get_method(self): + return "HEAD" diff --git a/youtube_dl/version.py b/youtube_dl/version.py index 68b30bf..24855bc 100644 --- a/youtube_dl/version.py +++ b/youtube_dl/version.py @@ -1,2 +1,2 @@ -__version__ = '2013.12.04' +__version__ = '2013.12.23' -- 2.41.3