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 url
do 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
...
python
youtube-dl
JulienFr
źródło
źródło
Odpowiedzi:
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)
źródło
video['url']
tego zmieniono navideo['webpage_url']
with ydl:
?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
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łajyoutube_dl.main(opts)
. W ten sposób piszemy nasz niestandardowy moduł .py,import youtube_dl
a następnie wywołujemymain()
funkcję.źródło
Jeśli
youtube-dl
jest 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
źródło
youtube-dl
jest 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.Chciałbym to
from subprocess import call command = "youtube-dl https://www.youtube.com/watch?v=NG3WygJmiVs -c" call(command.split(), shell=False)
źródło