summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar peekayy <peekayy.dev@gmail.com> 2014-01-15 11:51:37 +0100
committerGravatar Stefano <l.stickell@yahoo.it> 2014-04-21 16:54:46 +0200
commit672cd2a5f2917d38a762ffba432b29dcc955aed6 (patch)
treeace3c9dfa1c5b02ce2b191a324f06df6ae61b288
parentNew crypter: DailymotionBatch (diff)
downloadpyload-672cd2a5f2917d38a762ffba432b29dcc955aed6.tar.xz
New hoster: SoundcloudCom
Merges #478 (cherry picked from commit 089ed7073cd438f9994c990ec640502e6c043cdb)
-rw-r--r--module/plugins/hoster/SoundcloudCom.py54
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])