我正在尝试构建一个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
一起使用,所以我需要两次使用json。常见的建议是使用-P
,这在Mac OS X 10.10中不受支持。XXX
)读入第二个curl -s 'http://xkcd.com/XXX/info.0.json'
命令。答案 0 :(得分:9)
在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处理器。要使用num
提取jq
,它就像
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