예제 #1
0
    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())
예제 #2
0
    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())
예제 #3
0
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)
예제 #4
0
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
예제 #5
0
    """

    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