Automatice YouTube Music a Spotify con Python

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:

lista de reproducción de youtube

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.

Identificación de usuario

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:

Guardar token de OAuth

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. 

identificación de la lista de reproducción

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

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *