我试图获取播放列表中 Spotify 曲目的数据,当我使用脚本运行播放列表时,我注意到某些值看起来很奇怪 - 例如,我浏览过的其中一首歌曲“有人告诉我” The Killers 的《Me》,流行度得分为 0。当我在 Spotify 开发者控制台上交叉检查时,它说流行度得分为 75。我还在其他一些低分曲目上尝试过这一点,它们的流行度值也是不正确的.
我检查了其他一些“正常外观”的值,它们是正确的,所以看起来这只发生在某些轨道上。
任何帮助/解释将不胜感激!
编辑:这是有问题的脚本
import spotipy
from spotipy.oauth2 import SpotifyClientCredentials
# Set up API credentials
client_id = 'CLIENT-ID-HERE'
client_secret = 'CLIENT-SECRET-HERE'
client_credentials_manager = SpotifyClientCredentials(client_id=client_id, client_secret=client_secret)
sp = spotipy.Spotify(client_credentials_manager=client_credentials_manager)
# Define playlist ID
playlist_id = 'PLAYLIST-ID-HERE'
# Get tracks in the playlist
results = sp.playlist_tracks(playlist_id)
tracks = results['items']
while results['next']:
results = sp.next(results)
tracks.extend(results['items'])
counter = 0
for track in tracks:
# Get track details
track_info = sp.track(track['track']['id'])
track_name = track_info['name']
track_artists = [artist['name'] for artist in track_info['artists']]
track_release_date = track_info['album']['release_date']
# Get audio features
audio_features = sp.audio_features(track['track']['id'])[0]
try:
track_genre = sp.artist(track_info['artists'][0]['id'])['genres'][0]
except:
print(f"Track name: {track_name}")
print("----------------------------")
continue
track_bpm = audio_features['tempo']
track_energy = audio_features['energy']
track_danceability = audio_features['danceability']
track_loudness = audio_features['loudness']
track_valence = audio_features['valence']
track_length = audio_features['duration_ms'] / 1000
track_acousticness = audio_features['acousticness']
track_speechiness = audio_features['speechiness']
track_popularity = track_info['popularity']
# Print track information
print(f"Track name: {track_name}")
print(f"Artists: {', '.join(track_artists)}")
print(f"Genre: {track_genre}")
print(f"Release date: {track_release_date}")
print(f"BPM: {track_bpm}")
print(f"Energy: {track_energy}")
print(f"Danceability: {track_danceability}")
print(f"Loudness: {track_loudness}")
print(f"Valence: {track_valence}")
print(f"Length: {track_length}")
print(f"Acousticness: {track_acousticness}")
print(f"Speechiness: {track_speechiness}")
print(f"Popularity: {track_popularity}")
print("----------------------------")
counter+=1
我注意到的另一件事;我用一些有问题的歌曲制作了一个新的播放列表,并且流行度是准确的。我尝试添加更多歌曲,当我通过 10 首歌曲时,标记了一些歌曲的受欢迎程度。
我遇到了同样的问题并做了一些诊断。
问题似乎与使用市场变量的默认 None 相关,将您的调用更新为:
results = sp.playlist_tracks(playlist_id, market='US')
“US”是 ISO 3166-1 alpha-2 国家/地区代码的示例,您想要查找歌曲的流行度,应该可以让您与要比较的内容相匹配。
当我使用默认的 market=None 时,它返回 0 受欢迎度分数。我不是专家,但我猜如果这首歌在某个国家/地区不可用,它可能会归零。