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 + " " + str(track.trackId.duration) + "ms" + " 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)