我正在尝试根据结果集中可用的总结果随机化起始索引,以便我可以通过YouTube GData API检索随机视频结果。我认为有两种方法可以做到这一点。第一个,将结果总数保存到bash变量并只发出2个API请求,第二个是通过使用逻辑基于结果集中的视频总数随机化start-index来实际检索“随机”视频/比较函数(貌似)在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&gt;&amp; 1)以及尝试用$()包围pcregrep。
我怎样才能得到......
的结果wget -q "https://gdata.youtube.com/feeds/api/videos?author=vice&fields=openSearch:totalResults" -O - | pcregrep -o1 '>([0-9]+)<'
...保存到变量中?
这是我应该按照我想要的方式进行的,还是实际搜索术语中可用的比较/逻辑功能允许我使用单个API查询执行我想要的操作?如果可能的话,我更喜欢单个API查询。
答案 0 :(得分: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)。