2013-08-05 14 views
39

Vorrei accedere al risultato del comando di shell:Come usare youtube-dl da un programma Python

youtube-dl -g "www.youtube.com..." 

per stampare la sua uscita direct url su file; dall'interno di un programma python:

import youtube-dl 
fromurl="www.youtube.com ...." 
geturl=youtube-dl.magiclyextracturlfromurl(fromurl) 

È possibile? ho cercato di capire il meccanismo della fonte, ma si è perso: youtube_dl/__init__.py, youtube_dl/youtube_DL.py, info_extractors ...

+0

http://stackoverflow.com/questions/89228/calling-an-external-command-in-python –

+0

dignitoso write-up qui: http: // willdrevo .com/download-youtube-and-soundcloud-audio-with-python-and-pandas/ – lollercoaster

risposta

59

Non è difficile e actually documented:

import youtube_dl 

ydl = youtube_dl.YoutubeDL({'outtmpl': '%(id)s%(ext)s'}) 

with ydl: 
    result = ydl.extract_info(
     'http://www.youtube.com/watch?v=BaW_jenozKc', 
     download=False # We just want to extract the info 
    ) 

if 'entries' in result: 
    # Can be a playlist or a list of videos 
    video = result['entries'][0] 
else: 
    # Just a video 
    video = result 

print(video) 
video_url = video['url'] 
print(video_url) 
+3

Ho ricevuto questo errore: import youtube_dl ImportError: nessun modulo denominato youtube_dl – Ufoguy

+5

Devi installare youtube_dl: se hai l'utilità pip (per installarlo, sudo apt-get install python-pip) puoi sudo pip installa youtube-dl – JulienFr

+1

Non è facile ... – JulienFr

1

Se youtube-dl è un programma terminale, è possibile utilizzare il modulo subprocess per accedere ai dati che si desidera.

Dai un'occhiata a questo link per maggiori informazioni: Calling an external command in Python

+19

È un po 'triste chiamare un programma python da un programma python, non è vero? – JulienFr

+5

Considero 'youtube-dl' un programma da riga di comando scritto in Python e non vedo nulla di sbagliato nel chiamarlo dalla riga di comando. Se vuoi lasciare il codice sorgente, non esitare a farlo. –

+2

@Xaranke Hai molto più controllo se importi youtube-dl come modulo da python. L'analisi dei dati stampati dalla riga di comando non è mai affidabile. – Wally

4

Ecco un modo.

Abbiamo impostato la stringa 'opzioni', in un elenco, proprio come abbiamo impostato gli argomenti della riga di comando. In questo caso opts=['-g', 'videoID']. Quindi, invoca youtube_dl.main(opts). In questo modo, scriviamo il nostro modulo .py personalizzato, import youtube_dl e quindi invochiamo la funzione main().

2

Vorrei che questo

from subprocess import call 

command = "youtube-dl https://www.youtube.com/watch?v=NG3WygJmiVs -c" 
call(command.split(), shell=False) 
Problemi correlati