0

我正在尝试根据结果集中可用的总结果随机化起始索引,以便我可以通过 YouTube GData API 检索随机视频结果。我认为有两种方法可以做到这一点。第一个,将结果总数保存到一个 bash 变量并只发出 2 个 API 请求,第二个是通过使用逻辑根据结果集中的视频总数随机化 start-index 来实际检索“随机”视频/comparison 函数(似乎)在 API 查询本身中可用。

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

我目前正在尝试第一种方法。抑制 grep 输出但在变量中捕获它是一个与此非常相似的问题,尽管没有一个答案实际上适用于我正在尝试做的事情,因为这是使用 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 查询。

4

1 回答 1

1

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

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)。

于 2013-06-30T09:28:04.537 回答