我正在尝试构建一个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+'
Run Code Online (Sandbox Code Playgroud)
grep
,所以我需要两次grep json.常见的建议是使用-P
,Mac OS X 10.10不支持.XXX
)的输出读入第二个curl -s 'http://xkcd.com/XXX/info.0.json'
命令.4ae*_*1e1 10
在OS X上,您可以使用系统Perl:
curl -sS http://xkcd.com/info.0.json | /usr/bin/perl -pe 's/.*"num": ([0-9]+).*/\1/'
Run Code Online (Sandbox Code Playgroud)您可以使用命令替换将输出保存到变量:
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"
Run Code Online (Sandbox Code Playgroud)
或者更简洁,二合一,尽管不是很易读:
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"
Run Code Online (Sandbox Code Playgroud)顺便说一句,我强烈推荐jq作为命令行JSON处理器.为了提取num
有jq
,它的那样简单
curl -sS http://xkcd.com/info.0.json | jq '.num'
Run Code Online (Sandbox Code Playgroud)
虽然你没有要求它,但这是一个简单的单行程序,jq
它提取最新图像的URI:
curl -sS "http://xkcd.com/$(curl -sS http://xkcd.com/info.0.json | jq '.num')/info.0.json" | jq -r '.img'
Run Code Online (Sandbox Code Playgroud)
示例输出:
http://imgs.xkcd.com/comics/spice_girl.png
Run Code Online (Sandbox Code Playgroud)