youtube-dl 只取 URL 的第一个字母?
youtube-dl taking only first letter of URL?
Whosebug!
我在使用 youtube-dl 时遇到一些问题。我最近有这个工作,但我对它做了一些改变,现在它拒绝工作。这是我的代码:
import youtube_dl
import os
class InvalidURL(Exception):
pass
class SongExists(Exception):
pass
def download(url):
try:
options = {
'format': 'bestaudio/best',
'quiet': False,
'extractaudio': True, # only keep the audio
'audioformat': "wav", # convert to wav
'outtmpl': '%(id)s.wav', # name the file the ID of the video
'noplaylist': True, # only download single song, not playlist
}
with youtube_dl.YoutubeDL(options) as ydl:
r = ydl.extract_info(url ,download=False)
if os.path.isfile(str(r["id"])):
raise SongExists('This song has already been requested.')
print("Downloading", r["title"])
print(str(url))
ydl.download(url)
print("Downloaded", r["title"])
return r["title"], r["id"]
except youtube_dl.utils.DownloadError:
raise InvalidURL('This URL is invalid.')
if __name__ == "__main__":
download("https://www.youtube.com/watch?v=nvHyII4Dq-A")
据我所知,我的脚本似乎从 URL 中取出了第一个字母。有谁知道为什么?作为 "Side-quest",有谁知道如何进行搜索而不是 URL?
这是我的输出:
[youtube] nvHyII4Dq-A: Downloading webpage
[youtube] nvHyII4Dq-A: Downloading video info webpage
[youtube] nvHyII4Dq-A: Extracting video information
WARNING: unable to extract uploader nickname
[youtube] nvHyII4Dq-A: Downloading MPD manifest
Downloading MagnusTheMagnus - Area
https://www.youtube.com/watch?v=nvHyII4Dq-A
ERROR: 'h' is not a valid URL. Set --default-search "ytsearch" (or run youtube-dl "ytsearch:h" ) to search YouTube
Traceback (most recent call last):
File "C:\Users\tyler\AppData\Local\Programs\Python\Python36-32\lib\site-packages\youtube_dl\YoutubeDL.py", line 776, in extract_info
ie_result = ie.extract(url)
File "C:\Users\tyler\AppData\Local\Programs\Python\Python36-32\lib\site-packages\youtube_dl\extractor\common.py", line 433, in extract
ie_result = self._real_extract(url)
File "C:\Users\tyler\AppData\Local\Programs\Python\Python36-32\lib\site-packages\youtube_dl\extractor\generic.py", line 1993, in _real_extract
% (url, url), expected=True)
youtube_dl.utils.ExtractorError: 'h' is not a valid URL. Set --default-search "ytsearch" (or run youtube-dl "ytsearch:h" ) to search YouTube
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "C:/Users/tyler/PycharmProjects/PythonSpeakerThing/downloader.py", line 26, in download
ydl.download(url)
File "C:\Users\tyler\AppData\Local\Programs\Python\Python36-32\lib\site-packages\youtube_dl\YoutubeDL.py", line 1958, in download
url, force_generic_extractor=self.params.get('force_generic_extractor', False))
File "C:\Users\tyler\AppData\Local\Programs\Python\Python36-32\lib\site-packages\youtube_dl\YoutubeDL.py", line 799, in extract_info
self.report_error(compat_str(e), e.format_traceback())
File "C:\Users\tyler\AppData\Local\Programs\Python\Python36-32\lib\site-packages\youtube_dl\YoutubeDL.py", line 604, in report_error
self.trouble(error_message, tb)
File "C:\Users\tyler\AppData\Local\Programs\Python\Python36-32\lib\site-packages\youtube_dl\YoutubeDL.py", line 574, in trouble
raise DownloadError(message, exc_info)
youtube_dl.utils.DownloadError: ERROR: 'h' is not a valid URL. Set --default-search "ytsearch" (or run youtube-dl "ytsearch:h" ) to search YouTube
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "C:/Users/tyler/PycharmProjects/PythonSpeakerThing/downloader.py", line 33, in <module>
download("https://www.youtube.com/watch?v=nvHyII4Dq-A")
File "C:/Users/tyler/PycharmProjects/PythonSpeakerThing/downloader.py", line 30, in download
raise InvalidURL('This URL is invalid.')
__main__.InvalidURL: This URL is invalid.
与 documented 一样,ydl.download
函数采用 list of URLs。所以而不是
ydl.download(url)
您想打电话给
ydl.download([url])
要运行进行搜索,首先,通过运行宁youtube-dl --extractor-descriptions | grep search
查找关键字。例如,Soundcloud 搜索的关键字是scsearch
,YouTube 默认搜索的关键字是ytsearch
。
然后,只需传递关键字和搜索词,以冒号 (:
) 分隔,如 URL.
例如,URL 的 ytsearch:fluffy bunnies
会根据默认搜索条件为您找到 YouTube 上毛茸茸的兔子的热门视频。
这是示例:
sound_list = []
# bike sound
sound_list.append('https://www.youtube.com/watch?v=sRdRwHPjJPk')
# car sound
sound_list.append('https://www.youtube.com/watch?v=PPdNb-XQXR8')
with youtube_dl.YoutubeDL(ydl_opts) as ydl:
ydl.download(sound_list)
Whosebug!
我在使用 youtube-dl 时遇到一些问题。我最近有这个工作,但我对它做了一些改变,现在它拒绝工作。这是我的代码:
import youtube_dl
import os
class InvalidURL(Exception):
pass
class SongExists(Exception):
pass
def download(url):
try:
options = {
'format': 'bestaudio/best',
'quiet': False,
'extractaudio': True, # only keep the audio
'audioformat': "wav", # convert to wav
'outtmpl': '%(id)s.wav', # name the file the ID of the video
'noplaylist': True, # only download single song, not playlist
}
with youtube_dl.YoutubeDL(options) as ydl:
r = ydl.extract_info(url ,download=False)
if os.path.isfile(str(r["id"])):
raise SongExists('This song has already been requested.')
print("Downloading", r["title"])
print(str(url))
ydl.download(url)
print("Downloaded", r["title"])
return r["title"], r["id"]
except youtube_dl.utils.DownloadError:
raise InvalidURL('This URL is invalid.')
if __name__ == "__main__":
download("https://www.youtube.com/watch?v=nvHyII4Dq-A")
据我所知,我的脚本似乎从 URL 中取出了第一个字母。有谁知道为什么?作为 "Side-quest",有谁知道如何进行搜索而不是 URL?
这是我的输出:
[youtube] nvHyII4Dq-A: Downloading webpage
[youtube] nvHyII4Dq-A: Downloading video info webpage
[youtube] nvHyII4Dq-A: Extracting video information
WARNING: unable to extract uploader nickname
[youtube] nvHyII4Dq-A: Downloading MPD manifest
Downloading MagnusTheMagnus - Area
https://www.youtube.com/watch?v=nvHyII4Dq-A
ERROR: 'h' is not a valid URL. Set --default-search "ytsearch" (or run youtube-dl "ytsearch:h" ) to search YouTube
Traceback (most recent call last):
File "C:\Users\tyler\AppData\Local\Programs\Python\Python36-32\lib\site-packages\youtube_dl\YoutubeDL.py", line 776, in extract_info
ie_result = ie.extract(url)
File "C:\Users\tyler\AppData\Local\Programs\Python\Python36-32\lib\site-packages\youtube_dl\extractor\common.py", line 433, in extract
ie_result = self._real_extract(url)
File "C:\Users\tyler\AppData\Local\Programs\Python\Python36-32\lib\site-packages\youtube_dl\extractor\generic.py", line 1993, in _real_extract
% (url, url), expected=True)
youtube_dl.utils.ExtractorError: 'h' is not a valid URL. Set --default-search "ytsearch" (or run youtube-dl "ytsearch:h" ) to search YouTube
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "C:/Users/tyler/PycharmProjects/PythonSpeakerThing/downloader.py", line 26, in download
ydl.download(url)
File "C:\Users\tyler\AppData\Local\Programs\Python\Python36-32\lib\site-packages\youtube_dl\YoutubeDL.py", line 1958, in download
url, force_generic_extractor=self.params.get('force_generic_extractor', False))
File "C:\Users\tyler\AppData\Local\Programs\Python\Python36-32\lib\site-packages\youtube_dl\YoutubeDL.py", line 799, in extract_info
self.report_error(compat_str(e), e.format_traceback())
File "C:\Users\tyler\AppData\Local\Programs\Python\Python36-32\lib\site-packages\youtube_dl\YoutubeDL.py", line 604, in report_error
self.trouble(error_message, tb)
File "C:\Users\tyler\AppData\Local\Programs\Python\Python36-32\lib\site-packages\youtube_dl\YoutubeDL.py", line 574, in trouble
raise DownloadError(message, exc_info)
youtube_dl.utils.DownloadError: ERROR: 'h' is not a valid URL. Set --default-search "ytsearch" (or run youtube-dl "ytsearch:h" ) to search YouTube
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "C:/Users/tyler/PycharmProjects/PythonSpeakerThing/downloader.py", line 33, in <module>
download("https://www.youtube.com/watch?v=nvHyII4Dq-A")
File "C:/Users/tyler/PycharmProjects/PythonSpeakerThing/downloader.py", line 30, in download
raise InvalidURL('This URL is invalid.')
__main__.InvalidURL: This URL is invalid.
与 documented 一样,ydl.download
函数采用 list of URLs。所以而不是
ydl.download(url)
您想打电话给
ydl.download([url])
要运行进行搜索,首先,通过运行宁youtube-dl --extractor-descriptions | grep search
查找关键字。例如,Soundcloud 搜索的关键字是scsearch
,YouTube 默认搜索的关键字是ytsearch
。
然后,只需传递关键字和搜索词,以冒号 (:
) 分隔,如 URL.
例如,URL 的 ytsearch:fluffy bunnies
会根据默认搜索条件为您找到 YouTube 上毛茸茸的兔子的热门视频。
这是示例:
sound_list = []
# bike sound
sound_list.append('https://www.youtube.com/watch?v=sRdRwHPjJPk')
# car sound
sound_list.append('https://www.youtube.com/watch?v=PPdNb-XQXR8')
with youtube_dl.YoutubeDL(ydl_opts) as ydl:
ydl.download(sound_list)