2017-09-04 4 views
0

Avec ce codeyoutube-dl ne pas accepter url playlist

import os 

with open('urls.txt') as f: 
    for line in f: 
      os.system("youtube-dl "+"--write-thumbnail "+"--skip-download "+"--yes-playlist " +line) 

La première image dans les téléchargements de playlist, puis je reçois un message d'erreur indiquant que « liste » est pas reconnu comme une commande interne ou ex terne, utilisable programme ou fichier batch. Dans 'urls.txt', j'ai juste une URL d'une playlist Youtube. L'URL est la suivante:

https://www.youtube.com/watch?v=GA3St3Rf9Gs&list=PL-uc0GihCvU9s24BT_mvTzt3zm7e2uDGm

C'est couper entrée après le symbole &. Si je remplace 'list' dans l'url par 'foo', je reçois le même message. Que dois-je faire pour que youtube-dl accepte l'URL de la playlist?

+0

Essayez de regarder [ce] (https://askubuntu.com/questions/334081/downloading-multiple-files-with-youtube- dl). Essayez également de mettre à jour le 'youtube-dl'. – campovski

Répondre

0

Vous pouvez utiliser la bibliothèque youtube_dl directement dans votre script et transmettre les URL à télécharger.

import os 
import youtube_dl 

ydl_opts = { 
    'writethumbnail': True, 
    'skip_download': True, 
    'noplaylist': False 
} 


with open('urls.txt') as f: 
    sources = f.readlines() 

with youtube_dl.YoutubeDL(ydl_opts) as ydl:  
    ydl.download(sources) 
0

Votre programme a une taille importante command injection security vulnerability. Vous avez déclenché cela (avec un code inoffensif) par accident. Vous exécutez

youtube-dl --write-thumbnail --skip-download --yes-playlist \ 
https://www.youtube.com/watch?v=GA3St3Rf9Gs&list=PL-uc0GihCvU9s24BT_mvTzt3zm7e2uDGm 

Depuis l'esperluette est un command character in shell scripts, vous utilisez deux commandes

youtube-dl --write-thumbnail --skip-download --yes-playlist \ 
    https://www.youtube.com/watch?v=GA3St3Rf9Gs 

et

list=PL-uc0GihCvU9s24BT_mvTzt3zm7e2uDGm 

Comme il n'y a pas de programme avec ce nom, la deuxième commande échouera probablement.

Pour résoudre ce problème, utilisez des invocations de sous-processus appropriés avec subprocess:

import subprocess 

with open('urls.txt') as f: 
    for line in f: 
     subprocess.check_call([ 
      "youtube-dl", 
      "--write-thumbnail", "--skip-download", "--yes-playlist", 
      line])