2013-06-29 81 views
0

我想根據結果集中提供的全部結果隨機化開始索引,以便通過YouTube GData API檢索隨機視頻結果。有兩種方式我認爲我可以做到這一點。首先,將結果總數保存到bash變量中,並僅創建2個API請求,第二個通過隨機化基於結果集中使用邏輯的視頻總數的開始索引來實際檢索「隨機」視頻/比較函數(看似)在API查詢本身中可用。從YouTube GData 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查詢。

回答

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

相關問題