bash - 从YouTube GData API检索随机视频

标签 bash variables youtube grep gdata

我正在尝试根据结果集中的可用总结果来随机分配开始索引,以便可以通过YouTube GData API检索随机视频结果。我以两种方式可以做到这一点。首先,将结果总数保存到bash变量中,并仅发出2个API请求,其次,通过使用逻辑根据结果集中的视频总数对起始索引进行随机化,从而实际检索“随机”视频/比较函数(貌似)在API查询本身中可用。

我认为可能的另一种方式是使用XData在查询本身中使用数学函数(即:https://developers.google.com/youtube/2.0/developers_guide_protocol_partial#Fields_Formatting_Rules),但是我玩的那一点我无法理解所需语法,因为我不熟悉XData或GData API。

我目前正在尝试第一种方法。 Supress grep output but capture it in a variable是与此非常类似的问题,尽管没有答案实际上对我正在尝试执行的工作有效,并且由于这是使用pcregrep而不是grep进行的,对于更复杂的问题,我认为这样做会更好我问一个新问题。

我正在尝试将pcregrep的输出保存到bash变量中,以便可以通过YouTube GData API在其他查询中使用它。

例:

wget -q "https://gdata.youtube.com/feeds/api/videos?author=vice&fields=openSearch:totalResults" -O - | totalResults=`pcregrep -o1 '>([0-9]+)<' 2>&1` | echo $totalResults

这将返回一个空变量,删除输出重定向(2>&1)以及尝试用$()包围pcregrep也是如此。

我怎样才能得到...的结果
wget -q "https://gdata.youtube.com/feeds/api/videos?author=vice&fields=openSearch:totalResults" -O - | pcregrep -o1 '>([0-9]+)<'

...保存到变量中?

这是我应该做的事情,还是实际搜索条件中可用的比较/逻辑功能允许我通过单个API查询做我想做的事情?如果可能,我希望使用单个API查询。

最佳答案

您需要将整个命令管道放入$()中:

var=$(wget "http://gd...sults" -O - | pcregrep -o1 ">([0-9]+)<")

另外,您也不想在此处重定向STDERR(2>&1)。那只会弄乱你的结果。

如果不确定命令将写入哪个流,则可以使用strace标识它:
$ strace wget "http://gd...sults" -O - 2>&1 | grep ^write
...
write(1, "<?xml version='1.0' encoding='UT"..., 123<?xml ve...ec/open) = 123
write(1, "searchrss/1.0/'><openSearch:tota"..., 77searchrss...</feed>) = 77
write()的第一个参数是文件描述符的编号(在本例中为1,即STDOUT)。

关于bash - 从YouTube GData API检索随机视频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17385473/

相关文章:

bash - 使用命令行界面的文件中的整数数

bash - 将 PSQL 添加到 .bash_profile mac

c++ - 变量会影响性能吗?

java - 为什么不能在循环中隐藏局部变量?

iframe - 视频上方和下方的YouTube iframe播放器空白

iphone - 如何在iPhone应用程序中的youtube上搜索视频?

linux - 在 Bash 脚本中使用 find 命令并排除子目录

bash - 如何从命令行获取 Elasticsearch 服务器版本

c - 程序存储器中的 Hitech C 数据缓冲区

php - 我应该使用 <object> 还是 &lt;iframe&gt; 来加载视频?