diff options
Diffstat (limited to 'youtube_dl/extractor/hypem.py')
-rw-r--r-- | youtube_dl/extractor/hypem.py | 63 |
1 files changed, 63 insertions, 0 deletions
diff --git a/youtube_dl/extractor/hypem.py b/youtube_dl/extractor/hypem.py new file mode 100644 index 000000000..ceec4f616 --- /dev/null +++ b/youtube_dl/extractor/hypem.py @@ -0,0 +1,63 @@ +import json +import re +import time + +from .common import InfoExtractor +from ..utils import ( + compat_str, + compat_urllib_parse, + compat_urllib_request, + + ExtractorError, +) + + +class HypemIE(InfoExtractor): + """Information Extractor for hypem""" + _VALID_URL = r'(?:http://)?(?:www\.)?hypem\.com/track/([^/]+)/([^/]+)' + + def _real_extract(self, url): + mobj = re.match(self._VALID_URL, url) + if mobj is None: + raise ExtractorError(u'Invalid URL: %s' % url) + track_id = mobj.group(1) + + data = { 'ax': 1, 'ts': time.time() } + data_encoded = compat_urllib_parse.urlencode(data) + complete_url = url + "?" + data_encoded + request = compat_urllib_request.Request(complete_url) + response, urlh = self._download_webpage_handle(request, track_id, u'Downloading webpage with the url') + cookie = urlh.headers.get('Set-Cookie', '') + + self.report_extraction(track_id) + + html_tracks = self._html_search_regex(r'<script type="application/json" id="displayList-data">(.*?)</script>', + response, u'tracks', flags=re.MULTILINE|re.DOTALL).strip() + try: + track_list = json.loads(html_tracks) + track = track_list[u'tracks'][0] + except ValueError: + raise ExtractorError(u'Hypemachine contained invalid JSON.') + + key = track[u"key"] + track_id = track[u"id"] + artist = track[u"artist"] + title = track[u"song"] + + serve_url = "http://hypem.com/serve/source/%s/%s" % (compat_str(track_id), compat_str(key)) + request = compat_urllib_request.Request(serve_url, "" , {'Content-Type': 'application/json'}) + request.add_header('cookie', cookie) + song_data_json = self._download_webpage(request, track_id, u'Downloading metadata') + try: + song_data = json.loads(song_data_json) + except ValueError: + raise ExtractorError(u'Hypemachine contained invalid JSON.') + final_url = song_data[u"url"] + + return [{ + 'id': track_id, + 'url': final_url, + 'ext': "mp3", + 'title': title, + 'artist': artist, + }]
\ No newline at end of file |