X-Git-Url: http://git.bitcoin.ninja/index.cgi?a=blobdiff_plain;f=youtube_dl%2Fextractor%2Faudiomack.py;h=6232d2cd041b7db63b4880f5d983980af65f8a65;hb=3898c8a7b2835b1632ef0e34481bdf5e006cee2b;hp=c5214f40178b8aade814675cbe634ce9d742156c;hpb=67500bf939d7db66cdfb9f742fdedca1b83b8309;p=youtube-dl diff --git a/youtube_dl/extractor/audiomack.py b/youtube_dl/extractor/audiomack.py index c5214f401..6232d2cd0 100644 --- a/youtube_dl/extractor/audiomack.py +++ b/youtube_dl/extractor/audiomack.py @@ -2,42 +2,68 @@ from __future__ import unicode_literals from .common import InfoExtractor -import datetime +from .soundcloud import SoundcloudIE +from ..utils import ExtractorError + import time -import urllib.request -import json class AudiomackIE(InfoExtractor): _VALID_URL = r'https?://(?:www\.)?audiomack\.com/song/(?P[\w/-]+)' - _TEST = { - 'url': 'https://www.audiomack.com/song/crewneckkramer/story-i-tell', - 'info_dict': { - 'id': 'story-i-tell', - 'ext': 'mp3', - 'title': 'story-i-tell' + IE_NAME = 'audiomack' + _TESTS = [ + #hosted on audiomack + { + 'url': 'http://www.audiomack.com/song/roosh-williams/extraordinary', + 'info_dict': + { + 'id' : 'roosh-williams/extraordinary', + 'ext': 'mp3', + 'title': 'Roosh Williams - Extraordinary' + } + }, + #hosted on soundcloud via audiomack + { + 'url': 'http://www.audiomack.com/song/xclusiveszone/take-kare', + 'file': '172419696.mp3', + 'info_dict': + { + 'ext': 'mp3', + 'title': 'Young Thug ft Lil Wayne - Take Kare', + "upload_date": "20141016", + "description": "New track produced by London On Da Track called “Take Kare\"\n\nhttp://instagram.com/theyoungthugworld\nhttps://www.facebook.com/ThuggerThuggerCashMoney\n", + "uploader": "Young Thug World" + } } - } + ] def _real_extract(self, url): - # TODO more code goes here, for example ... - #webpage = self._download_webpage(url, video_id) - #title = self._html_search_regex(r'

(.*?)

', webpage, 'title') - - assert("/song/" in url) - songurl = url[url.index("/song/")+5:] - title = songurl[songurl.rindex("/")+1:] - video_id = title - t = int(time.mktime(datetime.datetime.now().timetuple())) - s = "http://www.audiomack.com/api/music/url/song"+songurl+"?_="+str(t) - f = urllib.request.urlopen(s) - j = f.read(1000).decode("utf-8") - data = json.loads(j) + video_id = self._match_id(url) + + api_response = self._download_json( + "http://www.audiomack.com/api/music/url/song/%s?_=%d" % ( + video_id, time.time()), + video_id) + + if "url" not in api_response: + raise ExtractorError("Unable to deduce api url of song") + realurl = api_response["url"] + + #Audiomack wraps a lot of soundcloud tracks in their branded wrapper + # - if so, pass the work off to the soundcloud extractor + if SoundcloudIE.suitable(realurl): + return {'_type': 'url', 'url': realurl, 'ie_key': 'Soundcloud'} + + webpage = self._download_webpage(url, video_id) + artist = self._html_search_regex( + r'(.*?)', webpage, "artist") + songtitle = self._html_search_regex( + r'

.*?(.*?)

', + webpage, "title") + title = artist + " - " + songtitle return { 'id': video_id, 'title': title, - 'url' : data["url"], - 'ext' : 'mp3' - # TODO more properties (see youtube_dl/extractor/common.py) - } + 'url': realurl, + }