import json import requests import pandas as pd from pandas import DataFrame from pprint import pprint import datetime import base64 import sys import csv # get all playlists taken from Apollo into a list with open('apollo_playlists.csv', 'rt') as f: reader = csv.reader(f) all_playlists = list(reader) # remove column headers all_playlists.pop(0) # 1. GET TOKEN + TOKEN-TIME # 2. IN THE LOOP, GET THE CURRENT_TIME # 3. IF CURRENT_TIME - TOKEN_TIME > 55 MINS, THEN GO BACK TO 1 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 ### ABOVE NEEDS TO BE REFRESHED EVERY HOUR ### def get_followers(): playlists_followers = [] auth, cred_time = get_creds() 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) p = [] p_id = playlist[1] #print p_id p.append(p_id) p_name = playlist[2] #print p_name p.append(p_name) user = playlist[3] #print user p.append(user) response = requests.get('https://api.spotify.com/v1/users/' + user + '/playlists/{}'.format(p_id), headers={"Authorization": auth}) t_data = response.json() #print t_data.get("error").get("status") 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: followers = t_data.get("followers").get("total") p.append(followers) print(p) playlists_followers.append(p) playlist_df = DataFrame.from_records(playlists_followers, columns=['ID','PLAYLIST','USER','FOLLOWERS']) playlist_df = playlist_df.sort_values(by=['FOLLOWERS'], ascending = False) #print(playlist_df[:50]) print(playlist_df.shape[0]) return playlist_df def main(): playlist_df = get_followers() playlist_df.to_csv('apollo_playlists_followers_july3.csv') main()