为什么我只能从 Spotify 播放列表中获取一首歌曲而不是所有歌曲?
Why am I only getting one song from Spotify playlists isntead of all of them?
我是编程新手。我想使用 SpotiPy 和 PyLyrics 结合我的 Spotify 播放列表的音频特征分析进行情感分析。
我试图让这段代码正常工作,但我只设法将一首歌曲添加到我的 CSV 文件中,尽管我的播放列表要大得多。
from spotipy.oauth2 import SpotifyClientCredentials
import spotipy
import json
import csv
import pylyrics3
from nltk.sentiment.vader import SentimentIntensityAnalyzer as SIA
client_credentials_manager = SpotifyClientCredentials(client_id='#########', client_secret='#########')
sp = spotipy.Spotify(client_credentials_manager=client_credentials_manager)
sentiment_analyzer = SIA()
def get_features(track_id):
features_results = sp.audio_features(track_id)
json_features = json.dumps(features_results)
features_data = json.loads(json_features)
features_list = list(features_data[0].values())
return features_list
playlist_ids = [
"6itzpx6OEo76NWSpy0f3fc",
"3itylhqRqKPS4nOgWmU7lU",
"63UBtWxXAtUIR6djuNhGj9",
"6tZo11hLgEslYdMP5wu4q8",
"3XXl0JH2uLXpmO5EbH6XPb"
]
# Audio features
feature_names = [
"danceability",
"energy",
"key",
"loudness",
"mode",
"speechiness",
"acousticness",
"instrumentalness",
"liveness",
"valence",
"tempo",
"type",
"id",
"uri",
"track_href",
"analysis_url",
"duration_ms",
"time_signature"
]
username = '#########'
# Write data to CSV file
data_file = open('data.csv','w')
writer = csv.writer(data_file)
# Write header
writer.writerow(['track_id', 'playlist_id', 'date_added', 'track_name', 'first_artist'] + feature_names + ['lyrics', 'neg', 'neu', 'pos', 'compound'])
for playlist_id in playlist_ids:
print('Querying playlist: ' + str(playlist_id))
repeat_query = True
offset_n = 0
for i in range(2):
# Query Spotify API
if i > 0:
print('Repeating query')
offset_n += 50
results = sp.user_playlist_tracks(username, playlist_id, offset=offset_n)
json_results = json.dumps(results)
data = json.loads(json_results)
# Write rows
for track in data['items']:
track_id = track['track']['id']
date_added = track['added_at']
track_name = track['track']['name']
first_artist = track['track']['artists'][0]['name']
# Track features
features = get_features(track_id)
# Try to get lyrics, if available
lyrics = ''
try:
lyrics = pylyrics3.get_song_lyrics(first_artist, track_name)
except:
pass
# Sentiment Analysis
neg = None
neu = None
pos = None
compound = None
if lyrics:
snt = sentiment_analyzer.polarity_scores(lyrics)
neg = snt['neg']
neu = snt['neu']
pos = snt['pos']
compound = snt['compound']
writer.writerow([track_id, playlist_id, date_added, track_name, first_artist] + features + [lyrics] + [neg, neu, pos, compound])
#if data['total'] < 50:
# break ????
print('Done querying')
data_file.close()
有谁知道这里出了什么问题以及如何将我的播放列表中的所有曲目转换为 csv?
from spotipy.oauth2 import SpotifyClientCredentials
import spotipy
import json
import csv
import pylyrics3
from nltk.sentiment.vader import SentimentIntensityAnalyzer as SIA
import nltk
import spotipy.util as util
nltk.download('vader_lexicon')
client_credentials_manager = SpotifyClientCredentials(client_id='befa36b5832642fdbb2aa9062f167a7b', client_secret='6ae5e340ddb048839359f53a0bf9abb2')
sp = spotipy.Spotify(client_credentials_manager=client_credentials_manager)
sentiment_analyzer = SIA()
def get_features(track_id):
features_results = sp.audio_features(track_id)
json_features = json.dumps(features_results)
features_data = json.loads(json_features)
features_list = list(features_data[0].values())
return features_list
playlist_ids = [
"6itzpx6OEo76NWSpy0f3fc",
"3itylhqRqKPS4nOgWmU7lU",
"63UBtWxXAtUIR6djuNhGj9",
"6tZo11hLgEslYdMP5wu4q8",
"3XXl0JH2uLXpmO5EbH6XPb",
"5iNZJ2AZghsNgbZgNUngyv",
]
# Audio features
feature_names = [
"danceability",
"energy",
"key",
"loudness",
"mode",
"speechiness",
"acousticness",
"instrumentalness",
"liveness",
"valence",
"tempo",
"type",
"id",
"uri",
"track_href",
"analysis_url",
"duration_ms",
"time_signature"
]
username = 'h93pdaba60md5qbuazllf0mft'
# Write data to CSV file
data_file = open('data.csv','w')
writer = csv.writer(data_file)
# Write header
writer.writerow(['track_id', 'playlist_id', 'date_added', 'track_name', 'first_artist'] + feature_names + ['lyrics', 'neg', 'neu', 'pos', 'compound'])
for playlist_id in playlist_ids:
print('Querying playlist: ' + str(playlist_id))
repeat_query = True
offset_n = 0
for i in range(2):
# Query Spotify API
if i > 0:
print('Repeating query')
offset_n += 50
results = sp.user_playlist_tracks(username, playlist_id, offset=offset_n)
json_results = json.dumps(results)
data = json.loads(json_results)
# Write rows
for track in data['items']:
track_id = track['track']['id']
date_added = track['added_at']
track_name = track['track']['name']
first_artist = track['track']['artists'][0]['name']
# Track features
features = get_features(track_id)
# Try to get lyrics, if available
lyrics = ''
try:
lyrics = pylyrics3.get_song_lyrics(first_artist, track_name)
except:
pass
# Sentiment Analysis
neg = None
neu = None
pos = None
compound = None
if lyrics:
snt = sentiment_analyzer.polarity_scores(lyrics)
neg = snt['neg']
neu = snt['neu']
pos = snt['pos']
compound = snt['compound']
try:
writer.writerow([track_id, playlist_id, date_added, track_name, first_artist] + features + [lyrics] + [neg, neu, pos, compound])
except:
print("error in csv writting")
#if data['total'] < 50:
# break ????
print('Done querying')
data_file.close()
我是编程新手。我想使用 SpotiPy 和 PyLyrics 结合我的 Spotify 播放列表的音频特征分析进行情感分析。
我试图让这段代码正常工作,但我只设法将一首歌曲添加到我的 CSV 文件中,尽管我的播放列表要大得多。
from spotipy.oauth2 import SpotifyClientCredentials
import spotipy
import json
import csv
import pylyrics3
from nltk.sentiment.vader import SentimentIntensityAnalyzer as SIA
client_credentials_manager = SpotifyClientCredentials(client_id='#########', client_secret='#########')
sp = spotipy.Spotify(client_credentials_manager=client_credentials_manager)
sentiment_analyzer = SIA()
def get_features(track_id):
features_results = sp.audio_features(track_id)
json_features = json.dumps(features_results)
features_data = json.loads(json_features)
features_list = list(features_data[0].values())
return features_list
playlist_ids = [
"6itzpx6OEo76NWSpy0f3fc",
"3itylhqRqKPS4nOgWmU7lU",
"63UBtWxXAtUIR6djuNhGj9",
"6tZo11hLgEslYdMP5wu4q8",
"3XXl0JH2uLXpmO5EbH6XPb"
]
# Audio features
feature_names = [
"danceability",
"energy",
"key",
"loudness",
"mode",
"speechiness",
"acousticness",
"instrumentalness",
"liveness",
"valence",
"tempo",
"type",
"id",
"uri",
"track_href",
"analysis_url",
"duration_ms",
"time_signature"
]
username = '#########'
# Write data to CSV file
data_file = open('data.csv','w')
writer = csv.writer(data_file)
# Write header
writer.writerow(['track_id', 'playlist_id', 'date_added', 'track_name', 'first_artist'] + feature_names + ['lyrics', 'neg', 'neu', 'pos', 'compound'])
for playlist_id in playlist_ids:
print('Querying playlist: ' + str(playlist_id))
repeat_query = True
offset_n = 0
for i in range(2):
# Query Spotify API
if i > 0:
print('Repeating query')
offset_n += 50
results = sp.user_playlist_tracks(username, playlist_id, offset=offset_n)
json_results = json.dumps(results)
data = json.loads(json_results)
# Write rows
for track in data['items']:
track_id = track['track']['id']
date_added = track['added_at']
track_name = track['track']['name']
first_artist = track['track']['artists'][0]['name']
# Track features
features = get_features(track_id)
# Try to get lyrics, if available
lyrics = ''
try:
lyrics = pylyrics3.get_song_lyrics(first_artist, track_name)
except:
pass
# Sentiment Analysis
neg = None
neu = None
pos = None
compound = None
if lyrics:
snt = sentiment_analyzer.polarity_scores(lyrics)
neg = snt['neg']
neu = snt['neu']
pos = snt['pos']
compound = snt['compound']
writer.writerow([track_id, playlist_id, date_added, track_name, first_artist] + features + [lyrics] + [neg, neu, pos, compound])
#if data['total'] < 50:
# break ????
print('Done querying')
data_file.close()
有谁知道这里出了什么问题以及如何将我的播放列表中的所有曲目转换为 csv?
from spotipy.oauth2 import SpotifyClientCredentials
import spotipy
import json
import csv
import pylyrics3
from nltk.sentiment.vader import SentimentIntensityAnalyzer as SIA
import nltk
import spotipy.util as util
nltk.download('vader_lexicon')
client_credentials_manager = SpotifyClientCredentials(client_id='befa36b5832642fdbb2aa9062f167a7b', client_secret='6ae5e340ddb048839359f53a0bf9abb2')
sp = spotipy.Spotify(client_credentials_manager=client_credentials_manager)
sentiment_analyzer = SIA()
def get_features(track_id):
features_results = sp.audio_features(track_id)
json_features = json.dumps(features_results)
features_data = json.loads(json_features)
features_list = list(features_data[0].values())
return features_list
playlist_ids = [
"6itzpx6OEo76NWSpy0f3fc",
"3itylhqRqKPS4nOgWmU7lU",
"63UBtWxXAtUIR6djuNhGj9",
"6tZo11hLgEslYdMP5wu4q8",
"3XXl0JH2uLXpmO5EbH6XPb",
"5iNZJ2AZghsNgbZgNUngyv",
]
# Audio features
feature_names = [
"danceability",
"energy",
"key",
"loudness",
"mode",
"speechiness",
"acousticness",
"instrumentalness",
"liveness",
"valence",
"tempo",
"type",
"id",
"uri",
"track_href",
"analysis_url",
"duration_ms",
"time_signature"
]
username = 'h93pdaba60md5qbuazllf0mft'
# Write data to CSV file
data_file = open('data.csv','w')
writer = csv.writer(data_file)
# Write header
writer.writerow(['track_id', 'playlist_id', 'date_added', 'track_name', 'first_artist'] + feature_names + ['lyrics', 'neg', 'neu', 'pos', 'compound'])
for playlist_id in playlist_ids:
print('Querying playlist: ' + str(playlist_id))
repeat_query = True
offset_n = 0
for i in range(2):
# Query Spotify API
if i > 0:
print('Repeating query')
offset_n += 50
results = sp.user_playlist_tracks(username, playlist_id, offset=offset_n)
json_results = json.dumps(results)
data = json.loads(json_results)
# Write rows
for track in data['items']:
track_id = track['track']['id']
date_added = track['added_at']
track_name = track['track']['name']
first_artist = track['track']['artists'][0]['name']
# Track features
features = get_features(track_id)
# Try to get lyrics, if available
lyrics = ''
try:
lyrics = pylyrics3.get_song_lyrics(first_artist, track_name)
except:
pass
# Sentiment Analysis
neg = None
neu = None
pos = None
compound = None
if lyrics:
snt = sentiment_analyzer.polarity_scores(lyrics)
neg = snt['neg']
neu = snt['neu']
pos = snt['pos']
compound = snt['compound']
try:
writer.writerow([track_id, playlist_id, date_added, track_name, first_artist] + features + [lyrics] + [neg, neu, pos, compound])
except:
print("error in csv writting")
#if data['total'] < 50:
# break ????
print('Done querying')
data_file.close()