Jak używać youtube-dl z programu w Pythonie?

81

Chciałbym uzyskać dostęp do wyniku następującego polecenia powłoki,

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

wypisuje swoje dane wyjściowe direct urldo pliku z poziomu programu w Pythonie. Oto, czego próbowałem:

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

Czy to jest możliwe? Starałem się zrozumieć mechanizm w źródle ale zgubił: youtube_dl/__init__.py, youtube_dl/youtube_DL.py, info_extractors...

JulienFr
źródło
1
Przyzwoity napis
lollercoaster
2
@lollercoaster, ten adres URL jest martwy ... Naprawiono link tutaj .
s3cur3

Odpowiedzi:

140

To nie jest trudne i faktycznie udokumentowane :

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)
jaimeMF
źródło
3
Otrzymuję ten błąd: import youtube_dl ImportError: Brak modułu o nazwie youtube_dl
Ufoguy,
8
Musisz zainstalować youtube_dl: jeśli masz narzędzie pip (aby je zainstalować, sudo apt-get install python-pip), możesz zainstalować sudo pip youtube-dl
JulienFr
Jeśli nie masz modułu o nazwie youtube_dl na gentoo, możesz spróbować dodać "#! / Usr / bin / env python2.7" na początku pliku python.
puchu
9
Wiem, że to jest stare i istnieją inne odpowiedzi, ale tylko po to, aby wyjaśnić. W nowych wersjach youtube_dl nastąpiły pewne zmiany i zamiast video['url']tego zmieniono navideo['webpage_url']
DarkXDroid
4
Jaki jest cel with ydl:?
HelloGoodbye
5

Myślę, że dla prostego kodu

import os
os.system('youtube-dl [OPTIONS] URL [URL...]')

Powyżej jest po prostu uruchamianie wiersza poleceń w Pythonie.

Inne jest wspomniane w dokumentacji Używanie youtube-dl w Pythonie Oto sposób

from __future__ import unicode_literals
import youtube_dl

ydl_opts = {}
with youtube_dl.YoutubeDL(ydl_opts) as ydl:
    ydl.download(['https://www.youtube.com/watch?v=BaW_jenozKc'])

źródło
4

Oto sposób.

Ustawiamy ciąg opcji na liście, tak jak ustawiamy argumenty wiersza poleceń. W tym przypadku opts=['-g', 'videoID']. Następnie wywołaj youtube_dl.main(opts). W ten sposób piszemy nasz niestandardowy moduł .py, import youtube_dla następnie wywołujemy main()funkcję.

Myślę, więc jestem
źródło
tego rodzaju prace nic nie jest zwracane z funkcji głównej, więc nie można jeszcze naprawdę uzyskać jej wartości.
Anthony Chung,
-3

Jeśli youtube-dljest to program terminalowy, możesz użyć rozszerzeniasubprocess modułu, aby uzyskać dostęp do żądanych danych.

Sprawdź ten link, aby uzyskać więcej informacji: Wywołanie polecenia zewnętrznego w Pythonie

Społeczność
źródło
50
To trochę smutne, gdy nazywa się program w Pythonie z programu w Pythonie, prawda?
JulienFr
11
Uważam, że youtube-dljest to program wiersza poleceń napisany w Pythonie i nie widzę nic złego w wywoływaniu go z wiersza poleceń. Jeśli chcesz grzebać w kodzie źródłowym, zrób to swobodnie.
10
@Xaranke Masz dużo większą kontrolę, jeśli importujesz youtube-dl jako moduł z Pythona. Przetwarzanie wydrukowanych danych z wiersza poleceń nie jest tak niezawodne.
Wally,
Ośmielam się również spróbować użyć subprocess / os.system w tym poleceniu youtube-dl. W rzeczywistości nie działa zbyt dobrze ani zgodnie z przeznaczeniem, gdy próbuje się przekazać argumenty.
Izaac Corbett
-6

Chciałbym to

from subprocess import call

command = "youtube-dl https://www.youtube.com/watch?v=NG3WygJmiVs -c"
call(command.split(), shell=False)
Krishna Deepak
źródło