Проблема механизма обновления токена Python Script для API SpotifyPython

Программы на Python
Ответить
Anonymous
 Проблема механизма обновления токена Python Script для API Spotify

Сообщение Anonymous »

Я пишу скрипт Python для перебора новых музыкальных редакционных плейлистов с помощью Spotify API для извлечения информации о треке, исполнителе и альбоме в CSV-файл. Мой скрипт какое-то время работал отлично, прекрасно обрабатывая все треки в списках воспроизведения в моем списке идентификаторов, но остановился во время обработки трека примерно через час работы. Я подумал, что это может быть связано с истечением срока действия моего токена доступа, поэтому я добавил некоторый код в начало моего скрипта, чтобы получить информацию о кэшированном токене доступа и обновлять ее при каждом новом запуске, думая, что это приведет к повторному запуску как минимум нового часа. -time, чтобы я мог погрузиться глубже и посмотреть, нужно ли и где мне добавлять автоматическое обновление во время итерации извлечения данных, если срок действия моего токена доступа истечет в будущем. По какой-то причине мой скрипт не выводит на консоль неверный запрос или ошибку истечения срока действия токена, он просто застревает при обработке первого трека в первом списке воспроизведения, как вы можете видеть на снимке экрана ниже. Для контекста: во время работы консоль печатала каждый трек в одном формате из всех идентификаторов плейлистов в моем списке, а затем застряла в середине одного плейлиста, как и сейчас, но теперь она застревает в самом первый трек в первом плейлисте. Я почти уверен, что это какая-то проблема с моим токеном доступа. Я думаю, мой вопрос в том, почему он зависает и не выдает ошибку, и как я могу это исправить, чтобы он автоматически правильно обновлялся, чтобы продолжить работу без досрочного выхода из выполнения. Спасибо!
Изображение


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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»