diff options
| author | 2014-12-13 15:56:57 +0100 | |
|---|---|---|
| committer | 2014-12-13 15:56:57 +0100 | |
| commit | acc46fc3497a66a427b795b4a22c6e71d69185a1 (patch) | |
| tree | 2d315b838a76435fc456b972c99c28d1732b2f70 /pyload/plugin/hoster/SoundcloudCom.py | |
| parent | Code fixes (diff) | |
| download | pyload-acc46fc3497a66a427b795b4a22c6e71d69185a1.tar.xz | |
Update
Diffstat (limited to 'pyload/plugin/hoster/SoundcloudCom.py')
| -rw-r--r-- | pyload/plugin/hoster/SoundcloudCom.py | 57 | 
1 files changed, 57 insertions, 0 deletions
| diff --git a/pyload/plugin/hoster/SoundcloudCom.py b/pyload/plugin/hoster/SoundcloudCom.py new file mode 100644 index 000000000..48a5b465c --- /dev/null +++ b/pyload/plugin/hoster/SoundcloudCom.py @@ -0,0 +1,57 @@ +# -*- coding: utf-8 -*- + +import pycurl +import re + +from pyload.plugin.Hoster import Hoster + + +class SoundcloudCom(Hoster): +    __name    = "SoundcloudCom" +    __type    = "hoster" +    __version = "0.10" + +    __pattern = r'https?://(?:www\.)?soundcloud\.com/(?P<UID>.*?)/(?P<SID>.*)' + +    __description = """SoundCloud.com hoster plugin""" +    __license     = "GPLv3" +    __authors     = [("Peekayy", "peekayy.dev@gmail.com")] + + +    def process(self, pyfile): +        # default UserAgent of HTTPRequest fails for this hoster so we use this one +        self.req.http.c.setopt(pycurl.USERAGENT, 'Mozilla/5.0') +        page = self.load(pyfile.url) +        m = re.search(r'<div class="haudio.*?large.*?" data-sc-track="(?P<ID>\d*)"', page) +        songId = clientId = "" +        if m: +            songId = m.group("ID") +        if len(songId) <= 0: +            self.logError(_("Could not find song id")) +            self.offline() +        else: +            m = re.search(r'"clientID":"(?P<CID>.*?)"', page) +            if m: +                clientId = m.group("CID") + +            if len(clientId) <= 0: +                clientId = "b45b1aa10f1ac2941910a7f0d10f8e28" + +            m = re.search(r'<em itemprop="name">\s(?P<TITLE>.*?)\s</em>', page) +            if m: +                pyfile.name = m.group("TITLE") + ".mp3" +            else: +                pyfile.name = re.match(self.__pattern, pyfile.url).group("SID") + ".mp3" + +            # url to retrieve the actual song url +            page = self.load("https://api.sndcdn.com/i1/tracks/%s/streams" % songId, get={"client_id": clientId}) +            # getting streams +            # for now we choose the first stream found in all cases +            # it could be improved if relevant for this hoster +            streams = [ +                (result.group("QUALITY"), result.group("URL")) +                for result in re.finditer(r'"(?P<QUALITY>.*?)":"(?P<URL>.*?)"', page) +            ] +            self.logDebug("Found Streams", streams) +            self.logDebug("Downloading", streams[0][0], streams[0][1]) +            self.download(streams[0][1]) | 
