2013-08-05 33 views
39

我想訪問shell命令的結果:如何使用YouTube-DL從Python程序

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

打印輸出direct url到文件;從一個python程序:

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

這可能嗎? 我試圖瞭解源的機制,但迷路:youtube_dl/__init__.pyyoutube_dl/youtube_DL.pyinfo_extractors ...

+0

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

+0

體面寫在這裏:HTTP:// willdrevo .COM /下載YouTube網站和-的SoundCloud音頻與 - 蟒蛇,和大熊貓/ – lollercoaster

回答

59

這並不難和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

我得到這個錯誤:進口youtube_dl 導入錯誤:沒有模塊youtube_dl – Ufoguy

+5

命名您必須安裝youtube_dl:如果你有點子實用程序(安裝它,sudo易於得到安裝python-PIP)你可以sudo的點子安裝YouTube-DL – JulienFr

+1

沒有那麼容易... – JulienFr

1

如果youtube-dl是一個終端程序,你可以使用subprocess模塊來訪問你想要的數據。

看看這個鏈接查看更多細節:Calling an external command in Python

+19

這是有點難過,從一個Python程序中調用Python程序,是不是? – JulienFr

+5

我認爲'youtube-dl'是一個用Python編寫的命令行程序,從命令行調用它看不出什麼錯誤。如果你想仔細閱讀源代碼,請隨時這樣做。 – 2013-08-05 12:17:22

+2

@Xaranke如果你從python中導入youtube-dl作爲模塊,你將擁有更多的控制權。從命令行解析打印數據並不可靠。 – Wally

4

這是一種方式。

我們設置選項字符串,在列表中,就像我們建立的命令行參數。在這種情況下opts=['-g', 'videoID']。然後,調用youtube_dl.main(opts)。通過這種方式,我們編寫我們的自定義.py模塊,import youtube_dl,然後調用main()函數。

2

我想這

from subprocess import call 

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