From 42a494d5e1663c2160ae6f8b31c167d9ed29a643 Mon Sep 17 00:00:00 2001 From: Thor77 Date: Sat, 15 Oct 2016 23:09:44 +0200 Subject: [PATCH 1/9] [jamendo] Add new extractor --- youtube_dl/extractor/extractors.py | 1 + youtube_dl/extractor/jamendo.py | 94 ++++++++++++++++++++++++++++++ 2 files changed, 95 insertions(+) create mode 100644 youtube_dl/extractor/jamendo.py diff --git a/youtube_dl/extractor/extractors.py b/youtube_dl/extractor/extractors.py index 11b64eeaa..9de0a900a 100644 --- a/youtube_dl/extractor/extractors.py +++ b/youtube_dl/extractor/extractors.py @@ -369,6 +369,7 @@ from .ivi import ( ) from .ivideon import IvideonIE from .izlesene import IzleseneIE +from .jamendo import JamendoIE, JamendoAlbumIE from .jeuxvideo import JeuxVideoIE from .jove import JoveIE from .jwplatform import JWPlatformIE diff --git a/youtube_dl/extractor/jamendo.py b/youtube_dl/extractor/jamendo.py new file mode 100644 index 000000000..b562903bc --- /dev/null +++ b/youtube_dl/extractor/jamendo.py @@ -0,0 +1,94 @@ +# coding: utf-8 +from __future__ import unicode_literals + +import re + +from .common import InfoExtractor +from ..compat import compat_urlparse + + +class JamendoIE(InfoExtractor): + _VALID_URL = r'https?://(?:www\.)?jamendo\.com/track/(?P[0-9]+)/(?P[\w-]+)' + _TEST = { + 'url': 'https://www.jamendo.com/track/196219/stories-from-emona-i', + 'md5': '697564d8b10c60af35edda4fafb3fbfd', + 'info_dict': { + 'id': '196219', + 'display_id': 'stories-from-emona-i', + 'ext': 'mp3', + 'title': 'Stories from Emona I', + 'thumbnail': 're:^https?://.*\.jpg', + 'url': 'https://mp3d.jamendo.com/download/track/196219/mp32' + } + } + + def _real_extract(self, url): + url_data = self._VALID_URL_RE.match(url) + track_id = url_data.group('id') + webpage = self._download_webpage(url, track_id) + + thumbnail = self._html_search_regex(r'', webpage, 'thumbnail', fatal=False) + title = self._html_search_regex('', webpage, 'title') + + return { + 'id': track_id, + 'display_id': url_data.group('display_id'), + 'ext': 'mp3', + 'title': title, + 'thumbnail': thumbnail, + 'url': 'https://mp3d.jamendo.com/download/track/%s/mp32' % track_id + } + + +class JamendoAlbumIE(InfoExtractor): + _VALID_URL = r'https?://(?:www\.)?jamendo\.com/album/(?P[0-9]+)/(?P[\w-]+)' + _TEST = { + 'url': 'https://www.jamendo.com/album/121486/duck-on-cover', + 'info_dict': { + 'id': '121486', + 'title': 'Duck On Cover' + }, + 'playlist_mincount': 2, + 'playlist': [ + { + 'url': 'https://mp3d.jamendo.com/download/track/1032333/mp32', + 'md5': '84a1dfcc15c78943d9f736c0fc60191b', + 'info_dict': { + 'id': '1032333', + 'ext': 'mp3', + 'title': 'Warmachine' + } + }, + { + 'url': 'https://mp3d.jamendo.com/download/track/1032330/mp32', + 'md5': '6a3f03c8bc01bc2f6eedef277ecaf310', + 'info_dict': { + 'id': '1032330', + 'ext': 'mp3', + 'title': 'Without Your Ghost' + } + } + ], + 'params': { + 'playlistend': 2 + } + } + + def _real_extract(self, url): + url_data = self._VALID_URL_RE.match(url) + album_id = url_data.group('id') + webpage = self._download_webpage(url, album_id) + + title = self._html_search_regex('', webpage, 'title') + + track_paths = re.findall(r'