是否有一个实用工具可以从命令行搜索YouTube,然后根据用户输入查看或下载搜索结果?
$ youtube-search madonna
1 Madonna - Hung Up (Official Music Video)
madonna ♩ 180M views 9 years ago
https://www.youtube.com/watch?v=EDwb9jOVRtU
"Hung Up" by Madonna from Confessions On A Dance Floor, available now.
2 Madonna - Like A Prayer (Official Music Video)
madonna ♩ 69M views 9 years ago
https://www.youtube.com/watch?v=79fzeNUqQbQ
2006 WMG Like A Prayer.
etc.然后你可以进入:
到目前为止我尝试过的是:
谷歌人部分地与YouTube一起工作,但出于某种原因,在搜索“麦当娜”时只显示了两个搜索结果。此外,在视图和下载之间也没有选择。
youtube-dl有一个搜索函数,但似乎不打印搜索结果,也不接受用户输入。youtube-dl -j ytsearch:madonna列出了有关搜索结果的元数据,但似乎没有包含所需的视频链接、标题和描述。
发布于 2019-01-22 19:44:41
基于硒的解决方案:
#!/usr/bin/env python
from pyvirtualdisplay import Display
from selenium import webdriver
import time
import argparse
import re
import subprocess
class bcolors:
BLUE = '\033[94m'
GREEN = '\033[92m'
ENDC = '\033[0m'
BOLD = '\033[1m'
pattern1=re.compile("v:[0-9]");
pattern2=re.compile("d:[0-9](-[0-9])?$")
parser = argparse.ArgumentParser()
parser.add_argument("query", help="enter the youtube search query here")
args = parser.parse_args()
query=args.query
display = Display(visible=0, size=(800, 600))
display.start()
driver = webdriver.Chrome() # Optional argument, if not specified will search path.
driver.get('https://youtube.com');
search_box = driver.find_element_by_name('search_query')
search_box.send_keys(query)
search_box.submit()
i=1
page = driver.find_elements_by_css_selector("ytd-video-renderer.ytd-item-section-renderer")
link_list=[];
for video in page:
a1=video.find_element_by_id('thumbnail').get_attribute('href')
a2=video.find_element_by_id('video-title').text
a3=video.find_elements_by_css_selector('yt-formatted-string[has-link-only_]:not([force-default-style]) a.yt-simple-endpoint.yt-formatted-string')[0].text
a4=video.find_elements_by_css_selector('#metadata-line.ytd-video-meta-block span.ytd-video-meta-block')[0].text
a5=video.find_elements_by_css_selector('#metadata-line.ytd-video-meta-block span.ytd-video-meta-block')[1].text
a6=video.find_elements_by_css_selector('#description-text.ytd-video-renderer')[0].text
#ink=video.get_attribute('innerHTML')
print i,a2
print a3+" "+a4+" "+a5
print a1
print a6
print
i+=1
link_list.append(a1)
driver.quit()
display.stop()
print bcolors.BOLD+bcolors.GREEN+"Available options- v: open video in VLC media player, d: download video by number, q: quit"+bcolors.ENDC
print bcolors.BOLD+bcolors.BLUE+"Usage - option:number or option:beginning-end"+bcolors.ENDC
print
entry="y"
while entry!="q":
entry=raw_input(">")
if pattern1.match(entry):
link=entry.split(":")[1]
bashCommand="vlc "+link_list[int(link)]
pass
elif pattern2.match(entry):
nums=entry.split(":")[1]
b=int(nums.split("-")[0])
e=int(nums.split("-")[1])
bashCommand="youtube-dl "+" ".join(link_list[b:e])
print bashCommand
process = subprocess.Popen(bashCommand.split(), stdout=subprocess.PIPE)
output, error = process.communicate()
pass我还没有尝试运行实际的命令(Popen),但我认为应该可以这样做。
发布于 2022-04-19 09:01:55
在2022年测试它/ubuntu时,我发现它不像mps那样有问题,也不那么复杂-youtube。
在终端中键入ytfzf以启动。请参阅ytfzf -h的选项,如仅音频和下载。
搜索是在设置变量之后完成的,因此,例如
ytfzf -m <search_term>ytfzf -d <search_term>我们可以在应用程序启动程序中添加类似于Exec=konsole -e ytfzf -m的行,称为"Youtube音频.“--其他选项也是如此。



上下滚动,按回车或双击选择标题.

默认播放器为mpv,下载由curl完成,设置为~/.config/ytfzf/conf.sh。
https://unix.stackexchange.com/questions/495998
复制相似问题