clyp.py 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. # coding: utf-8
  2. from __future__ import unicode_literals
  3. import re
  4. from .common import InfoExtractor
  5. class ClypIE(InfoExtractor):
  6. _VALID_URL = r'https?://(?:www\.)?clyp\.it/(?P<id>[a-z0-9]+)'
  7. _TESTS = [{
  8. 'url': 'https://clyp.it/ojz2wfah',
  9. 'md5': '1d4961036c41247ecfdcc439c0cddcbb',
  10. 'info_dict': {
  11. 'id': 'ojz2wfah',
  12. 'ext': 'mp3',
  13. 'title': 'Krisson80 - bits wip wip',
  14. 'description': '#Krisson80BitsWipWip #chiptune\n#wip',
  15. },
  16. }, {
  17. 'url': 'https://clyp.it/ojz2wfah',
  18. 'only_matching': True,
  19. }]
  20. def _real_extract(self, url):
  21. audio_id = self._match_id(url)
  22. api_url = 'https://api.clyp.it/' + audio_id
  23. metadata = self._download_json(api_url, audio_id)
  24. title = metadata['Title']
  25. description = None
  26. if metadata['Description']: description = metadata['Description']
  27. duration = None
  28. if metadata['Duration']: duration = int(metadata['Duration'])
  29. formats = [
  30. {
  31. 'url': metadata['OggUrl'],
  32. 'format_id': 'ogg',
  33. 'preference': -2
  34. },{
  35. 'url': metadata['Mp3Url'],
  36. 'format_id': 'mp3',
  37. 'preference': -1
  38. }]
  39. return {
  40. 'id': audio_id,
  41. 'title': title,
  42. 'formats': formats,
  43. 'description': description,
  44. 'duration': duration
  45. }