예제 #1
0
def update_playlist_info():
    playlists = database.get_playlists_updated_older_than(days=1)
    print("number of playlists " + str(playlists.count()))
    for playlist in playlists:
        print("\tNew playlist! " + playlist.playlistId + " = '" + playlist.title + "'")
        results = sp.user_playlist(playlist.userId, playlist.playlistId, fields="")
        query = database.get_current_tracks_in_playlist(playlist.number)
        tracks_db = list()
        # it would be much more neat if I was able to solve the SQL query to only get results form the DB
        # with Tracks not listed from spotify API, as: select ... where trackId NOT IN ([all values from spotify api])
        # and dateAdded NOT IN ([all values from spotify API])
        for track in query:
            tracks_db.append(track)
        snapshotId = results['snapshot_id']
        if (snapshotId == playlist.snapshotId):
            # print(results['name'] + " = " + results['id'])
            # print('SNAPSHOT-EQUALS, NO NEED TO CHECK FURTHER')
            database.set_playlist_updated(playlist)
            continue
        else:
            playlist.snapshotId = snapshotId
            database.set_playlist_updated(playlist)
        print("\tNumber of songs in playlist: " + str(results['tracks']['total']))
        print("first run...")
        tracks = results['tracks']
        _analyze_tracks(tracks['items'],tracks_db,playlist.number)
        while tracks['next']:
            print("Run again...")
            tracks = sp.next(tracks)
            _analyze_tracks(tracks['items'],tracks_db,playlist.number)
        database.set_playlist_updated(playlist)
        for track in tracks_db:
            print(track.trackId.trackId + " " + str(track.dateAdded))
            database.set_track_in_playlist_removed(track)
def notify_users():
    subscribers = database.get_unnotified_subscribers()
    for subscriber in subscribers:
        body = "<html>"
        message = sendgrid.Mail()
        message.add_to(subscriber.email)
        message.set_subject(subscriber.playlistNumber.title + " updated!")
        message.set_from("Spotify Notifier <*****@*****.**>")
        diff = database.get_removed_or_added_tracks_in_playlist(subscriber.playlistNumber, subscriber.lastNotified)
        current_tracks = database.get_current_tracks_in_playlist(subscriber.playlistNumber.number)
        body += str(diff.count()) + " change(s)<br>"
        for track in diff:
            s = ""
            if track.dateRemoved == None:
                s += "+ "
            else:
                s += "- " + "removed: " + str(track.dateRemoved) + " "
            s += track.trackId.artists + " - " + track.trackId.title + " " + " added: " + str(track.dateAdded)
            body += s + "<br>"
        body += "Current tracks:<br>"
        for track in current_tracks:
            body += (
                track.trackId.artists
                + " - "
                + track.trackId.title
                + "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"
                + str(track.trackId.duration)
                + "ms"
                + "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Popularity: "
                + str(track.trackId.popularity)
                + "<br>"
            )

        body += "</html>"
        message.set_html(body)
        try:
            status, msg = sg.send(message)
            database.set_subscriber_notified(subscriber)
        except SendGridClientError:
            print(status)
        except SendGridServerError:
            print(status)
        print(body)