2013-08-05 17 views
39

Ben kabuk komutunun sonucunu erişmek istiyorum:bir piton programından youtube-dl nasıl kullanılır

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

dosyasına çıkışını direct url yazdırmak için; bir piton programı içinden:

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

olması mümkün mü? Ben kaynakta mekanizmasını anlamaya çalıştı ama var kaybetti: youtube_dl/__init__.py, youtube_dl/youtube_DL.py, info_extractors ...

+0

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

+0

İyi yazma-up burada: http: // willdrevo .com/download-youtube-ve-soundcloud-ses-python-ve-pandalar/ – lollercoaster

cevap

59
Hiç zor değil

ve actually documented: Burada

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

Bu hatayı alıyorum: import youtube_dl ImportError: youtube_dl adında bir modül yok – Ufoguy

+5

youtube_dl'yi yüklemelisiniz: pip yardımcı programınız varsa (yüklemek için sudo apt-get install python-pip) sudo pip'e youtube-dl'yi kurun – JulienFr

+1

Hayır bu kadar kolay ... – JulienFr

1

youtube-dl bir terminal programı ise, istediğiniz verilere erişmek için subprocess modülünü kullanabilirsiniz. Daha fazla ayrıntı için bu bağlantıyı dışarı

Kontrol: Calling an external command in Python

+19

Bir python programını bir python programından çağırmak biraz üzücü, değil mi? – JulienFr

+5

"youtube-dl" yi Python'da yazılmış bir komut satırı programı olarak görüyorum ve komut satırından çağırmakla ilgili yanlış bir şey göremiyorum. Kaynak koduyla uğraşmak isterseniz, lütfen çekinmeyin. –

+2

@Xaranke Eğer youtube-dl'yi python'dan bir modül olarak alırsanız çok daha fazla kontrole sahipsiniz. Yazdırılan verileri komut satırından ayrıştırmak güvenilir değil. – Wally

4

bir yoldur.

Komut satırı argümanlarını düzenlediğimiz gibi, bir dizide 'string' seçeneklerini hazırlarız. Bu durumda opts=['-g', 'videoID']. Ardından, youtube_dl.main(opts)'u çağırın. Bu şekilde, özel .py modülümüzü, import youtube_dl yazıp main() işlevini çağırıyoruz.

2

Ben youtube-dl zaten yüklü olduğu Unix sisteminde alt işlemi kullanarak bu

from subprocess import call 

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