Page 1 sur 1

[R] Automatiser l'upload de vidéos sur Youtube

Posté : jeu. 08 mars 2018 23:16
par clark17
Bonjour à tous,

Je suis un utilisateur très occasionnel de Autoit, excusez moi d'avance pour mes questions de débutant.

Je souhaite réaliser un petit script afin d'automatiser l'upload de vidéos sur youtube. A cette fin j'utilise l'excellent Youtube Uploader (https://github.com/porjo/youtubeuploader) programmé en Go. Aucun problème avec ce petit logiciel il fait bien son boulot.

Pour ce faire mon script devra effectuer les actions suivantes:
- Lister les fichiers avi, mp4, mkv
- Pour chaque fichier générer un fichier json contenant différentes informations comme le titre la date etc... provenant du nom de la vidéo
- lancer l’exécutable youtubeuploader avec les bons paramètres pour uploader les vidéos
- renommer le fichier traité en .bak ou modifier son titre

Déjà ce script vous parait-il faisable avec Autoit?
Ensuite dans le "design" de mon script j'imagine traité les fichiers 1 par 1 et attendre la fin de l'upload avant de passer au suivant, mais est-ce la bonne façon de faire?

Merci de votre aide.

Re: [..] Automatiser l'upload de vidéos sur Youtube

Posté : sam. 10 mars 2018 12:23
par clark17
Voilà où j'en suis actuellement:
#Include <Array.au3>
#Include <File.au3>
#Include <Date.au3>

;Renseignement sur le programme
Local $boite = MsgBox(1, "YoutubeUpload", "Placez vos vidéos dans le même répertoire puis OK.")
If $boite = 2 Then Exit

;Chargement de la liste des fichiers dans un tableau
Local $listevideos = _FileListToArrayRec(@ScriptDir, "*.avi;*.mp4;*.mkv")

;Découpage du nom du fichier
Local $tableaunom = StringSplit($listevideos[1], "-")

;Nettoyage du tableau
$tableaunom[1] = StringLeft($tableaunom[1], 4) ;Année
$tableaunom[2] = StringLeft($tableaunom[2], 2) ;Mois
$tableaunom[3] = StringLeft($tableaunom[3], 2) ;Jour
$tableaunom[5] = StringTrimLeft($tableaunom[5], 1) ;Nom de la vidéo
$tableaunom[5] = StringTrimRight($tableaunom[5], 4) ;Nom de la vidéo

;Affectation des variables utiles
Local $dateUS = $tableaunom[1] & "-" & $tableaunom[2] & "-" & $tableaunom[3]
Local $dateFR = $tableaunom[3] & "." & $tableaunom[2] & "." & $tableaunom[1]
Local $titrevideo = $tableaunom[5]

;Génére le fichier JSON
Local $fichierjson = StringTrimRight($listevideos[1], 3) & "json"
Filewrite($fichierjson, "{")

Local $hfichierjson = FileOpen($fichierjson, $FO_APPEND)

FileWriteLine($hfichierjson, ' "title": "' & $titrevideo & '",')
FileWriteLine($hfichierjson, ' "description": "",')
FileWriteLine($hfichierjson, ' "tags": ["tag1", "tag2", "tag3", "tag4", "tag5", "tag6"],')
FileWriteLine($hfichierjson, ' "privacyStatus": "private",')
FileWriteLine($hfichierjson, ' "embeddable": true,')
FileWriteLine($hfichierjson, ' "publicStatsViewable": true,')
FileWriteLine($hfichierjson, ' "recordingdate": "' & $dateUS & '",')
FileWriteLine($hfichierjson, ' "playlistIds": ["xxxxxxxxxxxxxxxx", "yyyyyyyyyyyyyyyyyyyyy"],')
FileWriteLine($hfichierjson, ' "language":  "fr"')
FileWriteLine($hfichierjson, "}")

FileClose($hfichierjson)

;Lance youtubeuploader avec les bons paramètres
Local $thumbnail = StringTrimRight($listevideos[1], 3) & "jpg"
MsgBox(0, "YoutubeUpload", " /k " & "youtubeuploader.exe -filename " & $listevideos[1] & " -metaJSON " & $fichierjson & " -thumbnail " & $thumbnail)
RunWait(@ComSpec & " /k " & "youtubeuploader.exe -filename " & $listevideos[1] & " -metaJSON " & $fichierjson & " -thumbnail " & $thumbnail)

;Message de réussite
MsgBox(0, "YoutubeUpload", "Upload vers Youtube terminé.")
Pour le moment je tente l'upload de la première vidéo seulement. La génération du Json est ok, par contre le lancement de youtubeuploader ne fonctionne pas. Voici le message affiché:
Image
Le fichier vidéo que je tente d'uploader est nommé comme ceci: 2018-12-27 (blabla) - blabla2 - titre.avi

Re: [..] Automatiser l'upload de vidéos sur Youtube  

Posté : sam. 10 mars 2018 12:42
par orax
À première vue, je dirais que c'est à cause des espaces dans le nom du fichier.

Code : Tout sélectionner

RunWait(@ComSpec & " /k " & "youtubeuploader.exe -filename """ & $listevideos[1] & """ -metaJSON " & $fichierjson & " -thumbnail " & $thumbnail)

Re: [..] Automatiser l'upload de vidéos sur Youtube

Posté : sam. 10 mars 2018 18:12
par clark17
Effectivement, je n'avais pas fait attention à cela. Il faut juste passer le paramètre à Youtubeuploader avec avec les "".
Voici le code corrigé:
RunWait(@ComSpec & " /k " & 'youtubeuploader.exe -filename "' & $listevideos[1] & '" -metaJSON "' & $fichierjson & '" -thumbnail "' & $thumbnail & '"')

Merci à vous!

Re: [..] Automatiser l'upload de vidéos sur Youtube

Posté : dim. 11 mars 2018 00:36
par clark17
Petite question au passage, le fonctionnement de Runwait n'est pas exactement celui que j'attendais. Il ouvre bien une fenêtre de commande et lance youtubeuploader, mais une fois l'upload terminé je dois fermer cette fenêtre pour continuer le script:
Image

Aurais-je zapper un paramètre avec RunWait ou alors une autre commande existe?

Re: [..] Automatiser l'upload de vidéos sur Youtube

Posté : dim. 11 mars 2018 00:48
par orax
Ce n'est pas lié à RunWait. Soit tu mets @ComSpec & " /c " & soit tu supprimes cette partie facultative.

Code : Tout sélectionner

RunWait('youtubeuploader.exe -filename "' & $listevideos[1] & '" -metaJSON "' & $fichierjson & '" -thumbnail "' & $thumbnail & '"')

Code : Tout sélectionner

C:\>cmd /?
Démarre une nouvelle instance de l’interpréteur de commandes de Windows

CMD [/A | /U] [/Q] [/D] [/E:ON | /E:OFF] [/F:ON | /F:OFF] [/V:ON | /V:OFF]
    [[/S] [/C | /K] chaîne]

/C      Exécute la commande donnée par la chaîne de caractères puis se termine.
/K      Exécute la commande donnée par la chaîne de caractères et reste actif.
...