📍 Ce tuto est le troisième d'une série en 4 étapes détaillées dans le sommaire.
1. Créer les identifiants sur Google Cloud
Retour sur Google Cloud. C’est l’étape la plus technique de cette automatisation.
Comme YouTube n'autorise pas les "comptes de service" pour publier des vidéos, nous devons simuler une connexion humaine pour obtenir un jeton d'accès permanent.
- Créer les identifiants : L'API YouTube interdit l'utilisation de comptes de service pour publier des vidéos sur une chaîne standard. Elle exige une authentification OAuth 2.0 pour simuler une connexion humaine réelle.
- Dans votre console Google Cloud, allez dans API et services > Identifiants.
- Cliquez sur + Créer des identifiants > ID client OAuth, choisissez Application de bureau, nommez-le et téléchargez le fichier JSON obtenu sous le nom
credentials.json. - Dans "Type d'application", choisissez impérativement Application de bureau.
- Une fois créé, vous verrez votre nouvel identifiant dans la liste "ID client OAuth 2.0".
- Le bouton de téléchargement : À l'extrême droite de la ligne correspondant à votre identifiant, vous verrez une petite icône avec une flèche vers le bas (Télécharger le JSON).
- Téléchargez ce fichier et renommez-le simplement
credentials.json.
2. Générer le token d'authentification
Ouvrir l'éditeur Cloud Shell : Cliquez sur l'icône >_ en haut à droite de votre console Google Cloud, puis sur Ouvrir l'éditeur pour accéder à une interface similaire à Visual Studio Code.
Ensuite :
- Glissez-déposez votre fichier
credentials.jsondirectement dans l'explorateur de fichiers à gauche. - Créez un nouveau fichier nommé
get_token.pyet collez-y le code suivant qui force l'utilisation du port 8080.from google_auth_oauthlib.flow import InstalledAppFlow SCOPES = [ '<https://www.googleapis.com/auth/drive.readonly>', '<https://www.googleapis.com/auth/youtube.upload>' ] # On force l'URI de redirection pour correspondre aux attentes de Google flow = InstalledAppFlow.from_client_secrets_file( 'credentials.json', scopes=SCOPES, redirect_uri='<http://localhost:8080/>' ) auth_url, _ = flow.authorization_url(access_type='offline', prompt='consent') print(f"\\n1. Ouvrez ce lien dans votre navigateur :\\n{auth_url}\\n") code = input("2. Après avoir validé, copiez le code fourni par Google et collez-le ici : ") flow.fetch_token(code=code) with open('token.json', 'w') as token: token.write(flow.credentials.to_json()) print("\\nFichier token.json généré avec succès !") - Enregistrez le fichier.
- Dans le terminal du Cloud Shell, tapez
pip install google-auth-oauthlibet installez toutes les librairies nécessaires. - Dans le terminal, tapez
python3 get_token.pyafin de générer un token qui permettra à votre script d'agir en votre nom de manière permanente. - Ouvrez le lien. Si une alerte de sécurité s'affiche ("Application non validée"), cliquez sur Paramètres avancés puis sur Accéder à [Nom de votre projet] (non sécurisé) pour continuer. Connectez-vous avec votre compte YouTube dans la fenêtre qui apparaît, et validez les accès (tous !). Le
token.jsonsera alors créé automatiquement. - Le script attend un code qui se trouve directement dans la barre d'adresse de votre navigateur, là où ce dernier affiche un message d’erreur tout à fait normal (car le script tourne sur les serveurs de Google (Cloud Shell) et non sur votre ordinateur personnel).
- Allez dans la barre d'adresse de l'onglet du navigateur qui affiche l'erreur.
- Repérez la partie qui commence après
code=. Copiez la longue suite de caractères et arrêtez-vous juste avant le&scope. - Retournez dans votre terminal Cloud Shell où le script est en attente.
- Collez le code et appuyez sur Entrée. Le message "Fichier token.json généré avec succès !" devrait apparaître dans le terminal.
- Vérifiez que le fichier
token.jsonest bien apparu dans votre explorateur de fichiers : regardez dans l'explorateur de fichiers à gauche de votre éditeur Cloud Shell pour vérifier que le nouveau fichiertoken.jsonest bien apparu.
3. Créer les fichiers app.py, requirements.txt et le Dockerfile
- Toujours dans l'éditeur Cloud Shell, créez les trois fichiers suivants nécessaires au fonctionnement de votre programme :
- app.py : C’est le cœur du programme qui reçoit l'ordre de Make.com, télécharge la vidéo et sa miniature depuis Drive et les envoie sur YouTube par morceaux (resumable upload) pour éviter les erreurs.
import os from flask import Flask, request, jsonify from google.oauth2.credentials import Credentials from googleapiclient.discovery import build from googleapiclient.http import MediaIoBaseDownload, MediaFileUpload app = Flask(__name__) SCOPES = ['<https://www.googleapis.com/auth/drive.readonly>', '<https://www.googleapis.com/auth/youtube.upload>'] @app.route('/upload', methods=['POST']) def upload_video(): data = request.json creds = Credentials.from_authorized_user_file('token.json', SCOPES) # 1. Téléchargement depuis Google Drive drive_service = build('drive', 'v3', credentials=creds) request_drive = drive_service.files().get_media(fileId=data['drive_id']) temp_path = '/tmp/video.mp4' with open(temp_path, 'wb') as f: downloader = MediaIoBaseDownload(f, request_drive) done = False while not done: _, done = downloader.next_chunk() # 2. Envoi vers YouTube youtube_service = build('youtube', 'v3', credentials=creds) body = { 'snippet': { 'title': data.get('title', 'Vidéo automatique'), 'description': data.get('desc', 'Publié via automation') }, 'status': {'privacyStatus': data.get('privacy', 'private')} } media = MediaFileUpload(temp_path, chunksize=1024*1024*5, resumable=True) request_yt = youtube_service.videos().insert(part=','.join(body.keys()), body=body, media_body=media) response = None while response is None: _, response = request_yt.next_chunk() os.remove(temp_path) # Nettoyage de la mémoire return jsonify({"success": True, "youtube_id": response['id']}), 200 if __name__ == '__main__': app.run(host='0.0.0.0', port=int(os.environ.get('PORT', 8080))) - requirements.txt : Listez simplement les bibliothèques
Flask,google-api-python-client,google-auth-oauthlibetgoogle-auth-httplib2avec leurs versions respectives. - Dockerfile : Collez le code suivant dans un nouveau fichier type Dockerfile pour expliquer à Google comment construire l'ordinateur virtuel pour votre script:
FROM python:3.9-slim WORKDIR /app COPY requirements.txt . RUN pip install --no-cache-dir -r requirements.txt COPY . . CMD ["python", "app.py"]
- app.py : C’est le cœur du programme qui reçoit l'ordre de Make.com, télécharge la vidéo et sa miniature depuis Drive et les envoie sur YouTube par morceaux (resumable upload) pour éviter les erreurs.
4. Déploiement sur Google Cloud Run
Une fois que vous avez vos 5 fichiers (credentials.json, token.json, app.py, requirements.txt, Dockerfile) dans le même dossier, vous allez pouvoir lancer le déploiement.
Mais avant celà, une dernière configuration critique est nécessaire. Il est impératif d'augmenter le Request timeout à 60 minutes (3600 secondes) et d'allouer au moins 1 ou 2 Go de RAM pour que les vidéos lourdes ne fassent pas planter le système.
- Accédez à Google Cloud Run en vous assurant que le bon projet est bien actif.
- Sélectionnez Services dans le menu de navigation Cloud Run, puis cliquez sur Modifier et déployer la nouvelle révision.Cliquez sur l'onglet Conteneur.
- Dans le champ Délai avant expiration de la requête, saisissez
3600secondes. - Dans le champ Limite de mémoire, appliquez la valeur d’
1 GiB. - Cliquez sur Déployer.
ℹ️ Passons dès à présent à la dernière étape : Automatisation YouTube : le scenario Make.com complet.
0 commentaire