diff options
author | peekayy <peekayy.dev@gmail.com> | 2014-01-15 11:51:37 +0100 |
---|---|---|
committer | Stefano <l.stickell@yahoo.it> | 2014-04-21 16:54:46 +0200 |
commit | 672cd2a5f2917d38a762ffba432b29dcc955aed6 (patch) | |
tree | ace3c9dfa1c5b02ce2b191a324f06df6ae61b288 | |
parent | New crypter: DailymotionBatch (diff) | |
download | pyload-672cd2a5f2917d38a762ffba432b29dcc955aed6.tar.xz |
New hoster: SoundcloudCom
Merges #478
(cherry picked from commit 089ed7073cd438f9994c990ec640502e6c043cdb)
-rw-r--r-- | module/plugins/hoster/SoundcloudCom.py | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/module/plugins/hoster/SoundcloudCom.py b/module/plugins/hoster/SoundcloudCom.py new file mode 100644 index 000000000..7e6d16236 --- /dev/null +++ b/module/plugins/hoster/SoundcloudCom.py @@ -0,0 +1,54 @@ +# -*- coding: utf-8 -*- + +import re +import pycurl + +from module.plugins.Hoster import Hoster + + +class SoundcloudCom(Hoster): + __name__ = "SoundcloudCom" + __type__ = "hoster" + __pattern__ = r"https?://(?:www\.)?soundcloud\.com/(?P<UID>.*?)/(?P<SID>.*)" + __version__ = "0.1" + __description__ = """SoundCloud.com audio download hoster""" + __author_name__ = ("Peekayy") + __author_mail__ = ("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) + match = re.search(r'<div class="haudio.*?large.*?" data-sc-track="(?P<ID>[0-9]*)"', page) + songId = clientId = "" + if match: + songId = match.group("ID") + if len(songId) <= 0: + self.logError("Could not find song id") + self.offline() + else: + match = re.search(r'"clientID":"(?P<CID>.*?)"', page) + if match: + clientId = match.group("CID") + + if len(clientId) <= 0: + clientId = "b45b1aa10f1ac2941910a7f0d10f8e28" + + match = re.search(r'<em itemprop="name">\s(?P<TITLE>.*?)\s</em>', page) + if match: + pyfile.name = match.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]) |