Quantcast
Channel: Active questions tagged youtube-api - Stack Overflow
Viewing all articles
Browse latest Browse all 3831

Extracting YouTube Links for Songs in a Spotify Playlist

$
0
0

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.')

Viewing all articles
Browse latest Browse all 3831

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>