I have written a Python script to extract YouTube links for songs in a Spotify playlist. Regrettably, it seems to fetch only the initial 100 songs out of a total of over 2000 in the playlist. Additionally, when I attempt to run the code for the second time, I encounter a 403 error, signaling a quota limit breach.
As a newbie, any guidance or support you can provide would be greatly appreciated.
Thanks in advance.
import spotipyfrom spotipy.oauth2 import SpotifyClientCredentialsfrom googleapiclient.discovery import buildimport requests_cacheimport time# Enable caching with requests_cacherequests_cache.install_cache('youtube_cache', expire_after=3600)# Spotify API credentials (hidden)SPOTIFY_CLIENT_ID = 'XXX'SPOTIFY_CLIENT_SECRET = 'XXX'# YouTube API key (hidden)YOUTUBE_API_KEY = 'XXX'# Spotify playlist ID (hidden)SPOTIFY_PLAYLIST_ID = 'XXX'# Spotify authenticationsp = spotipy.Spotify(auth_manager=SpotifyClientCredentials(client_id=SPOTIFY_CLIENT_ID, client_secret=SPOTIFY_CLIENT_SECRET))# YouTube APIyoutube = build('youtube', 'v3', developerKey=YOUTUBE_API_KEY)# Fetch all tracks from a playlist, handling paginationdef fetch_all_tracks(sp, playlist_id): all_tracks = [] offset = 0 limit = 100 # Set the limit to the maximum (100) initially while True: response = sp.playlist_tracks(playlist_id, offset=offset, limit=limit) tracks = response['items'] if not tracks: break all_tracks.extend(tracks) offset += len(tracks) # Update the limit for the next request limit = min(100, response['total'] - offset) return all_tracks# Extract track informationdef extract_track_info(track): track_info = {'name': track['track']['name'],'artists': [artist['name'] for artist in track['track']['artists']] } return track_info# Search for the respective track on YouTube using API key with rate limitingdef search_on_youtube(api_key, query): time.sleep(1) # Introduce a delay of 1 second between requests request = youtube.search().list(q=query, part='snippet', type='video', maxResults=1) response = request.execute() video_id = response['items'][0]['id']['videoId'] return video_id# Add video to YouTube Music (manual step)def add_to_youtube_music(video_id): print(f"Add video to YouTube Music: https://www.youtube.com/watch?v={video_id}") print("Manually add this video to your YouTube Music library.")# Transfer playlist to YouTube Musicdef transfer_to_youtube_music(api_key, playlist_name, tracks): for track in tracks: query = f"{track['name']} {', '.join(track['artists'])}" video_id = search_on_youtube(api_key, query) # Perform actions with video_id as needed (e.g., add to YouTube Music) add_to_youtube_music(video_id)if __name__ == '__main__': # Fetch playlist from Spotify playlist_name, tracks = fetch_playlist_by_id(sp, SPOTIFY_PLAYLIST_ID) # Transfer playlist to YouTube Music transfer_to_youtube_music(YOUTUBE_API_KEY, playlist_name, tracks) print(f'Transferred playlist "{playlist_name}" to YouTube Music.')