A veces escuchamos una canción en la música de YouTube, y realmente encontramos esa canción interesante, y quieres agregarla a tu lista de reproducción de Spotify. Luego, busca manualmente esa canción, la agrega a la lista de reproducción de Spotify. Pero podemos automatizar ese proceso de búsqueda de canciones de YouTube y agregarlas a la lista de reproducción de Spotify usando la programación de Python. En este artículo, aprenderemos cómo podemos automatizar el proceso de agregar música de YouTube a una lista de reproducción de Spotify usando Python.
Requisitos:
- Python 3 o posterior debe estar instalado en el sistema.
- Credenciales de la API de datos de Youtube
- Credenciales de la API de Spotify
- Youtube dl para extraer el nombre de la pista y el nombre del artista
Acercarse:
- En primer lugar, buscaremos y enumeraremos las canciones en la lista de reproducción de YouTube del usuario utilizando esta API de YouTube.
- Después de guardar la información de la canción, es decir, el nombre de la canción y el nombre del artista, buscaremos esta información en Spotify usando esta API de Spotify y guardaremos los datos en una lista .
- En el tercer paso, crearemos una lista de reproducción en la cuenta del usuario utilizando esta API de Spotify.
- En el cuarto y último paso , recorreremos la lista de canciones que hemos creado en el paso 2 y agregaremos esas canciones a la lista de reproducción creada en el paso 3 usando la API de Spotify.
Nota: Necesitaremos una cuenta de Google y una cuenta de Spotify para generar credenciales para automatizar la música de YouTube a Spotify.
Aquí está la lista de reproducción de YouTube que vamos a sincronizar con la música de Spotify:
Implementación paso a paso:
Paso 1: Generación de credenciales para la API de Spotify y la API de YouTube. Vaya a los siguientes enlaces y siga las instrucciones.
Generar credenciales de Spotify y guardar su ID de usuario para uso futuro, vaya a este enlace , es posible que se le solicite iniciar sesión con los detalles de su cuenta de Spotify e iniciar sesión. Y su nombre de usuario es su ID de usuario. Guarde este ID de usuario en su escritorio.
Vaya a este enlace para generar token para autenticación y haga clic en generar token y guarde este token en algún lugar de su escritorio:
Del mismo modo, también tenemos que generar un token OAuth de YouTube, simplemente siga estas instrucciones para generar el token.
Paso 2: enumere todas las canciones de la lista de reproducción que el usuario desea sincronizar con la lista de reproducción de S potify. Para eso, necesitamos tener el ID de la lista de reproducción de esa lista de reproducción en particular que vamos a sincronizar con la lista de reproducción de S potify.
Aquí, el resaltado es el ID de la lista de reproducción. Ahora, solo tenemos que enumerar todas las canciones que tenemos en esta lista de reproducción usando esta API de búsqueda .
Código:
Python3
import os import google_auth_oauthlib.flow import googleapiclient.discovery import googleapiclient.errors scopes = ["https://www.googleapis.com/auth/youtube.readonly"] def main(): # Disable OAuthlib's HTTPS # verification when running locally. # *DO NOT* leave this option # enabled in production. os.environ["OAUTHLIB_INSECURE_TRANSPORT"] = "1" api_service_name = "youtube" api_version = "v3" client_secrets_file = "YOUR_CLIENT_SECRET_FILE.json" # Get credentials and create an API client flow = google_auth_oauthlib.flow.InstalledAppFlow.from_client_secrets_file( client_secrets_file, scopes) credentials = flow.run_console() youtube = googleapiclient.discovery.build(api_service_name, api_version, credentials=credentials) request = youtube.playlistItems().list( part="snippet", playlistId="PLvcDEv0bQcCgLS-OncIWVRlviC6vyZiju" ) response = request.execute() print(response) if __name__ == "__main__": main()
Producción:
Paso 3: después de buscar canciones, agregaremos el título de estas canciones a una lista y luego crearemos una lista de reproducción en Spotify usando la API de Spotify.
Guardar los nombres de las canciones y los nombres de los artistas en una lista utilizando la información recopilada en el paso 1:
Python3
def extract_song_from_yt(dic): """Fetch song name from Youtube""" url = "https://www.youtube.com/watch?v=" info = [] song = "" for i in range(len(dic["items"])): video_url = url+str(dic["items"][i]["snippet"] ['resourceId']['videoId']) details = youtube_dl.YoutubeDL( {}).extract_info(video_url, download=False) track, artist = details['track'], details['artist'] info.append((track,artist)) return info
En el código anterior, hemos creado una función que creará una lista de nombres de pistas y sus artistas. Está tomando la salida de la salida del código del paso 1. Luego, simplemente usamos la biblioteca youtube-dl para obtener el nombre del artista y el título de las canciones, luego usamos un ciclo for para agregar el nombre de la pista y el nombre del artista separados por comas a una nueva lista llamada información.
Crear una nueva lista de reproducción de Spotify:
Python3
def create_playlist(): """Create A New Playlist""" request_body = json.dumps( { "name": "My New Geeks Playlist", "description": "Songs", "public": True, } ) query = "https://api.spotify.com/v1/users/{}/playlists".format( spotify_user_id) response = requests.post( query, data=request_body, headers={ "Content-Type": "application/json", "Authorization": "Bearer {}".format("spotify_token"), }, ) return response["id"]
En el código anterior, primero estamos creando un objeto JSON simple que tiene una descripción del título de la lista de reproducción y visibilidad de la lista de reproducción. Luego, usamos la API de la lista de reproducción de Spotify para enviar el objeto JSON recién creado que tiene todos los detalles de la nueva lista de reproducción y luego devolvemos el ID de la lista de reproducción recién generada.
Paso 4: después de crear una nueva lista de reproducción en Spotify, debemos buscar estas canciones y guardar su URL de Spotify. Veamos cómo podemos hacer eso.
Generando URL para canciones de Spotify:
Python3
def get_spotify_uri(track, artist): """Search For the Song""" query = "https://api.spotify.com/v1/search?query=track%3A{}+artist%3A{}&type=track".format( track, artist ) response = requests.get( query, headers={ "Content-Type": "application/json", "Authorization": "Bearer {}".format("spotify_token") } ) songs = response["tracks"]["items"] url = songs[0]["uri"] return url
Aquí, en la función anterior, estamos buscando la canción en Spotify usando el nombre de la canción y el nombre del artista. Usando la API de Spotify, estamos pasando el nombre de la pista y el nombre del artista como parámetro y luego estamos guardando la URL de esa canción de Spotify. Estamos tomando la URL de la primera canción que aparece en nuestra búsqueda.
Agregar una canción a la lista de reproducción de Spotify:
Python3
def add_song(playlist_id, urls): """Add all songs into the new Spotify playlist""" request_data = json.dumps(urls) query = "https://api.spotify.com/v1/playlists/{}/tracks".format( playlist_id) response = requests.post( query, data=request_data, headers={ "Content-Type": "application/json", "Authorization": "Bearer {}".format("spotify_token") } ) return response
En la función anterior, simplemente estamos agregando la canción que hemos buscado a la nueva lista de reproducción. Estamos tomando la identificación de la lista de reproducción y las URL que hemos extraído usando el nombre de la canción y el nombre del artista como parámetro y luego los volcamos en un objeto JSON porque vamos a hacer una solicitud de publicación, luego simplemente usamos los elementos de Spotify para agregar. la API de la lista de reproducción.
A continuación se muestra la implementación completa:
Python3
import os import google_auth_oauthlib.flow import googleapiclient.discovery import googleapiclient.errors import youtube_dl import requests import json spotify_token = 'YOUR SPOTIFY TOKEN' spotify_user_id = 'YOUR USER ID' scopes = ["https://www.googleapis.com/auth/youtube.readonly"] def get_play(): # Disable OAuthlib's HTTPS verification when running locally. # *DO NOT* leave this option enabled in production. os.environ["OAUTHLIB_INSECURE_TRANSPORT"] = "1" api_service_name = "youtube" api_version = "v3" client_secrets_file = "YOUR_CLIENT_SECRET_FILE.json" # Get credentials and create an API client flow = google_auth_oauthlib.flow.InstalledAppFlow.from_client_secrets_file( client_secrets_file, scopes) credentials = flow.run_console() youtube = googleapiclient.discovery.build( api_service_name, api_version, credentials=credentials) request = youtube.playlistItems().list( part="snippet", playlistId="PLvcDEv0bQcCgLS-OncIWVRlviC6vyZiju" ) response = request.execute() return response def extract_song_from_yt(dic): """Fetch song name from Youtube""" url = "https://www.youtube.com/watch?v=" info = [] song = "" for i in range(len(dic["items"])): video_url = url+str(dic["items"][i]["snippet"] ['resourceId']['videoId']) details = youtube_dl.YoutubeDL( {}).extract_info(video_url, download=False) track, artist = details['track'], details['artist'] info.append((track, artist)) return info def get_spotify_uri(track, artist): """Search For the Song""" query = "https://api.spotify.com/v1/search?\ query=track%3A{}+artist%3A{}&type=track".format( track, artist ) response = requests.get( query, headers={ "Content-Type": "application/json", "Authorization": "Bearer {}".format(spotify_token) } ) response = response.json() songs = response["tracks"]["items"] url = songs[0]["uri"] return url def create_playlist(): """Create A New Playlist""" request_body = json.dumps( { "name": "My New Geeks Playlist", "description": "Songs", "public": True, } ) query = "https://api.spotify.com/v1/users/{}/playlists".format( spotify_user_id) response = requests.post( query, data=request_body, headers={ "Content-Type": "application/json", "Authorization": "Bearer {}".format(spotify_token), }, ) response = response.json() return response["id"] def add_song(playlist_id, urls): """Add all liked songs into a new Spotify playlist""" request_data = json.dumps(urls) query = "https://api.spotify.com/v1/playlists/{}/tracks".format( playlist_id) response = requests.post( query, data=request_data, headers={ "Content-Type": "application/json", "Authorization": "Bearer {}".format(spotify_token) } ) return "songs added successfully" # fething data from youtube response = get_play() # creating spotify playlist play_id = create_playlist() # getting track name and artist name form yt song_info = extract_song_from_yt(response) # getting url for spotify songs urls = [] for i in range(len(response['items'])): urls.append(get_spotify_uri(song_info[i][0], song_info[i][1])) # adding song to new playlist add_song(play_id, urls)
Producción:
Publicación traducida automáticamente
Artículo escrito por amnindersingh1414 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA