diff --git a/youtube_dl/extractor/extractors.py b/youtube_dl/extractor/extractors.py index 64d1fa251..8fd10bed8 100644 --- a/youtube_dl/extractor/extractors.py +++ b/youtube_dl/extractor/extractors.py @@ -601,6 +601,7 @@ from .markiza import ( ) from .massengeschmacktv import MassengeschmackTVIE from .matchtv import MatchTVIE +from .matter import MatterIE from .mdr import MDRIE from .mediaset import MediasetIE from .mediasite import ( diff --git a/youtube_dl/extractor/matter.py b/youtube_dl/extractor/matter.py new file mode 100644 index 000000000..ec427625b --- /dev/null +++ b/youtube_dl/extractor/matter.py @@ -0,0 +1,48 @@ +# coding: utf-8 +from __future__ import unicode_literals + +from .common import InfoExtractor + + +class MatterIE(InfoExtractor): + """ + InfoExtractor for Matter Music + + This class should be used to handle tracks. Another class (TODO) will be + used to implement playlists or other content. + """ + _VALID_URL = r'https?://app.matter.online/tracks/(?P\d+)/?' + _TESTS = { + # TODO: Implement + } + + def _real_extract(self, url): + track_id = self._match_id(url) + webpage = self._download_webpage( + "https://api.matter.online/api/v1/open-graph/tracks/%s/embedded" % track_id, track_id + ) + + author = self._html_search_regex( + r'([^<]+)', + webpage, "author" + ) + title = self._html_search_regex( + r'([^<]+)', + webpage, "title" + ) + download_url = self._html_search_regex( + r'', + webpage, "download_url" + ) + artwork = self._html_search_regex( + r'style="background: url\((https://matter-production.s3.amazonaws.com/images/[^\.]+\.[^\)]+)\)', + webpage, "artwork" + ) + + return { + 'id': track_id, + 'url': download_url, + 'title': title, + 'uploader': author, + 'thumbnail': artwork, + }