def search(self, **kwargs): query = kwargs['q'] api_key = "aac5b38a36513510000ef3286494fc6d" url = urllib2.urlopen("http://tinysong.com/s/%s/?format=json&key=%s" % (urllib2.quote(query), api_key)) response = json.loads(url.read()) # TODO: Remove redundancy between results and tracks? results = [] tracks = [] for song in response: source_id = 'grooveshark' result = { 'artist': song['ArtistName'], 'album': song['AlbumName'], 'title': song['SongName'], 'sources': [ { 'sourceid': source_id, 'trackid': '%s' % song['SongID'] } ] } results.append(result) track = { 'id': 'track_%s_%s' % (source_id, song['SongID']), 'type': 'track', 'track_title': song['SongName'], 'track_artist': song['ArtistName'], 'track_album': song['AlbumName'], 'request_source_id': source_id, 'request_track_id': song['SongID'], } tracks.append(track) # Register the songs in the search engine solr = SolrConnection(settings.SOLR_URL) solr.add_many(tracks) solr.commit() solr.close() cherrypy.response.headers['Content-Type'] = 'application/json; charset=utf-8' return json.dumps(results, ensure_ascii=False, indent=4).encode('utf-8')
def create(self, **kwargs): # Collect the channel details name = kwargs["name"] pos = kwargs["pos"] # Create the channel in the search engine doc = {"id": "channel_%s" % (name,), "type": "channel", "channel_id": name, "channel_location": pos} solr = SolrConnection(settings.SOLR_URL) solr.add_many([doc]) solr.commit() solr.close() # Create the channel in the URL hierarchy self.__dict__[name] = ChannelResource.Channel(name)
def submit(self, **kwargs): # Grab the user and request details json_data = json.loads(kwargs['json']) user_id = json_data['userid'] channel_id = self.channel_id requests = json_data['requests'] # Create a local representation of the requests tracks = [] for request in requests: source_id = request['sourceid'] track_id = request['trackid'] # Build up a Solr query filters = [] filters.append('type:track') filters.append('request_source_id:%s' % source_id) filters.append('request_track_id:%s' % track_id) # Make the request to Solr solr = SolrConnection(settings.SOLR_URL) response = solr.select(q = ' AND '.join(filters), fields = 'track_artist, track_album, track_title') if len(response.results) == 1: track = { 'id': 'request_%s_%s_%s' % (source_id, track_id, user_id), 'type': 'request', 'channel_id': channel_id, 'track_artist': response.results[0]['track_artist'], 'track_album': response.results[0]['track_album'], 'track_title': response.results[0]['track_title'], 'request_user_id': user_id, 'request_source_id': source_id, 'request_track_id': track_id } tracks.append(track) # Create the request in the search engine solr = SolrConnection(settings.SOLR_URL) solr.add_many(tracks) solr.commit() solr.close() # Log the request to the database db = psycopg2.connect(database='airjukebox') cr = db.cursor() for track in tracks: cr.execute('insert into tbrequests (userid, locationid, sourceid, trackid) values (%(request_user_id)s, %(channel_id)s, %(request_source_id)s, %(request_track_id)s)', track) db.commit() cherrypy.response.headers['Content-Type'] = 'application/json; charset=utf-8' return json.dumps(tracks, ensure_ascii=False, indent=4).encode('utf-8')