aboutsummaryrefslogtreecommitdiff
path: root/youtube_dl/extractor/hypem.py
diff options
context:
space:
mode:
authorPhilipp Hagemeister <phihag@phihag.de>2013-06-23 22:29:27 +0200
committerPhilipp Hagemeister <phihag@phihag.de>2013-06-23 22:29:27 +0200
commit27110b0567572ea1fe1ffeb46ea07b13b76a2be3 (patch)
tree22e3ccf76857ee644ff8c3e85ecd1e8bc0a34714 /youtube_dl/extractor/hypem.py
parent9fe4de34716b919e3a9edb9c28b4cc3d89ed50b8 (diff)
downloadyoutube-dl-27110b0567572ea1fe1ffeb46ea07b13b76a2be3.tar.xz
[hypem] Move into own file
Diffstat (limited to 'youtube_dl/extractor/hypem.py')
-rw-r--r--youtube_dl/extractor/hypem.py63
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