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