我有以下形式的鏈接:提出請求下載一個視頻在Python
http://youtubeinmp3.com/fetch/?video=LINK_TO_YOUTUBE_VIDEO_HERE
如果你把這種類型的鏈接在<a>
標籤在網頁上,點擊它們將下載YouTube的MP3視頻在鏈接的結尾。來源是here。
我想通過發佈請求(或類似的東西)來從命令行模擬此過程,但我不確定如何在Python中執行此操作!我能否得到任何建議,或者比我想要的更難?
我有以下形式的鏈接:提出請求下載一個視頻在Python
http://youtubeinmp3.com/fetch/?video=LINK_TO_YOUTUBE_VIDEO_HERE
如果你把這種類型的鏈接在<a>
標籤在網頁上,點擊它們將下載YouTube的MP3視頻在鏈接的結尾。來源是here。
我想通過發佈請求(或類似的東西)來從命令行模擬此過程,但我不確定如何在Python中執行此操作!我能否得到任何建議,或者比我想要的更難?
正如Mark Ma所提到的那樣,您可以在不離開標準庫的情況下通過使用urllib2
來完成它。我喜歡用Requests,所以我做這件事:
import os
import requests
dump_directory = os.path.join(os.getcwd(), 'mp3')
if not os.path.exists(dump_directory):
os.makedirs(dump_directory)
def dump_mp3_for(resource):
payload = {
'api': 'advanced',
'format': 'JSON',
'video': resource
}
initial_request = requests.get('http://youtubeinmp3.com/fetch/', params=payload)
if initial_request.status_code == 200: # good to go
download_mp3_at(initial_request)
def download_mp3_at(initial_request):
j = initial_request.json()
filename = '{0}.mp3'.format(j['title'])
r = requests.get(j['link'], stream=True)
with open(os.path.join(dump_directory, filename), 'wb') as f:
print('Dumping "{0}"...'.format(filename))
for chunk in r.iter_content(chunk_size=1024):
if chunk:
f.write(chunk)
f.flush()
它是那麼微不足道遍歷的YouTube視頻的鏈接列表,並通過他們爲dump_mp3_for()
一個接一個。
for video in ['http://www.youtube.com/watch?v=i62Zjga8JOM']:
dump_mp3_for(video)
您的編輯不正確。 Python 2還支持'with'上下文管理器。 – MattDMo
我沒有意識到這一點。固定。 –
在其API Doc,它提供了URL的一個版本,它返回下載鏈接爲JSON:http://youtubeinmp3.com/fetch/?api=advanced&format=JSON&video=http://www.youtube.com/watch?v=i62Zjga8JOM
OK,然後我們可以使用的urllib2調用API並獲取API的結果,然後用json.loads反序列化()並再次使用urllib2下載mp3文件。
import urllib2
import json
r = urllib2.urlopen('http://youtubeinmp3.com/fetch/?api=advanced&format=JSON&video=http://www.youtube.com/watch?v=i62Zjga8JOM')
content = r.read()
# extract download link
download_url = json.loads(content)['link']
download_content = urllib2.urlopen(download_url).read()
# save downloaded content to file
f = open('test.mp3', 'wb')
f.write(download_content)
f.close()
注意文件應該用'wb'模式打開,否則mp3文件不能正常播放。 如果文件很大,下載將是一個耗時的過程。這裏有一篇文章介紹如何使用
標準庫中有一個功能可以完成這個功能。 –
太棒了。有什麼功能? – user3757174