[英]Parsing a curl json response and using response to build another request
我正在嘗試構建一個shell腳本,它將獲取隨機XKCD漫畫的圖像URL,以便我可以使用Übersicht顯示它。 因為你只能向XKCD API索取我需要的最新漫畫或特定漫畫:
GET
請求到http://xkcd.com/info.0.json
,獲取num
元素的值。 http://xkcd.com/XXX/info.0.json
,其中XXX
是num
的值。 我當前的命令如下所示並成功返回漫畫編號:
curl -s 'http://xkcd.com/1510/info.0.json' | grep -Eo '"num": \d+' | grep -Eo '\d+'
grep
捕獲組,所以我需要兩次grep json。 常見的建議是使用-P
,Mac OS X 10.10不支持。 XXX
)的輸出讀入第二個curl -s 'http://xkcd.com/XXX/info.0.json'
命令。 在OS X上,您可以使用系統Perl:
curl -sS http://xkcd.com/info.0.json | /usr/bin/perl -pe 's/.*"num": ([0-9]+).*/\\1/'
您可以使用命令替換將輸出保存到變量:
num=$(curl -sS http://xkcd.com/info.0.json | /usr/bin/perl -pe 's/.*"num": ([0-9]+).*/\\1/') curl -sS "http://xkcd.com/${num}/info.0.json"
或者更簡潔,二合一,盡管不是很易讀:
curl -sS "http://xkcd.com/$(curl -sS http://xkcd.com/info.0.json | /usr/bin/perl -pe 's/.*"num": ([0-9]+).*/\\1/')/info.0.json"
順便說一句,我強烈推薦jq作為命令行JSON處理器。 要用jq
提取num
,就像它一樣簡單
curl -sS http://xkcd.com/info.0.json | jq '.num'
雖然你沒有要求它,但這里有一個簡單的帶有jq
的單行程序,它提取最新圖像的URI:
curl -sS "http://xkcd.com/$(curl -sS http://xkcd.com/info.0.json | jq '.num')/info.0.json" | jq -r '.img'
示例輸出:
http://imgs.xkcd.com/comics/spice_girl.png
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.