rendered paste bodyfrom elisa.base_components.resource_provider import ResourceProviderfrom elisa.core.media_uri import MediaUrifrom elisa.core import common, componentfrom twisted.internet import defer, threadsfrom twisted.web import clientimport re, simplejsonclass JamendoResource(ResourceProvider): supported_uri = "http://(www\.)?jamendo\.com.*" ml2_base = "http://api.jamendo.com/get" jam_base = "http://(?:www\.)jamendo.com(?:/[a-z]{2})?/" jam_regex = {"main" : ("?$", ["2/name+artist_name+url+image/album/json/?n=50&order=ratingweek_desc&imagesize=600"]), "tags" : ("tags", ["2/idstr+name+url/tag/json/?n=50&order=rating_desc"]), "tag" : ("tag/([^/]+)", ["2/name+artist_name+url+image/album/json/?tag_idstr=\1&n=50&order=ratingweek_desc&imagesize=600"]), "artists" : ("artists", ["2/name+url+image/artist/plain/?n=50&order=id_desc&imagesize=600"]), "artist" : ("artist/([^/]+)", ["2/name+url/track/json/track_album+album_artist/?artist_idstr=\1&n=5&order=rating_desc","2/name+url+artist_name+image/album/json/?artist_idstr=\1&n=all&imagesize=600"]), "albums" : ("albums", ["2/name+artist_name+url+image/album/json/?&n=50&order=ratingweek_desc&imagesize=600"]), "album" : ("album/([0-9]+)", ["2/name+url/track/json/?n=all&album_id=\1&order=numalbum_asc"]), "track" : ("track/([0-9]+)", ["/track/id/track/audio/redirect/\1/?aue=ogg2"]) } _jam_compiled = {} def initialize(self): ResourceProvider.initialize(self) resource_manager = common.application.resource_manager uris = {u'main' : MediaUri("http://jamendo.com"), u'tags' : MediaUri("http://jamendo.com/en/tags"), u'rock' : MediaUri("http://jamendo.com/en/tag/rock"), u'artists' : MediaUri("http://jamendo.com/en/artists"), u'both' : MediaUri("http://jamendo.com/en/artist/both"), u'albums' : MediaUri("http://jamendo.com/en/albums"), u'simple' : MediaUri("http://jamendo.com/en/album/33"), u'enatten' : MediaUri("http://jamendo.com/en/track/1100") } for k,v in uris.iteritems(): resource_manager.register_resource_entry_point(v, text=k, type="audio_internet", theme_icon="audio_directory_icon") def _musiclist_uri(self, uri): for k, v in self.jam_compiled.iteritems(): if(v[0].match(uri)): return [MediaUri(v[0].sub(self.ml2_base+s)) for s in v[1]] return False def get(self, uri, context_model=None): self.debug("Should get %s" % uri) print self._musiclist_uri(uri) return None def jam_compiled__get(self): if self._jam_compiled is None: for k, v in self.jam_regex.iteritems(): _jam_compiled[k] = re.compile(self.jam_base+v[0]), v[1] return _jam_compiled