Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 31/10/2014, à 18:01

linewx

Petit script pour "automatiser" youtube-dl

Bonjour à tous,

Il y a peu j'ai découvert youtube-dl, un programme permettant de télécharger les vidéo ou audio sur Youtube et autres plateformes.
Lien officiel
Lien Ubuntu

Je voudrais créer un petit script permettant "d'automatiser" un peu plus Youtube-dl pour ainsi rentrer le lien de la playlist et télécharger et que le prog récupère le nom de la playlist, crée un dossier au nom de cette dernière et lance Youtube-dl dans ce répertoire.

Voici mon début de script  (je précise que c'est mon premier, j'ai commencé le python hier )

#!/usr/local/bin/python3.4m
# -*- python -*-
arglien = input('donner le lien a télécharger')

import os
os.mkdir('/home/linewx/Musique/',"arglien")

Premier problème : Je ne sais pas comment dire que arglien est un string et non le nom de du dossier.
Deuxieme problème : Pour récupérer le nom de la playlist j'ai pensé à ouvrir le view source de la page youtube, le titre se trouve dans <title> qui est toujours en ligne 33. N'y aurait il pas moyen de récupérer que le titre dans la page ?

Voila si quelqu'un pouvait me renseigner ce serait fabuleux smile

Merci d'avance et je suis a disposition pour des précisions que j'aurai probablement oublié

Hors ligne

#2 Le 31/10/2014, à 19:12

Hizoka

Re : Petit script pour "automatiser" youtube-dl

Premier problème : Je ne sais pas comment dire que arglien est un string et non le nom de du dossier.

os.mkdir('/home/linewx/Musique/arglien')

Deuxieme problème : Pour récupérer le nom de la playlist j'ai pensé à ouvrir le view source de la page youtube, le titre se trouve dans <title> qui est toujours en ligne 33. N'y aurait il pas moyen de récupérer que le titre dans la page ?

Regarde du coté de BeautifulSoup pour parser des pages.
Sinon tu "lis" la page ligne par ligne en recherchant "<title>" et apres tu récupères facilement le nom.


KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github

Hors ligne

#3 Le 31/10/2014, à 19:48

toitoinebzh

Re : Petit script pour "automatiser" youtube-dl

salut

ton projet a l'air bien sympa

et pour la programmation, il faut bien commencer un jour

en tout cas, je ne connais pas trop youtube, mais le logiciel a une doc qui peut t'aider

https://github.com/rg3/youtube-dl/

j'ai fait un test pour récupérer le titre d'une vidéo, par exemple

antoine@Frankenstein:~/Bureau$ youtube-dl --get-filename -o "%(title)s.%(ext)s"  http://www.youtube.com/watch?v=Rz5mjngf1Mg
Joueur du Grenier - Takeshi's Challenge - Partie 2 - FAMICOM.mp4

j'ai un peut modifié ton code, je pense que ça t'aidera à démarrer, ton projet est délicat surtout si tu n'as jamais fait de programmation auparavant

#!/usr/local/bin/python3.4m
# -*- python -*-


arglien = input('donner le lien a télécharger : \n')
#arglien="http://www.youtube.com/watch?v=Rz5mjngf1Mg"

import subprocess

# on recupere le titre
command = 'youtube-dl --get-filename -o "%(title)s" ' + arglien
titre = subprocess.check_output(command.split(), shell=False)
titre=titre.decode('utf-8')
titre=titre[1:-2]

print("\nla vidéo est : ")
print(titre)

# on définit le nom du dossier
nom_dossier = titre

import os
chemin='/home/antoine/Bureau/'+str(nom_dossier)+'/'
print("\nle chemin de destination est :")
print(chemin)
os.mkdir(chemin );

Hors ligne

#4 Le 31/10/2014, à 21:35

dragoon76

Re : Petit script pour "automatiser" youtube-dl

Salut,

Juste une petite réflexion.

youtube-dl me parait un peu obsolète, sachant qu'il est maintenant possible de télécharger les vidéos directement grâce au html5.

Pour le faire depuis un navigateur html5 , il suffit de faire un simple ctrl+s et ça va te sauvegarder toute la page et en particulier la vidéo au format webm.

Après il doit y avoir moyen de scripter ça.

Pierre.

Hors ligne

#5 Le 01/11/2014, à 13:07

linewx

Re : Petit script pour "automatiser" youtube-dl

Bonjour et merci de répondre aussi vite !

Alors premièrement quelques précisions que j'ai omis dans le premier post :
- Les deux avantages de Youtube-dl sont la possibilité de récupérer uniquement l'audio et de pouvoir télécharger une playlist complète sans avoir à rentrer le lien de chaque vidéos.
Je pense que sauvegarder en HTML5 risque d'être plus compliqué qu'avec youtube-dl.  (

-La commande permettant de télécharger les audio est : youtube-dl -ix --audio-format mp3 .    Elle se lance dans le terminal et je ne suis pas sur de pouvoir la lancer dans un script python.

- toitoinebzh merci beaucoup, je déchiffre ce que tu as fais et reviens juste après

Hors ligne

#6 Le 01/11/2014, à 15:45

linewx

Re : Petit script pour "automatiser" youtube-dl

Donc j'ai mofidié légèrement le script, je ne comprend pas trop ce qui se passe pour le titre.

#!/usr/local/bin/python3.4m
# -*- python -*-


arglien = input('donner le lien a télécharger : \n')
#arglien="https://www.youtube.com/watch?v=Bxfb9d7ucCA"

import subprocess

# on recupere le titre
command = 'youtube-dl -ix --audio-format mp3 --console-title ' + arglien
titre = subprocess.check_output(command.split(), shell = False)
titre=titre.decode('utf-8')
titre=titre[1:-2]

print('\nla vidéo est : ')
print(titre)

import os

# on définit le nom du dossier
nom_dossier = titre
os.mkdir('/home/linewx/Musique/nom_dossier')

print(titre) renvoie :

la vidéo est : 
[22;0t[youtube] Confirming age
[youtube] r2ShaMdKF6E: Downloading webpage
[youtube] r2ShaMdKF6E: Downloading video info webpage
[youtube] r2ShaMdKF6E: Extracting video information
[youtube] r2ShaMdKF6E: Downloading DASH manifest
[download] Destination: Bêtisier. Video courte-r2ShaMdKF6E.m4a
[download] 100% of 166.21KiB in 00:00
[avconv] Destination: Bêtisier. Video courte-r2ShaMdKF6E.mp3
Deleting original file Bêtisier. Video courte-r2ShaMdKF6E.m4a (pass -k to keep)

J'en conclue que je récupère pas bien le titre je vais essayer de chercher ailleurs..
De plus

os.mkdir('/home/linewx/Musique/nom_dossier')

renvoie un dossier nommé "nom_dossier" et non titre. Serait-ce car la variable "titre" est fausse ?

Hors ligne

#7 Le 01/11/2014, à 18:14

Hizoka

Re : Petit script pour "automatiser" youtube-dl

on s'est mal compris pour ton probleme de dossier je crois, toi tu veux ça :

os.mkdir('/home/linewx/Musique/{}'.format(titre))

il remplace le {} par le contenu de la variable titre
ou

os.mkdir('/home/linewx/Musique/' + titre)

pour ton soucis de titre, procéde par étape pour voir ce qu'il se passe:

# Il recupere le retour de la commande
titre = subprocess.check_output(command.split(), shell = False)
print("1ere etape :", titre)

# Il decode le texte en utf 8
titre=titre.decode('utf-8')
print("2e etape :", titre)

# Il affiche du caratere 1 (ça part de 0), et s'arrete 2 caracteres avant la fin : 
# Si titre = "Bonjour", titre[1:-2] => onjo
titre=titre[1:-2]
print("3e etape :", titre)

Dernière modification par Hizoka (Le 01/11/2014, à 18:14)


KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github

Hors ligne

#8 Le 01/11/2014, à 19:11

linewx

Re : Petit script pour "automatiser" youtube-dl

Ca faisait 4h que j'essayai de comprendre beautifulsoup sans succès.. mais la ton code marche on récupère bien le titre ! Le dossier a également le bon nom.

Seulement je ne peux pas changer de dossier :

# On change de dossier pour télécharger les fichiers
from os import chdir
chdir('home/linewx/Musique/{}'.format(titre))

Le terminal me sort une erreur :

Traceback (most recent call last):
  File "Youtubedl.py", line 32, in <module>
    chdir('home/linewx/Musique/{}'.format(titre))
FileNotFoundError: [Errno 2] No such file or directory: 'home/linewx/Musique/Video Courte qui fait vraiment peur -18'

Comment lui dire que titre est 'Video\ Courte\ qui\ fait\ vraiment\ peur\ -18/' et non 'Video Courte qui fait vraiment peur -18' ?

Je pense qu'une fois ce problème réglé tout marchera smile

Hors ligne

#9 Le 01/11/2014, à 21:14

k3c

Re : Petit script pour "automatiser" youtube-dl

Un petit script pour afficher le titre d'une vidéo Youtube

import requests
import bs4 as BeautifulSoup
import sys
r = requests.get(sys.argv[1])
soup = BeautifulSoup.BeautifulSoup(r.text)
print soup.title.text

tu auras besoin de requests

sudo pip install python-requests

et de BeautifulSoup

sudo pip install beautifulsoup4

ou

easy_install beautifulsoup4

exemple

gg@gg-P15SM-A-SM1-A:~$ python a.py https://www.youtube.com/watch?v=xsgEegHAQKQ
Renaud Lavillenie 6 08m Bydgoszcz Pedro's cup 2014, 2nd best vaulter of ever!! - YouTube
gg@gg-P15SM-A-SM1-A:~$ 

Dernière modification par k3c (Le 01/11/2014, à 21:19)


Archlinux sur Xiaomi Air 13

Hors ligne

#10 Le 01/11/2014, à 21:29

Hizoka

Re : Petit script pour "automatiser" youtube-dl

pour beautifulsoup4, il suffit d'installer le paquet pythonbs4 ou python3-bs4


KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github

Hors ligne

#11 Le 02/11/2014, à 02:59

linewx

Re : Petit script pour "automatiser" youtube-dl

Bon j'ai essayé plusieurs trucs, (plus j'avance moins mais bon ahah)
J'ai un nouveau problème, récupérer le nom d'une playlist, qui diffère du nom de la vidéo.

	# Il récupère le retour de la commande
command = 'youtube-dl --get-filename -o "%(playlist)s" ' + arglien

titre = subprocess.check_output(command.split(), shell = False)
#print("1ere etape :", titre)
# Il decode le texte en utf 8
titre=titre.decode('utf-8')
#print(titre)

length_titre = len(titre)
print(length_titre)
command = 'youtube-dl -s -A ' + arglien # est sencé récupérer le nombre de vidéo
nb_vid = subprocess.check_output(command.split(), shell = False)
#print(nb_vid)
arg1 = "Ambient : Collected"  # chaine de caractères située avant le nombre de vidéo
x = nb_vid.find(arg1);
#print(nb_vid.find(arg1))

Il me rend :

TypeError: Type str doesn't support the buffer API

Je ne comprend pas pourquoi j'ai cette erreur

Hors ligne

#12 Le 02/11/2014, à 11:43

toitoinebzh

Re : Petit script pour "automatiser" youtube-dl

salut

essaye de mettre

nb_vid=nb_vid.decode('utf-8')

juste avant ta détermination de x

je te conseille de mettre le code en entier, avec un exemple de lien pour tes prochains posts

pour info

command = 'youtube-dl --get-filename -o "%(playlist)s" ' + arglien  # permet de définir ta commande
titre = subprocess.check_output(command.split(), shell = False) # lance la commande et stocke le résultat dans titre

Dernière modification par toitoinebzh (Le 02/11/2014, à 11:45)

Hors ligne

#13 Le 02/11/2014, à 12:19

k3c

Re : Petit script pour "automatiser" youtube-dl

tu peux donner un exemple de vidéo et de playlist ?

La playlist, c'est défini par toi, ou toute vidéo contient une playlist ?


Archlinux sur Xiaomi Air 13

Hors ligne

#14 Le 02/11/2014, à 12:47

linewx

Re : Petit script pour "automatiser" youtube-dl

Merci à tous pour vos réponses, j'essaye de me démerder un peu tout seul pour vous pas solliciter toutes les 30 sec wink

Une playlist c'est  un regroupement de plusieurs vidéos :
playlist : https://www.youtube.com/watch?v=ATqEpJ6 … jn-w3WJ_71
vidéo : https://www.youtube.com/watch?v=ERJapihJk7w

Non c'est définit par la personne qui a crée la playlist sur Youtube et qui a décidé de mettre plusieurs vidéos enseble afin de pas avoir a changer de page a la fin de chaque vidéo.



Voici l'ébauche de code, pas mal de chose sont mise en commentaire pour gagner du temps au lancement.

#!/usr/local/bin/python3.4m
# -*- coding: utf-8 -*-

import subprocess
import os
import re

#arglien = input('donner le lien a télécharger : \n')
arglien="https://www.youtube.com/watch?v=ATqEpJ6x1C4&list=PLDfKAXSi6kUZczwycO8UcABjn-w3WJ_71"

#Test playlist ou vidéo
#test = input('Est-ce une vidéo (True) ou une playlist (False) ?  \n')



#if test is True :  # On applique à une vidéo seule   ===>> Pour une vidé seule c'est fonctionnel
	
#	command = 'youtube-dl --get-filename -o "%(title)s" ' + arglien
#	titre = subprocess.check_output(command.split(), shell = False)
	#print("1ere etape :", titre)

	# Il decode le texte en utf 8
#	titre=titre.decode('utf-8')
#	print( titre)

	# Il affiche du caratere 1 (ça part de 0), et s'arrete 2 caracteres avant la fin : 
#	 Si titre = "Bonjour", titre[1:-2] => onjo
#	titre=titre[1:-2]
#	print("le titre est :", titre)
	

#if test is False :    # On applique à une playlist
	# Il récupère le retour de la commande
command = 'youtube-dl -s --get-filename -o "%(playlist)s" ' + arglien  #Définit la commande

titre = subprocess.check_output(command.split(), shell = False)  # lance la commande et stocke le résultat dans titre
titre=titre.decode('utf-8')  # Il decode le texte en utf 8


length_titre = len(titre) # Le titre est ecrit x fois, avec x nombre de vidéo. La longueur / par x donnera le vrai titre

command = 'youtube-dl -s -A --no-post-overwrites --no-post-overwrites  ' + arglien # Définit la commande
nb_vid = subprocess.check_output(command.split(), shell = False)  # string contenant le nombre de vidéo
nb_vid = nb_vid.decode('utf-8')
nb_vid = nb_vid[1:55] #Gardons une petite partie, celle qui contient le nb de video


nb_vid = re.findall('\d+', nb_vid)[0]  #récupère le nb de vidéo
nb_vid = float(nb_vid) #float pour passer de string à nombre

titre  = titre[1 : length_titre / nb_vid]
print(titre)





# on définit le nom du dossier
#os.mkdir("/home/linewx/Musique/"+ titre)

# On change de dossier pour télécharger les fichiers
#from os import chdir
#titre = titre.split("\ ")
#chdir('home/linewx/Musique/{}'.format(titre))

# Est-ce dans le bon dossier ?
#rep_cour = os.getcwd()
#print(rep_cour)

#command = 'youtube-dl -ix --audio-format mp3 --console-title ' + arglien

Hors ligne

#15 Le 02/11/2014, à 21:22

linewx

Re : Petit script pour "automatiser" youtube-dl

En fait c'est marrant de coder avec python, bien plus que sur matlab ou Octave !

#!/usr/local/bin/python3.4m
# -*- coding: utf-8 -*-

import subprocess
import os


#arglien = input('donner le lien a télécharger : \n')
arglien="http://www.youtube.com/playlist?list=PLDfKAXSi6kUZczwycO8UcABjn-w3WJ_71"

#Test playlist ou vidéo
#test = input('Est-ce une vidéo (True) ou une playlist (False) ?  \n')



#if test is True :  # On applique à une vidéo seule   ===>> Pour une vidé seule c'est fonctionnel
	
#	command = 'youtube-dl --get-filename -o "%(title)s" ' + arglien
#	titre = subprocess.check_output(command.split(), shell = False)
	#print("1ere etape :", titre)

	# Il decode le texte en utf 8
#	titre=titre.decode('utf-8')
#	print( titre)

	# Il affiche du caratere 1 (ça part de 0), et s'arrete 2 caracteres avant la fin : 
#	 Si titre = "Bonjour", titre[1:-2] => onjo
#	titre=titre[1:-2]
#	print("le titre est :", titre)
	

#if test is False :    # On applique à une playlist
	# Il récupère le retour de la commande
command = 'youtube-dl -s --get-filename -o "%(playlist)s" ' + arglien  #Définit la commande

titre = subprocess.check_output(command.split(), shell = False)  # lance la commande et stocke le résultat dans titre
titre=titre.decode('utf-8')  # Il decode le texte en utf 8


length_titre = len(titre) # Le titre est ecrit nb_vid fois, avec nb_vid nombre de vidéo. La longueur / par nb_vid donnera le vrai titre
print('length_titre',length_titre)
command = 'youtube-dl -s -A --no-post-overwrites --no-post-overwrites  ' + arglien # Définit la commande
nb_vid = subprocess.check_output(command.split(), shell = False)  # string contenant le nombre de vidéo
nb_vid = nb_vid.decode('utf-8')
#print(nb_vid)


import re
nb_lign = nb_vid.find('[download] Downloading video #1 of ') # On cherche la phrase situé le nombre de vidéo dans nb_vid
print('nb_lign',nb_lign)

nb_vid = nb_vid[nb_lign + 35 : nb_lign + 39] # on garde juste 4 caracèteres (une playlist fait rarement plus de 1000 vidéos )
nb_vid = re.findall('\d+', nb_vid)[0]  #récupère le nb de vidéo
nb_vid = float(nb_vid) #float pour passer de string à nombre
print('nb_vid',nb_vid)

fin_carac = int(length_titre/ nb_vid) # Calculons la valeur du dernier caractère du titre
print('fin_carac',fin_carac)

fin_carac = fin_carac - 2 
print('fin_carac',fin_carac)

titre  = titre[1 : fin_carac] # on récupère juste une fois le titre et on enlève les guillemets
print('titre',titre)




# on définit le nom du dossier
nb_titre= titre.count(' ') +1  # il y 3 espaces (dans la phrase de gauche par exemple) et donc il ya 4 mots
print(nb_titre)

os.mkdir("/home/linewx/Musique/"+ titre)  # Création du dossier au nom de la playlist

# On change de dossier pour télécharger les fichiers
from os import chdir
titree = str(0)
titre = titre.split()
for i in nb_titre :
	titree = titree +  "\ " + titre(i)

#print titre.count(str)
#print(titre)
#chdir('home/linewx/Musique/{}'.format(titre))

# Est-ce dans le bon dossier ?
rep_cour = os.getcwd()
print(rep_cour)

#command = 'youtube-dl -ix --audio-format mp3 --console-title ' + arglien

J'ai un petit soucis ici :
Je voudrais transformer titre = nom de la playlist              en   titre = nom\ de\ la\ playlist\ 

J'essaye avec split mais ca marche pas trop comme je veux..Une idée ? smile

# on définit le nom du dossier
nb_titre= titre.count(' ') +1  # il y 3 espaces (dans la phrase de gauche par exemple) et donc il ya 4 mots
print(nb_titre)

os.mkdir("/home/linewx/Musique/"+ titre)  # Création du dossier au nom de la playlist

# On change de dossier pour télécharger les fichiers
from os import chdir
titree = str(0)
titre = titre.split()
for i in nb_titre :
	titree = titree +  "\ " + titre(i)

Hors ligne

#16 Le 03/11/2014, à 08:50

k3c

Re : Petit script pour "automatiser" youtube-dl

Un exemple basique dans IDLE (sous Windows)

>>> a = "nom"
>>> b = "de"
>>> c = "la"
>>> d = "playlist"
>>> print a + " " + b + " " + c + " " + d
nom de la playlist
>>> 

sinon, regarde ce que fait

join

en Python

Un exemple
http://sametmax.com/pourquoi-join-en-python/]


Archlinux sur Xiaomi Air 13

Hors ligne

#17 Le 03/11/2014, à 12:42

Hizoka

Re : Petit script pour "automatiser" youtube-dl

K3C, ça ne marchera pas pour lui, il est en python3.

>>> a = "nom"
>>> b = "de"
>>> c = "la"
>>> d = "playlist"
>>> print(a + " " + b + " " + c + " " + d)
nom de la playlist
>>> print(a, b, c, d)
nom de la playlist

>>> text = "nom de la playlist".replace(" ", "\ ")
>>> print(text)
nom\ de\ la\ playlist

KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github

Hors ligne

#18 Le 03/11/2014, à 12:42

linewx

Re : Petit script pour "automatiser" youtube-dl

L'ennui c'est que le nombre de mots dans le nom diffère et je ne vois pas comment ecrire une for ( notamment   savoir combien de variable a,b,c,d je vais avoir besoin)


join fonctionne  pour créer la variable, ne veut pas y accéder avec chdir:

# On change de dossier pour télécharger les fichiers
from os import chdir

titr_che = titre.split()
print('titre coupé', titr_che)
titr_che = '\ '.join(titr_che)


print('chemin :',titr_che)
chdir('home/linewx/Musique/{}'.format(titr_che))

Il me renvoie ca:

titre coupé ['Chill', 'Out', '_', 'Ambient']
chemin : Chill\ Out\ _\ Ambient
Traceback (most recent call last):
  File "Youtubedl.py", line 84, in <module>
    chdir('home/linewx/Musique/{}'.format(titr_che))
FileNotFoundError: [Errno 2] No such file or directory: 'home/linewx/Musique/Chill\\ Out\\ _\\ Ambient'

Il me rajoute un '\' en plus et je ne vois pas comment le supprimer. Un idée s'il vous plait ?
en sachant que si je remplace

titr_che = '\ '.join(titr_che)

   par

titr_che = ' '.join(titr_che)

Il ne me met aucun '\' dans le chemin d'accès

Hors ligne

#19 Le 03/11/2014, à 12:47

Hizoka

Re : Petit script pour "automatiser" youtube-dl

je redis car tu n'as pas du remarquer mon message :

>>> text = "nom de la playlist".replace(" ", "\ ")
>>> print(text)
nom\ de\ la\ playlist

KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github

Hors ligne

#20 Le 03/11/2014, à 13:01

linewx

Re : Petit script pour "automatiser" youtube-dl

C'est le me problème, j'arrive a obtenir

text = nom\ de\ la\ playlist

mais quand je veux changer de dossier

chdir('home/linewx/Musique/{}'.format(text))

Je ne comprend pas pourquoi mais il veut aller au dossier. Il double les back slash.

'home/linewx/Musique/Chill\\ Out\\ _\\ Ambient'

Hors ligne

#21 Le 03/11/2014, à 13:35

Hizoka

Re : Petit script pour "automatiser" youtube-dl

je pige pas pourquoi tu veux des \, python va comprendre les espaces dans les dossiers ?!


KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github

Hors ligne

#22 Le 03/11/2014, à 13:43

linewx

Re : Petit script pour "automatiser" youtube-dl

Non justement il me sort :
avec

titre = Chill Out _ Ambient

FileNotFoundError: [Errno 2] No such file or directory: 'home/linewx/Musique/Chill Out _ Ambient'

Hors ligne

#23 Le 03/11/2014, à 13:59

Hizoka

Re : Petit script pour "automatiser" youtube-dl

>>> titre = "Chill Out _ Ambient"
>>> import os
>>> os.mkdir("/home/hizoka/" + titre)
>>> os.chmod("/home/hizoka/" + titre, 777)

donc ca vient de ta facon de recup titre, il te manque des " ?! montre juste comment tu fais pour récupérer cette valeur.


KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github

Hors ligne

#24 Le 03/11/2014, à 18:49

linewx

Re : Petit script pour "automatiser" youtube-dl

script complet :

arglien="http://www.youtube.com/playlist?list=PLDfKAXSi6kUZczwycO8UcABjn-w3WJ_71"
command = 'youtube-dl -s --get-filename -o "%(playlist)s" ' + arglien  #Définit la commande

titre = subprocess.check_output(command.split(), shell = False)  # lance la commande et stocke le résultat dans titre
titre=titre.decode('utf-8')  # Il decode le texte en utf 8


length_titre = len(titre) # Le titre est ecrit nb_vid fois, avec nb_vid nombre de vidéo. La longueur / par nb_vid donnera le vrai titre
#print('length_titre',length_titre)
command = 'youtube-dl -s -A --no-post-overwrites --no-post-overwrites  ' + arglien # Définit la commande
nb_vid = subprocess.check_output(command.split(), shell = False)  # string contenant le nombre de vidéo
nb_vid = nb_vid.decode('utf-8')
#print(nb_vid)


import re
nb_lign = nb_vid.find('[download] Downloading video #1 of ') # On cherche la phrase situé le nombre de vidéo dans nb_vid
#print('nb_lign',nb_lign)

nb_vid = nb_vid[nb_lign + 35 : nb_lign + 39] # on garde juste 4 caracèteres (une playlist fait rarement plus de 1000 vidéos )
nb_vid = re.findall('\d+', nb_vid)[0]  #récupère le nb de vidéo
nb_vid = float(nb_vid) #float pour passer de string à nombre
#print('nb_vid',nb_vid)

fin_carac = int(length_titre/ nb_vid) # Calculons la valeur du dernier caractère du titre
#print('fin_carac',fin_carac)

fin_carac = fin_carac - 1 
#print('fin_carac',fin_carac)

titre_dos  = titre[0 : fin_carac] 
titre = titre[1 : fin_carac-1] # on récupère juste une fois le titre #et on enlève les guillemets
print('titre_dos :',titre_dos)


# On change de dossier pour télécharger les fichiers
os.mkdir("/home/linewx/Musique/" + titre)  # Création du dossier au nom de la playlist
os.chmod("home/linewx/Musique/" + titre_dos,777)

# Est-ce dans le bon dossier ?
rep_cour = os.getcwd()
print(rep_cour)

#command = 'youtube-dl -ix --audio-format mp3 --console-title ' + arglien

J'ai donc bien

 titre _dos= "Chill Out _ Ambient"

Mais le soucis reste le même..

titre_dos : "Chill Out _ Ambient"
Traceback (most recent call last):
  File "Youtubedl.py", line 84, in <module>
    os.chmod("home/linewx/Musique/" + titre_dos,777)
FileNotFoundError: [Errno 2] No such file or directory: 'home/linewx/Musique/"Chill Out _ Ambient"'

Dernière modification par linewx (Le 03/11/2014, à 18:57)

Hors ligne

#25 Le 03/11/2014, à 19:08

melixgaro

Re : Petit script pour "automatiser" youtube-dl

salut,
l'erreur te dit que le dossier n'existe pas. ce qui me paraît normal puisqu'on lit

os.mkdir("/home/linewx/Musique/" + titre)

alors que ça devrait être

os.mkdir("/home/linewx/Musique/" + titre_dos)

Ensuite, je ne vois pas pourquoi tu fais un chmod sur le dossier. Ça ne me paraît pas nécessaire du tout.

Enfin, je conseille de nettoyer le nom du futur dossier. Par exemple pour les espaces :

titre_dos.replace(' ', '_')

mais il faudrait s'occuper des accents, des caractères spéciaux (!, ?, ...)


Linux depuis ~2007. Xubuntu seulement.

Hors ligne