我知道这有点离题,但我可以提供以下 bash 脚本。我在我的 Raspberry Pi 上使用它,效果很好。
#!/bin/sh
while [ true ];
do
searchresult=""
while [ -z "$searchresult" ]; do
rand=$(< /dev/urandom tr -dc _A-Z-a-z-0-9 | head -c${1:-5};echo)
echo "$rand"
searchresult=$(googler -C -n 100 --np -x -w https://www.youtube.com "$rand")
done
urls=$(echo "$searchresult" | grep -o "https://www.youtube.com/watch?v=...........")
url=$(shuf -e -n 1 $urls)
echo "$url"
omxplayer -o hdmi $(youtube-dl -f mp4 -g "$url")
done
先决条件是您已安装googler和youtube-dl. 我最初的想法是生成随机的 11 个字符串并将它们附加到 YouTube 视频的基本 URL。然而,可能的排列数量是巨大的(26 个大写字母 + 26 个小写字母 + 10 个数字 + 连字符 + 下划线 = 64 个字符;64^11=7.38x10^19 个排列),如果地球上每个人都上传,就会用完100 亿个视频。这就是为什么随机生成完整的 11 个字符的标识符不是一种可行的方法。我的脚本改为生成随机的 5 个字符的字符串(变量“rand”)并将它们作为搜索查询传递给 googler。Googler 在 YouTube 网站上搜索这些随机字符串,在大多数情况下它会返回结果(变量“searchresult”)。如果没有结果,则使用另一个随机字符串重复搜索,依此类推,直到成功。通常需要一到三次尝试。我尝试了不同长度的搜索字符串 - 4 可能不够唯一,6 太长,可能需要多次尝试才能获得结果,我观察到如果脚本在短时间内发送超过 10 个搜索请求,谷歌暂时阻止我进一步搜索。
在下一步中,脚本从搜索结果中提取指向 YouTube 视频的超链接,并将它们放入变量“urls”中。然后随机选择其中一个播放(变量“url”)并传递给播放器 - 在我的例子中是 omxplayer,但你可以用你想要的任何播放器替换它。Omxplayer 在 Raspberry Pi 上很不错,因为它使用硬件加速并通过 hdmi 直接输出到我的电视机。如果我将“-o hdmi”更改为“-o local”,音频将通过 3.5 毫米立体声插孔发送到外部放大器。在播放过程中按“q”会停止播放当前视频,并自动开始下一个随机视频。它将永远持续下去,直到您按 Ctrl-C 停止脚本。
其他提示
通过一些修改,您可以获得关于给定主题的随机视频。例如,如果我们将“Deep Purple”作为附加搜索词,我们将获得 Deep Purple 的随机音乐视频:
#!/bin/sh
while [ true ];
do
searchresult=""
while [ -z "$searchresult" ]; do
rand=$(< /dev/urandom tr -dc _A-Z-a-z-0-9 | head -c${1:-2};echo)
echo "$rand"
searchresult=$(googler -C -n 10 --np -x -w https://www.youtube.com "$rand" "Deep Purple")
done
urls=$(echo "$searchresult" | grep -o "https://www.youtube.com/watch?v=...........")
url=$(shuf -e -n 1 $urls)
echo "$url"
omxplayer -o hdmi $(youtube-dl -f mp4 -g "$url")
done
请注意,在最后一个示例中,我已将随机因子减少为 2 个字符的字符串,因为在包含搜索词“深紫色”的所有 YouTube 视频的相对较小的子集中很难找到 5 个字符的字符串的匹配项”。同样在这里,我将 googler 返回的搜索结果的数量限制为 10,以保持它们的相关性。使用 100 时,我也会得到不太相关的结果,例如业余爱好者尝试播放 Deep Purple 歌曲的视频。
下一个脚本将仅随机播放过去 12 小时内上传的新视频:
#!/bin/sh
while [ true ];
do
searchresult=$(googler -C -n 100 --np -t h12 -x -w https://www.youtube.com "")
urls=$(echo "$searchresult" | grep -o "https://www.youtube.com/watch?v=...........")
url=$(shuf -e -n 1 $urls)
echo "$url"
omxplayer -o hdmi $(youtube-dl -f mp4 -g "$url")
done
您可以设置不同的时间限制。有关详细信息,请参阅 googler 的文档。