aboutsummaryrefslogtreecommitdiff
path: root/modules/soundcloud.py
diff options
context:
space:
mode:
authorGravatar jesopo2018-07-02 14:33:38 +0100
committerGravatar jesopo2018-07-02 14:33:38 +0100
commit50bf76d79539c55bd8149658d04691cbbdecbd64 (patch)
tree0cb37e7501a10f7182e465686df42b0ad19fce7b /modules/soundcloud.py
parentFixed translate.py (diff)
signature
Add logic in soundcloud.py to accept urls and search back through log for urls
Diffstat (limited to 'modules/soundcloud.py')
-rw-r--r--modules/soundcloud.py65
1 files changed, 46 insertions, 19 deletions
diff --git a/modules/soundcloud.py b/modules/soundcloud.py
index 9aa15508..aa35b019 100644
--- a/modules/soundcloud.py
+++ b/modules/soundcloud.py
@@ -1,34 +1,61 @@
#--require-config soundcloud-api-key
-import json, time
+import json, re, time
import Utils
-URL_SOUNDCLOUD = "http://api.soundcloud.com/tracks"
+URL_SOUNDCLOUD_TRACK = "http://api.soundcloud.com/tracks"
+URL_SOUNDCLOUD_RESOLVE = "http://api.soundcloud.com/resolve"
+REGEX_SOUNDCLOUD = "https://soundcloud.com/([^/]+)/([^/]+)"
class Module(object):
_name = "SoundCloud"
def __init__(self, bot):
self.bot = bot
bot.events.on("received").on("command").on("soundcloud", "sc"
- ).hook(self.soundcloud, min_args=1, help="Search SoundCloud")
+ ).hook(self.soundcloud, help="Search SoundCloud")
def soundcloud(self, event):
- page = Utils.get_url(URL_SOUNDCLOUD, get_params={
- "client_id": self.bot.config["soundcloud-api-key"],
- "limit": 1, "q": event["args"]}, json=True)
- if page:
- if page:
- page = page[0]
- title = page["title"]
- user = page["user"]["username"]
- duration = time.strftime("%H:%M:%S", time.gmtime(page[
- "duration"]/1000))
- if duration.startswith("00:"):
- duration = duration[3:]
- link = page["permalink_url"]
- event["stdout"].write("%s [%s] (posted by %s) %s" % (title,
- duration, user, link))
+ query = None
+ url = None
+
+ if event["args"]:
+ match = re.search(REGEX_SOUNDCLOUD, event["args"])
+ if match:
+ url = match.string
else:
- event["stderr"].write("No results found")
+ query = event["args"]
+ else:
+ last_soundcloud = event["log"].find(REGEX_SOUNDCLOUD)
+ if last_soundcloud:
+ url = re.match(REGEX_SOUNDCLOUD,
+ last_soundcloud.message).string
+
+ if not query and not url:
+ event["stderr"].write("no search phrase provided")
+ return
+ has_query = not query == None
+ get_params = {"limit": 1,
+ "client_id": self.bot.config["soundcloud-api-key"]}
+
+ if query:
+ get_params["q"] = query
+ else:
+ get_params["url"] = url
+
+ page = Utils.get_url(
+ URL_SOUNDCLOUD_TRACK if has_query else URL_SOUNDCLOUD_RESOLVE,
+ get_params=get_params, json=True)
+
+ if page:
+ page = page[0] if has_query else page
+ title = page["title"]
+ user = page["user"]["username"]
+ duration = time.strftime("%H:%M:%S", time.gmtime(page[
+ "duration"]/1000))
+ if duration.startswith("00:"):
+ duration = duration[3:]
+ link = page["permalink_url"]
+ event["stdout"].write("%s [%s] (posted by %s) %s" % (title,
+ duration, user, link))
else:
event["stderr"].write("Failed to load results")