X-Git-Url: https://git.rapsys.eu/youtubedl/blobdiff_plain/33cd347759d6d999325ebf3c69b7ed5692c343b2..eed74133841b43ce901ee0dd31c7dad5a234bd48:/youtube_dl/extractor/exfm.py diff --git a/youtube_dl/extractor/exfm.py b/youtube_dl/extractor/exfm.py index 3443f19..4de02ae 100644 --- a/youtube_dl/extractor/exfm.py +++ b/youtube_dl/extractor/exfm.py @@ -1,54 +1,58 @@ +from __future__ import unicode_literals + import re -import json from .common import InfoExtractor class ExfmIE(InfoExtractor): - IE_NAME = u'exfm' - IE_DESC = u'ex.fm' - _VALID_URL = r'(?:http://)?(?:www\.)?ex\.fm/song/([^/]+)' - _SOUNDCLOUD_URL = r'(?:http://)?(?:www\.)?api\.soundcloud.com/tracks/([^/]+)/stream' + IE_NAME = 'exfm' + IE_DESC = 'ex.fm' + _VALID_URL = r'http://(?:www\.)?ex\.fm/song/(?P[^/]+)' + _SOUNDCLOUD_URL = r'http://(?:www\.)?api\.soundcloud\.com/tracks/([^/]+)/stream' _TESTS = [ { - u'url': u'http://ex.fm/song/1bgtzg', - u'file': u'95223130.mp3', - u'md5': u'8a7967a3fef10e59a1d6f86240fd41cf', - u'info_dict': { - u"title": u"We Can't Stop - Miley Cyrus", - u"uploader": u"Miley Cyrus", - u'upload_date': u'20130603', - u'description': u'Download "We Can\'t Stop" \r\niTunes: http://smarturl.it/WeCantStop?IQid=SC\r\nAmazon: http://smarturl.it/WeCantStopAMZ?IQid=SC', + 'url': 'http://ex.fm/song/eh359', + 'md5': 'e45513df5631e6d760970b14cc0c11e7', + 'info_dict': { + 'id': '44216187', + 'ext': 'mp3', + 'title': 'Test House "Love Is Not Enough" (Extended Mix) DeadJournalist Exclusive', + 'uploader': 'deadjournalist', + 'upload_date': '20120424', + 'description': 'Test House \"Love Is Not Enough\" (Extended Mix) DeadJournalist Exclusive', }, - u'note': u'Soundcloud song', + 'note': 'Soundcloud song', + 'skip': 'The site is down too often', }, { - u'url': u'http://ex.fm/song/wddt8', - u'file': u'wddt8.mp3', - u'md5': u'966bd70741ac5b8570d8e45bfaed3643', - u'info_dict': { - u'title': u'Safe and Sound', - u'uploader': u'Capital Cities', + 'url': 'http://ex.fm/song/wddt8', + 'md5': '966bd70741ac5b8570d8e45bfaed3643', + 'info_dict': { + 'id': 'wddt8', + 'ext': 'mp3', + 'title': 'Safe and Sound', + 'uploader': 'Capital Cities', }, + 'skip': 'The site is down too often', }, ] def _real_extract(self, url): mobj = re.match(self._VALID_URL, url) - song_id = mobj.group(1) - info_url = "http://ex.fm/api/v3/song/%s" %(song_id) - webpage = self._download_webpage(info_url, song_id) - info = json.loads(webpage) - song_url = info['song']['url'] + song_id = mobj.group('id') + info_url = "http://ex.fm/api/v3/song/%s" % song_id + info = self._download_json(info_url, song_id)['song'] + song_url = info['url'] if re.match(self._SOUNDCLOUD_URL, song_url) is not None: self.to_screen('Soundcloud song detected') - return self.url_result(song_url.replace('/stream',''), 'Soundcloud') - return [{ - 'id': song_id, - 'url': song_url, - 'ext': 'mp3', - 'title': info['song']['title'], - 'thumbnail': info['song']['image']['large'], - 'uploader': info['song']['artist'], - 'view_count': info['song']['loved_count'], - }] + return self.url_result(song_url.replace('/stream', ''), 'Soundcloud') + return { + 'id': song_id, + 'url': song_url, + 'ext': 'mp3', + 'title': info['title'], + 'thumbnail': info['image']['large'], + 'uploader': info['artist'], + 'view_count': info['loved_count'], + }