Index: channels/dirble.py ================================================================== --- channels/dirble.py +++ channels/dirble.py @@ -1,10 +1,10 @@ # encoding: UTF-8 # api: streamtuner2 # title: Dirble # description: New open radio station directory. -# version: 0.1 +# version: 0.2 # type: channel # category: radio # priority: optional # documentation: http://dirble.com/developer/api # @@ -11,10 +11,13 @@ # Provides a nice JSON API, so is easy to support. # # However useful station information (homepage, etc.) only # with extraneous requests. So just for testing as of now. # +# Uh, and API is appearently becoming for-pay (two days +# after writing this plugin;). So ST2 users may have to +# request their own Dirble.com key probably. # import re import json @@ -44,10 +47,11 @@ ] catmap = {} base = "http://api.dirble.com/v1/%s/apikey/%s/" cid = "84be582567ff418c9ba94d90d075d7fee178ad60" + # Retrieve cat list and map def update_categories(self): self.categories = [] # Main categories @@ -55,27 +59,32 @@ self.categories.append(row["name"]) self.catmap[row["name"]] = row["id"] # Request subcats sub = [] self.categories.append(sub) - for subrow in self.api("childCategories", ["primaryid", str(row["id"])]): + for subrow in self.api("childCategories", "primaryid", row["id"]): sub.append(subrow["name"]) self.catmap[subrow["name"]] = subrow["id"] + # Just copy over stream URLs and station titles def update_streams(self, cat, search=None): if cat: id = self.catmap.get(cat, 0); - data = self.api("stations", ["id", str(id)]) + data = self.api("stations", "id", id) elif search: - data = self.api("search", ["search", search]) + data = self.api("search", "search", search) else: pass r = [] for e in data: + # skip musicgoal (resolve to just a blocking teaser) + if e["streamurl"].find("musicgoal") > 0: + continue + # append dict after renaming fields r.append(dict( id = e["id"], genre = str(cat), status = e["status"], title = e["name"], @@ -84,22 +93,28 @@ url = e["streamurl"], homepage = e.get("homepage") or self.get_homepage(e["id"], e["name"]), format = "audio/mpeg" )) return r + # Request homepage for stations, else try to deduce Dirble page def get_homepage(self, id, name): if conf.dirble_fetch_homepage: - return self.api("station", ["id", str(id)])["website"] + return self.api("station", "id", id)["website"] else: name = re.sub("[^\w\s]+", "", name) name = re.sub("\s", "-", name) return "http://dirble.com/station/" + name.lower(); - # Patch together - def api(self, method, params=[]): - j = http.get((self.base % (method, self.cid)) + "/".join([str(e) for e in params])) - r = json.loads(j); + + # Patch API url together, send request, decode JSON and whathaveyou + def api(self, *params): + method = params[0] + j = http.get((self.base % (method, self.cid)) + "/".join([str(e) for e in params[1:]])) + try: + r = json.loads(j); + except: + r = [] return r