hypem.py 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. from .common import InfoExtractor
  2. from ..utils import int_or_none
  3. class HypemIE(InfoExtractor):
  4. _VALID_URL = r'https?://(?:www\.)?hypem\.com/track/(?P<id>[0-9a-z]{5})'
  5. _TEST = {
  6. 'url': 'http://hypem.com/track/1v6ga/BODYWORK+-+TAME',
  7. 'md5': 'b9cc91b5af8995e9f0c1cee04c575828',
  8. 'info_dict': {
  9. 'id': '1v6ga',
  10. 'ext': 'mp3',
  11. 'title': 'Tame',
  12. 'uploader': 'BODYWORK',
  13. 'timestamp': 1371810457,
  14. 'upload_date': '20130621',
  15. },
  16. }
  17. def _real_extract(self, url):
  18. track_id = self._match_id(url)
  19. response = self._download_webpage(url, track_id)
  20. track = self._parse_json(self._html_search_regex(
  21. r'(?s)<script\s+type="application/json"\s+id="displayList-data">(.+?)</script>',
  22. response, 'tracks'), track_id)['tracks'][0]
  23. track_id = track['id']
  24. title = track['song']
  25. final_url = self._download_json(
  26. 'http://hypem.com/serve/source/{}/{}'.format(track_id, track['key']),
  27. track_id, 'Downloading metadata', headers={
  28. 'Content-Type': 'application/json',
  29. })['url']
  30. return {
  31. 'id': track_id,
  32. 'url': final_url,
  33. 'ext': 'mp3',
  34. 'title': title,
  35. 'uploader': track.get('artist'),
  36. 'duration': int_or_none(track.get('time')),
  37. 'timestamp': int_or_none(track.get('ts')),
  38. 'track': title,
  39. }