musescore.py 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. from .common import InfoExtractor
  2. class MuseScoreIE(InfoExtractor):
  3. _VALID_URL = r'https?://(?:www\.)?musescore\.com/(?:user/\d+|[^/]+)(?:/scores)?/(?P<id>[^#&?]+)'
  4. _TESTS = [{
  5. 'url': 'https://musescore.com/user/73797/scores/142975',
  6. 'info_dict': {
  7. 'id': '142975',
  8. 'ext': 'mp3',
  9. 'title': 'WA Mozart Marche Turque (Turkish March fingered)',
  10. 'description': 'md5:7ede08230e4eaabd67a4a98bb54d07be',
  11. 'thumbnail': r're:https?://(?:www\.)?musescore\.com/.*\.png[^$]+',
  12. 'uploader': 'PapyPiano',
  13. 'creator': 'Wolfgang Amadeus Mozart',
  14. },
  15. }, {
  16. 'url': 'https://musescore.com/user/36164500/scores/6837638',
  17. 'info_dict': {
  18. 'id': '6837638',
  19. 'ext': 'mp3',
  20. 'title': 'Sweet Child O\' Mine – Guns N\' Roses sweet child',
  21. 'description': 'md5:4dca71191c14abc312a0a4192492eace',
  22. 'thumbnail': r're:https?://(?:www\.)?musescore\.com/.*\.png[^$]+',
  23. 'uploader': 'roxbelviolin',
  24. 'creator': 'Guns N´Roses Arr. Roxbel Violin',
  25. },
  26. }, {
  27. 'url': 'https://musescore.com/classicman/fur-elise',
  28. 'info_dict': {
  29. 'id': '33816',
  30. 'ext': 'mp3',
  31. 'title': 'Für Elise – Beethoven',
  32. 'description': 'md5:49515a3556d5ecaf9fa4b2514064ac34',
  33. 'thumbnail': r're:https?://(?:www\.)?musescore\.com/.*\.png[^$]+',
  34. 'uploader': 'ClassicMan',
  35. 'creator': 'Ludwig van Beethoven (1770–1827)',
  36. },
  37. }, {
  38. 'url': 'https://musescore.com/minh_cuteee/scores/6555384',
  39. 'only_matching': True,
  40. }]
  41. def _real_extract(self, url):
  42. webpage = self._download_webpage(url, None)
  43. url = self._og_search_url(webpage) or url
  44. video_id = self._match_id(url)
  45. mp3_url = self._download_json(f'https://musescore.com/api/jmuse?id={video_id}&index=0&type=mp3&v2=1', video_id,
  46. headers={'authorization': '63794e5461e4cfa046edfbdddfccc1ac16daffd2'})['info']['url']
  47. formats = [{
  48. 'url': mp3_url,
  49. 'ext': 'mp3',
  50. 'vcodec': 'none',
  51. }]
  52. return {
  53. 'id': video_id,
  54. 'formats': formats,
  55. 'title': self._og_search_title(webpage),
  56. 'description': self._og_search_description(webpage),
  57. 'thumbnail': self._og_search_thumbnail(webpage),
  58. 'uploader': self._html_search_meta('musescore:author', webpage, 'uploader'),
  59. 'creator': self._html_search_meta('musescore:composer', webpage, 'composer'),
  60. }