2013-08-05 5 views
39

verwenden, würde ich das Ergebnis der Shell-Befehl zugreifen möchte:Wie youtube-dl von einem Python-Programm

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

seinen Ausgang direct url Datei zu drucken; aus einem Python-Programm:

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

Ist das möglich? Ich habe versucht, den Mechanismus in der Quelle zu verstehen, bekam aber verloren: youtube_dl/__init__.py, youtube_dl/youtube_DL.py, info_extractors ...

+0

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

+0

Decent write-up hier: http: // willdrevo .com/downloading-youtube-und-soundcloud-audio-mit-python-und-pandas/ – lollercoaster

Antwort

59

Es ist nicht schwer und 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

Ich erhalte diesen Fehler: Import youtube_dl ImportError: Kein Modul namens youtube_dl – Ufoguy

+5

Sie müssen die youtube_dl installieren: Wenn Sie das Pip-Dienstprogramm haben (um es zu installieren, Sudo apt-get Python-pip installieren) können Sie Sudo pip install youtube-dl – JulienFr

+1

Nicht so einfach ... – JulienFr

1

Wenn youtube-dl ein Terminalprogramm ist, können Sie das subprocess Modul verwenden, um die Daten, die Sie zugreifen möchten.

Schauen Sie sich diesen Link für weitere Informationen: Calling an external command in Python

+19

Das ist ein bisschen traurig, ein Python-Programm von einem Python-Programm zu nennen, nicht wahr? – JulienFr

+5

Ich betrachte 'youtube-dl' als ein in Python geschriebenes Befehlszeilenprogramm und sehe nichts falsch daran, es über die Befehlszeile aufzurufen. Wenn Sie mit dem Quellcode herumspielen möchten, können Sie dies gerne tun. –

+2

@Xaranke Sie haben viel mehr Kontrolle, wenn Sie youtube-dl als Modul aus Python importieren. Das Analysieren gedruckter Daten von der Befehlszeile ist nirgendwo so zuverlässig. – Wally

4

Hier ist eine Möglichkeit.

Wir richten Optionen in einer Liste ein, genau wie wir Befehlszeilenargumente eingerichtet haben. In diesem Fall opts=['-g', 'videoID']. Rufen Sie dann youtube_dl.main(opts) auf. Auf diese Weise schreiben wir unser benutzerdefiniertes .py-Modul, import youtube_dl, und rufen dann die main()-Funktion auf.

2

würde ich diese

mag
from subprocess import call 

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