57 lines
1.7 KiB
Python
57 lines
1.7 KiB
Python
import logging
|
|
from datetime import date
|
|
|
|
import google_auth_oauthlib.flow
|
|
import googleapiclient.discovery
|
|
import googleapiclient.errors
|
|
|
|
logger = logging.getLogger("musik.youtube")
|
|
|
|
|
|
def create_playlist(musik_list):
|
|
# Connexion à l'API youtube, obtention d'un jeton OAuth
|
|
logger.info("Connexion à l'API Youtube")
|
|
flow = google_auth_oauthlib.flow.InstalledAppFlow.from_client_secrets_file(
|
|
"./secret.json", ["https://www.googleapis.com/auth/youtube.force-ssl"]
|
|
)
|
|
credentials = flow.run_local_server(port=0)
|
|
youtube = googleapiclient.discovery.build("youtube", "v3", credentials=credentials)
|
|
|
|
# Création d'une playlist
|
|
logger.info("Création de la playlist")
|
|
pl_request = youtube.playlists().insert(
|
|
part="snippet,status",
|
|
body={
|
|
"snippet": {
|
|
"title": f"Musik {date.today().strftime('%x')}",
|
|
},
|
|
"status": {
|
|
"privacyStatus": "private",
|
|
},
|
|
},
|
|
)
|
|
pl_response = pl_request.execute()
|
|
logger.info(
|
|
"Playlist créée : "
|
|
f"https://www.youtube.com/playlist?list={pl_response['id']}",
|
|
)
|
|
|
|
# Insertion des musiques dans la playlist
|
|
logger.info("Insertion des musiques dans la playlist")
|
|
for _, musik in musik_list:
|
|
logger.debug(musik)
|
|
request = youtube.playlistItems().insert(
|
|
part="snippet",
|
|
body={
|
|
"snippet": {
|
|
"playlistId": pl_response.get("id"),
|
|
"position": 0,
|
|
"resourceId": {
|
|
"kind": "youtube#video",
|
|
"videoId": musik,
|
|
},
|
|
}
|
|
},
|
|
)
|
|
request.execute()
|