]>
Commit | Line | Data |
---|---|---|
b6ef4029 | 1 | import re |
8e5e059d | 2 | import json |
b6ef4029 YK |
3 | |
4 | from .common import InfoExtractor | |
5 | ||
6 | ||
7 | class ExfmIE(InfoExtractor): | |
03824359 PH |
8 | IE_NAME = u'exfm' |
9 | IE_DESC = u'ex.fm' | |
b6ef4029 | 10 | _VALID_URL = r'(?:http://)?(?:www\.)?ex\.fm/song/([^/]+)' |
eb6a41ba JMF |
11 | _SOUNDCLOUD_URL = r'(?:http://)?(?:www\.)?api\.soundcloud.com/tracks/([^/]+)/stream' |
12 | _TESTS = [ | |
13 | { | |
14 | u'url': u'http://ex.fm/song/1bgtzg', | |
15 | u'file': u'95223130.mp3', | |
16 | u'md5': u'8a7967a3fef10e59a1d6f86240fd41cf', | |
17 | u'info_dict': { | |
18 | u"title": u"We Can't Stop - Miley Cyrus", | |
19 | u"uploader": u"Miley Cyrus", | |
20 | u'upload_date': u'20130603', | |
21 | u'description': u'Download "We Can\'t Stop" \r\niTunes: http://smarturl.it/WeCantStop?IQid=SC\r\nAmazon: http://smarturl.it/WeCantStopAMZ?IQid=SC', | |
22 | }, | |
23 | u'note': u'Soundcloud song', | |
24 | }, | |
25 | { | |
26 | u'url': u'http://ex.fm/song/wddt8', | |
27 | u'file': u'wddt8.mp3', | |
28 | u'md5': u'966bd70741ac5b8570d8e45bfaed3643', | |
29 | u'info_dict': { | |
30 | u'title': u'Safe and Sound', | |
31 | u'uploader': u'Capital Cities', | |
32 | }, | |
33 | }, | |
34 | ] | |
b6ef4029 YK |
35 | |
36 | def _real_extract(self, url): | |
37 | mobj = re.match(self._VALID_URL, url) | |
233ad24e YK |
38 | song_id = mobj.group(1) |
39 | info_url = "http://ex.fm/api/v3/song/%s" %(song_id) | |
40 | webpage = self._download_webpage(info_url, song_id) | |
b6ef4029 | 41 | info = json.loads(webpage) |
eb6a41ba JMF |
42 | song_url = info['song']['url'] |
43 | if re.match(self._SOUNDCLOUD_URL, song_url) is not None: | |
44 | self.to_screen('Soundcloud song detected') | |
45 | return self.url_result(song_url.replace('/stream',''), 'Soundcloud') | |
b6ef4029 | 46 | return [{ |
233ad24e | 47 | 'id': song_id, |
b6ef4029 YK |
48 | 'url': song_url, |
49 | 'ext': 'mp3', | |
50 | 'title': info['song']['title'], | |
51 | 'thumbnail': info['song']['image']['large'], | |
52 | 'uploader': info['song']['artist'], | |
53 | 'view_count': info['song']['loved_count'], | |
54 | }] |