85 lines
2.6 KiB
Python
85 lines
2.6 KiB
Python
import spotipy
|
|
from spotipy.oauth2 import SpotifyOAuth
|
|
import json
|
|
import requests
|
|
|
|
"""
|
|
User functions
|
|
"""
|
|
def authentify(client_id,client_secret,scope):
|
|
api = spotipy.Spotify(auth_manager=SpotifyOAuth(client_id="1ad3f973e5924940bec0bcbf1adf7475",client_secret="e0601efe11ee4e31b27b255c06d70a38",redirect_uri="http://127.0.0.1:8888",scope=scope))
|
|
return api
|
|
|
|
def get_user_id(api):
|
|
return api.current_user()['id']
|
|
|
|
"""
|
|
Tracks functions
|
|
"""
|
|
def get_original_release_year(api, track_id):
|
|
response = api.track(track_id)
|
|
title = response['artists'][0]['name']
|
|
artist = ['name']
|
|
url = "https://musicbrainz.org/ws/2/recording/"
|
|
params = {
|
|
"query": f"{title} AND artist:{artist}",
|
|
"fmt": "json"
|
|
}
|
|
response = requests.get(url, params=params)
|
|
data = response.json()
|
|
|
|
# Traitement de la première date de sortie si disponible
|
|
if data['recordings']:
|
|
release_date = data['recordings'][0]['first-release-date']
|
|
return release_date[:4] # Renvoie uniquement l'année
|
|
return None
|
|
|
|
# Max 100 tracks
|
|
def get_tracks_bpm(api,tracks):
|
|
response = api.audio_features(tracks)
|
|
tempos = ['{:.1f}'.format(track["tempo"]) for track in response]
|
|
return tempos
|
|
|
|
"""
|
|
Playlists functions
|
|
"""
|
|
def get_playlist_data(api, playlist_id):
|
|
response = api.playlist_tracks(playlist_id)
|
|
|
|
def get_playlist_tracks_with_metadata(api, playlist_id):
|
|
results = api.playlist_tracks(playlist_id)
|
|
tracks = results['items']
|
|
|
|
for idx, item in enumerate(tracks):
|
|
track = item['track']
|
|
track_name = track['name']
|
|
artist_name = track['artists'][0]['name']
|
|
album_id = track['album']['id']
|
|
|
|
# Récupération de l'année de sortie via l'album
|
|
album_info = api.album(album_id)
|
|
release_year = album_info['release_date'][:4]
|
|
|
|
# Récupération du BPM via les caractéristiques audio
|
|
track_features = api.audio_analysis(track['id'])[0]
|
|
bpm = track_features['tempo']
|
|
|
|
# Affichage des informations
|
|
print(f"{idx + 1}: {track_name} by {artist_name} | Year: {release_year} | BPM: {bpm}")
|
|
|
|
def get_playlist_id(api, nom):
|
|
playlists = []
|
|
results = api.current_user_playlists()
|
|
playlists.extend(results['items'])
|
|
|
|
# Pagination pour récupérer toutes les playlists si l'utilisateur en a plus de 50
|
|
while results['next']:
|
|
results = api.next(results)
|
|
playlists.extend(results['items'])
|
|
|
|
# Recherche de la playlist par nom
|
|
for playlist in playlists:
|
|
if playlist['name'] == nom:
|
|
return playlist['id']
|
|
print(f"Playlist '{nom}' non trouvée.")
|
|
return None |