簡體   English   中英

解析curl json響應並使用響應來構建另一個請求

[英]Parsing a curl json response and using response to build another request

我正在嘗試構建一個shell腳本,它將獲取隨機XKCD漫畫的圖像URL,以便我可以使用Übersicht顯示它。 因為你只能向XKCD API索取我需要的最新漫畫或特定漫畫:

  1. 發送GET請求到http://xkcd.com/info.0.json ,獲取num元素的值。
  2. 發送另一個請求到http://xkcd.com/XXX/info.0.json ,其中XXXnum的值。

我當前的命令如下所示並成功返回漫畫編號:

curl -s 'http://xkcd.com/1510/info.0.json' | grep -Eo '"num": \d+' | grep -Eo '\d+'
  1. 我無法弄清楚如何使用grep捕獲組,所以我需要兩次grep json。 常見的建議是使用-P ,Mac OS X 10.10不支持。
  2. 我不知道如何將grep(作為XXX )的輸出讀入第二個curl -s 'http://xkcd.com/XXX/info.0.json'命令。
  1. 在OS X上,您可以使用系統Perl:

      curl -sS http://xkcd.com/info.0.json | /usr/bin/perl -pe 's/.*"num": ([0-9]+).*/\\1/' 
  2. 您可以使用命令替換將輸出保存到變量:

     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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM