
import csv
from datetime import datetime, timedelta
import spotipy
from spotipy.oauth2 import SpotifyOAuth
import time
# Set up credentials and authorization parameters
client_id = 'myclientid'
client_secret = 'myclientsecret'
redirect_uri = 'https://google.com/'
scope = 'playlist-modify-public playlist-modify-private'
username = 'myusername'
# Create Spotipy object using SpotifyOAuth
sp = spotipy.Spotify(
auth_manager=SpotifyOAuth(
client_id=client_id,
client_secret=client_secret,
redirect_uri=redirect_uri,
scope=scope,
username=username
)
)
# Refresh access token **This is what I added after realizing program was getting stuck after about an hour of run-time**
token_info = sp.auth_manager.get_cached_token()
sp.auth_manager.refresh_access_token(token_info['refresh_token'])
print("Refreshing Access Token.")
new_token_info = sp.auth_manager.get_cached_token()
print("Old access token:", token_info['access_token'])
print("New access token:", new_token_info['access_token'])
# Define a list of playlist IDs
playlist_ids = ['37i9dQZF1DX4JAvHpjipBk', '37i9dQZF1DX0XUsuxWHRQd', '37i9dQZF1DXdwmD5Q7Gxah', '37i9dQZF1DXcBWIGoYBM5M', '37i9dQZF1DX10zKzsJ2jva', '37i9dQZF1DWY7IeIP1cdjF', '37i9dQZF1DX76Wlfdnj7AP', '37i9dQZF1DX0FOF1IUWK1W', '37i9dQZF1DX1lVhptIYRda', '37i9dQZF1DXdSjVZQzv2tl', '37i9dQZF1DX4sWSpwq3LiO', '37i9dQZF1DWY4xHQp97fN6', '37i9dQZF1DWZjqjZMudx9T', '37i9dQZF1DX4SBhb3fqCJd', '37i9dQZF1DX4dyzvuaRJ0n', '37i9dQZF1DWTkIwO2HDifB', '37i9dQZF1DWWQRwui0ExPn', '37i9dQZF1DXaXB8fQg7xif', '37i9dQZF1DX5BAPG29mHS8', '37i9dQZF1DWZd79rJ6a7lp', '37i9dQZF1DXcZQSjptOQtk', '37i9dQZF1DXcF6B6QPhFDv', '37i9dQZF1DX9tPFwDMOaN1', '37i9dQZF1DWWY64wDtewQt', '37i9dQZF1DX0BcQWzuB7ZO', '37i9dQZF1DXcZDD7cfEKhW', '37i9dQZF1DWYBO1MoTDhZI', '37i9dQZF1DXbbu94YBG7Ye', '37i9dQZF1DXb0COFso7q0D', '37i9dQZF1DWY4lFlS4Pnso', '37i9dQZF1DWUa8ZRTfalHk', '37i9dQZF1DXaxEKcoCdWHD', '37i9dQZF1DWSpF87bP6JSF', '37i9dQZF1DX6GwdWRQMQpq']
tracksData = []
# Iterate through playlist IDs and extract track information
for playlist_id in playlist_ids:
# Use Spotipy API to get playlist data
playlist = sp.playlist(playlist_id)
# Use Spotipy API to get track data
results = sp.playlist_tracks(playlist_id)
count = 1
# Extract track information and add to tracksData array
for track in results['items']:
track = track['track']
print(f"Processing track: {track['artists'][0]['name']} - {track['name']} from playlist: {playlist['name']}")
start_time = time.time()
try:
sp.artist(track['artists'][0]['id'])
sp.track(track['id'])
sp.album(track['album']['id'])
except:
pass
elapsed_time = time.time() - start_time
if elapsed_time > 3:
print(f"Skipping track: {track['artists'][0]['name']} - {track['name']} from playlist: {playlist['name']} (took too long to process)")
continue
tracksData.append({
'artistName': track['artists'][0]['name'],
'songName': track['name'],
'releaseDate': track['album']['release_date'],
'positionInPlaylist': count,
'artistFollowers': sp.artist(track['artists'][0]['id'])['followers']['total'],
'albumImageUrl': track['album']['images'][0]['url'],
'trackPopularity': track['popularity'],
'artistPopularity': sp.artist(track['artists'][0]['id'])['popularity'],
'isrc': track['external_ids']['isrc'],
'albumLabel': sp.album(track["album"]["id"])["label"],
'albumExternalUrl': track['album']['external_urls']['spotify'],
'playlistId': playlist_id,
'playlistName': playlist['name'], # Set playlistName to actual name of playlist
'playlistImage': playlist['images'][0]['url'], # Add playlist image to dictionary
'playlistFollowers': playlist['followers']['total'], # Add playlist followers to dictionary
'trackId': track['id'], # Add track ID to dictionary
'albumId': track['album']['id'] # Add album ID to dictionary
})
count += 1
time.sleep(2) # Pause for 2 seconds before processing the next playlist
# Calculate the most recent Friday
today = datetime.today()
friday = today - timedelta((today.weekday() - 4) % 7)
# Calculate the date 7 days prior to the most recent Friday
lastWeekFriday = friday - timedelta(days=7)
# Create a list of track dictionaries with release dates within the past week
recentTracks = []
for track in tracksData:
# Convert release date string to datetime object
releaseDate = datetime.strptime(track['releaseDate'], '%Y-%m-%d')
# Check if release date is within the past week
if lastWeekFriday
Подробнее здесь: https://stackoverflow.com/questions/757 ... potify-api
Мобильная версия