def get_spotify_playlist(playlist): if playlist.startswith('http'): playlist_url = playlist else: playlist_url = 'http://open.spotify.com/user/{}/playlist/{}'.format( *re.search('spotify:user:(.+):playlist:(.+)', playlist).groups() ) playlist_br = mechanize.Browser() playlist_br.open(playlist_url) playlist_name = re.search(r'<h1 itemprop="name">(.+)</h1>', playlist_br.response().read()).groups()[0] pl = Playlist(playlist_name.decode('utf8'), playlist) # http://docs.python.org/2/library/functions.html#filter track_links = filter(lambda x: x.url.startswith('/track/'), playlist_br.links()) # http://docs.python.org/2/library/collections.html#ordereddict-objects tracks = collections.OrderedDict() for track_link in track_links: if not tracks.has_key(track_link.url): tracks[track_link.url] = { 'mechanized_link': track_link, 'track_url': 'http://open.spotify.com' + track_link.url, 'title': track_link.text } for track in tracks.values(): try: track_html = mechanize.urlopen(track['track_url']).read() except urllib2.HTTPError as e: print('{:}, HTTP Error 404, {:} not found'.format(track['title'], track['track_url'])) track['artist_url'], track['artist'], track['album_url'], track['album'] = ('', '', '', '') continue # http://docs.python.org/2/library/re.html matches = re.search( r'<h1 itemprop="name">(.+)</h1>[ \t\n\r]*<h2> by <a href="(/artist/.+)">(.+)</a></h2>[ \t\n\r]*</div>[ \t\n\r]*<h3>Tracks in <a href="(/album/.+)">(.+)</a></h3>', track_html) track['title'], track['artist_url'], track['artist'], track['album_url'], track['album'] = matches.groups() title, artist, album = map( lambda s: html_parser.unescape(s.decode('utf-8', 'xmlcharrefreplace')), (track['title'], track['artist'], track['album']) ) pl.add_track( Track(title, album, artist) ) return pl
def get(self): tracks=memcache.get("front Videos playlists") if tracks is None: playlist=Playlist() playlist.tipo="predefined" playlist.create() tracks=playlist.getTracks() memcache.set("front Videos playlists",tracks) self.response.out.write(json.dumps(tracks))
def reloadDatabase(): global database, playlists try: database = getAudioDatabase(path) playlists = dict([(basename(f), Playlist.getPlaylist(f)) for f in playlistPaths]) except ValueError as e: print(e) exit()
def gmaa_move(): pl = Playlist.from_json(request.form['pl_data']) username, passwd = request.form['username'], request.form['password'] api = Mobileclient() api.login(username, passwd) playlist_id = api.create_playlist(pl.name) for t in pl.tracks: try: tracks = api.search_all_access(u'%s - %s' % (t.artist, t.title), 1) except CallFailure: continue else: track_ids = [t['track']['nid'] for t in tracks['song_hits']] api.add_songs_to_playlist(playlist_id, track_ids) return render_template('ok.html', pl=pl)
def post(self): j=self.request.body data=json.loads(j) genre=data["data"] tracks=None tracks=memcache.get("%s Videos playlist"%genre) if tracks is None: playlist=Playlist() playlist.tipo="artist" playlist.param=data["data"] playlist.create() tracks=playlist.getTracks() memcache.set("%s Videos playlist"%genre, tracks) self.response.out.write(json.dumps(tracks))
def real_post(self): import time time_star=time.time() j=self.request.body data=json.loads(j) genre=data["data"] tracks=None tracks=memcache.get("%s Videos playlist"%genre) if tracks is None: playlist=Playlist() playlist.tipo="artist" playlist.param=data["data"] playlist.create() tracks=playlist.getTracks() memcache.set("%s Videos playlist"%genre, tracks) logging.error("total time of playlist= %s"%(time.time()-time.start())) self.response.out.write(json.dumps(tracks))
def post(self): logging.error("xhrCreateTagPlayList") j=self.request.body data=json.loads(j) genre=data["data"] tracks=None if tracks is None: playlist=Playlist() playlist.tipo="artist-radio" playlist.param=genre playlist.create() tracks={"tracks":playlist.getTracks(),"session":playlist.session} self.response.out.write(json.dumps(tracks))