2014-10-24 05:55:39 +08:00
# coding: utf-8
from __future__ import unicode_literals
from . common import InfoExtractor
2014-10-24 12:54:59 +08:00
from . soundcloud import SoundcloudIE
2014-10-25 10:07:01 +08:00
from . . utils import ExtractorError
2014-10-27 06:13:42 +08:00
2014-10-24 05:55:39 +08:00
import time
class AudiomackIE ( InfoExtractor ) :
_VALID_URL = r ' https?://(?:www \ .)?audiomack \ .com/song/(?P<id>[ \ w/-]+) '
2014-10-24 12:54:59 +08:00
IE_NAME = ' audiomack '
_TESTS = [
2014-11-24 03:41:03 +08:00
# hosted on audiomack
2014-10-24 12:54:59 +08:00
{
' url ' : ' http://www.audiomack.com/song/roosh-williams/extraordinary ' ,
' info_dict ' :
{
2014-11-24 03:41:03 +08:00
' id ' : ' roosh-williams/extraordinary ' ,
2014-10-24 12:54:59 +08:00
' ext ' : ' mp3 ' ,
' title ' : ' Roosh Williams - Extraordinary '
}
} ,
2014-11-24 03:41:03 +08:00
# hosted on soundcloud via audiomack
2014-10-24 12:54:59 +08:00
{
' 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 \n http://instagram.com/theyoungthugworld \n https://www.facebook.com/ThuggerThuggerCashMoney \n " ,
" uploader " : " Young Thug World "
}
2014-10-24 05:55:39 +08:00
}
2014-10-24 12:54:59 +08:00
]
2014-10-24 05:55:39 +08:00
def _real_extract ( self , url ) :
2014-10-25 14:58:03 +08:00
video_id = self . _match_id ( url )
2014-10-24 05:55:39 +08:00
2014-10-25 14:58:03 +08:00
api_response = self . _download_json (
" http://www.audiomack.com/api/music/url/song/ %s ?_= %d " % (
video_id , time . time ( ) ) ,
video_id )
2014-10-25 10:07:01 +08:00
2014-10-25 14:58:03 +08:00
if " url " not in api_response :
2014-10-25 10:07:01 +08:00
raise ExtractorError ( " Unable to deduce api url of song " )
2014-10-25 14:58:03 +08:00
realurl = api_response [ " url " ]
2014-10-24 12:54:59 +08:00
2014-11-24 03:41:03 +08:00
# Audiomack wraps a lot of soundcloud tracks in their branded wrapper
2014-10-24 12:54:59 +08:00
# - if so, pass the work off to the soundcloud extractor
if SoundcloudIE . suitable ( realurl ) :
2014-10-25 10:11:46 +08:00
return { ' _type ' : ' url ' , ' url ' : realurl , ' ie_key ' : ' Soundcloud ' }
2014-10-25 14:58:03 +08:00
webpage = self . _download_webpage ( url , video_id )
artist = self . _html_search_regex (
r ' <span class= " artist " >(.*?)</span> ' , webpage , " artist " )
songtitle = self . _html_search_regex (
r ' <h1 class= " profile-title song-title " ><span class= " artist " >.*?</span>(.*?)</h1> ' ,
webpage , " title " )
title = artist + " - " + songtitle
return {
' id ' : video_id ,
' title ' : title ,
' url ' : realurl ,
}