def select_playlist(request, context=None): error = None template = 'xpolyrics/editor.html' if request.method == 'POST': spotify_token = collect_tokens(SPOTIFY_USER, SCOPES) spotify_state = EditorState(spotify_token=spotify_token) form = forms.PlaylistsForm(request.POST, state=spotify_state) if form.is_valid(): old_playlists = form.cleaned_data['playlists_state'] playlist_id = form.cleaned_data['id'] playlists = [playlist_id] if old_playlists == playlist_id: # Unselect the playlist and its tracks and lyrics form.cleaned_data['playlists_state'] = None form.cleaned_data['tracks_state'] = None playlists = None state = EditorState(playlists=playlists, form=form) else: state = EditorState(form=form) error = form.errors if context: context.update(build_forms_context(state)) else: context = build_forms_context(state) context.update({"errors": error}) return shortcuts.render(request, template, context) else: return shortcuts.render(request, template, build_forms_context())
def select_track(request, context=None): error = None template = 'xpolyrics/editor.html' if request.method == 'POST': spotify_token = collect_tokens(SPOTIFY_USER, SCOPES) state = EditorState(spotify_token=spotify_token, tracks=[request.POST['id']]) form = forms.TracksForm(request.POST, state=state) if form.is_valid(): attr_id = form.cleaned_data['id'] tracks = [attr_id] if attr_id else [] old_tracks = form.cleaned_data['tracks_state'] if old_tracks == attr_id: # Unselect the track form.cleaned_data['tracks_state'] = None tracks = None state = EditorState(form=form, tracks=tracks) return shortcuts.render(request, template, build_forms_context(state)) else: state = EditorState(form=form) error = form.errors if context: context.update(build_forms_context(state)) else: context = build_forms_context(state) context.update({"errors": error}) return shortcuts.render(request, template, context) else: return shortcuts.render(request, template, build_forms_context())
def select_playlist(request): """ Select a playlist to show its tracks """ spotify_token = collect_tokens(SPOTIFY_USER, SCOPES) context = build_forms_context(EditorState(spotify_token=spotify_token)) return shortcuts.render(request, 'xpolyrics/editor.html', context)
def build_forms_context(state=None): """ Build PlayLists, Tracks and Lyrics Viewer Forms :param state: state for the forms :return: forms created as a dictionary """ spotify_token = collect_tokens(SPOTIFY_USER, SCOPES) if not state: state = EditorState(spotify_token=spotify_token) else: state.spotify_token = spotify_token playlists_form = forms.PlaylistsForm(state=state) tracks_form = forms.TracksForm(state=state) lyrics = None if state: if state.playlists: playlists_form.initial['id'] = state.playlists[0] if state.tracks: tracks_form.initial['id'] = state.tracks[0] genius_data = next(data.LyricsData(state).fetch()) song_data = genius_data['response']['hits'][0]['result'] song_id = song_data['id'] song_url = song_data['url'] song_title = song_data['title'] song_author = song_data['primary_artist']['name'] lyrics = embed_lyrics(song_id, song_url, song_title, song_author) context = { "playlists_form": playlists_form, "tracks_form": tracks_form, "lyrics": lyrics } return context
""" embed_viewer = """ <div id='rg_embed_link_%s' class='rg_embed_link' data-song-id='%s'> Read <a href='%s' >%s by %s </a> on Genius. </div> <script crossorigin src='//genius.com/songs/1587003/embed.js'></script> """ % (song_id, song_id, song_url, song_title, song_author) return embed_viewer if __name__ == '__main__': # The first step is to get the list of Play Lists from Spotify token = collect_tokens(SPOTIFY_USER, SCOPES) print("Finding the user playlists in Spotify") playlists = find_user_playlists(token, MAX_PLAY_LISTS) # Get the tracks for all playlists print("Getting the tracks for the user playlists in Spotify") tracks = [] for playlist in playlists[0:MAX_PLAY_LISTS]: tracks += find_user_playlist_tracks(token, playlist) if len(tracks) > MAX_TRACKS: break # Search the lyrics for the tracks in Genius lyrics_found = 0 lyrics_not_found = 0