import json import requests import pandas as pd from pandas import DataFrame from pprint import pprint import datetime import base64 import sys import csv with open('playlists_07_2018.csv', 'rt') as f: reader = csv.reader(f) all_playlists = list(reader) def get_creds(): client_id = 'your_client_id' client_secret = 'your_client_secret' access_token = None client_credentials = client_id + ':' + client_secret base = base64.b64encode(client_credentials.encode('ascii')) payload = {'grant_type': 'client_credentials'} headers = {'Authorization': 'Basic {}'.format(base.decode('utf-8'))} r = requests.post( 'https://accounts.spotify.com/api/token', data=payload, headers=headers) json_response = r.json() access_token = json_response['access_token'] print(access_token) auth = "Bearer " + access_token cred_time = datetime.datetime.now() return auth, cred_time def get_placements(): auth, cred_time = get_creds() new_tracks = [] for playlist in all_playlists: current_time = datetime.datetime.now() if (current_time - cred_time).total_seconds() >2500: auth, cred_time = get_creds() print(auth) playlist_id = playlist[0] print playlist_id playlist_user = playlist[1] print playlist_user #below is to get playlist info f_response = requests.get('https://api.spotify.com/v1/users/' + playlist_user + '/playlists/{}'.format(playlist_id), headers={"Authorization": auth}) f_data = f_response.json() if f_data.get("error"): if f_data.get("error").get("status") == 404: print("Something went wrong.") continue elif f_data.get("error").get("status") == 401: print("key error 401") break elif f_data.get("error").get("status") == 403: print("key error 403") break else: followers = f_data.get("followers").get("total") playlist_name = f_data.get("name").encode('utf-8') playlist_uri = f_data.get("uri").encode('utf-8') total_tracks_on_playlist = f_data.get("tracks").get("total") #below is to get track info n = 0 for offset in range (0, total_tracks_on_playlist, 100): response = requests.get('https://api.spotify.com/v1/users/' + playlist_user + '/playlists/{}/tracks?offset={}&limit=100'.format(playlist_id,offset), headers={"Authorization": auth}) t_data = response.json() if t_data.get("error"): if t_data.get("error").get("status") == 404: print("Something went wrong.") continue elif t_data.get("error").get("status") == 401: print("key error 401") break elif t_data.get("error").get("status") == 403: print("key error 403") break else: ls = t_data.get("items") for track_item in ls: try: track = [] track.append(playlist_id) track.append(playlist_user) track.append(followers) added_at = track_item.get("added_at").encode('utf-8') track.append(added_at) isrc = track_item.get("track").get("external_ids").get("isrc").encode('utf-8') track.append(isrc) print isrc track.append(playlist_name) track.append(playlist_uri) n = n + 1 spot_on_playlist = n track.append(spot_on_playlist) track.append(total_tracks_on_playlist) print track new_tracks.append(track) except: pass new_tracks_df = DataFrame.from_records(new_tracks, columns=['PLAYLIST_ID','PLAYLIST_USER','FOLLOWERS','ADDED_AT','ISRC', 'PLAYLIST_NAME', 'PLAYLIST_URI','SPOT_ON_PLAYLIST','TOTAL_TRACKS_ON_PLAYLIST']) new_tracks_df = new_tracks_df.sort_values(by=['ADDED_AT'], ascending = False) print new_tracks_df[:10] new_tracks_df['ADDED_AT'] = pd.to_datetime(new_tracks_df['ADDED_AT']).dt.date now = datetime.datetime.now().date() new_tracks_df['DAYS_AGO'] = (now - new_tracks_df['ADDED_AT']).dt.days new_tracks_df = new_tracks_df.drop(new_tracks_df[new_tracks_df.DAYS_AGO>2].index) new_label_tracks.to_csv('real_time_placements_spotify_07-05-2018.csv') def main(): get_placements() print("Done.") main()