我将curl指定为变量并将curl的输出分配给变量时遇到问题:
#get results url, format json
URL=$(curl https://api.apifier.com/xy)
#jq is a cli json interpreter
#resultUrl contains the final URL which we want download
OK= "$URL" | jq '.resultsUrl'
#api probably is running
sleep 5
curl "$OK"
也许这是微不足道的,但我不知道问题出在哪里。
答案 0 :(得分:2)
我的猜测是:
jq '.resultsUrl'
使用引号输出字段resultsUrl
,因此curl不会正确处理它。此外,$URL | ...
不起作用,您必须直接使用echo
或curl
。
尝试
OK=$(curl -s https://api.apifier.com/v1/xHbBnrZ9rxF4CdKjo/crawlers/Example_Alcatraz_Cruises/execute?token=nJ9ohCHZPaJRFEb7nFqtzm76u | jq -r '.resultsUrl')
curl -s "$OK"
这对我来说是
[{ "id": 2, "url": "https://www.alcatrazcruises.com/SearchEventDaySpan.aspx?date=02-25-2016&selected=", "loadedUrl": "https://www.alcatrazcruises.com/SearchEventDaySpan.aspx?date=02-25-2016&selected=", "requestedAt": "2016-02-25T23:24:52.611Z", "loadingStartedAt": "2016-02-25T23:24:54.663Z", "loadingFinishedAt": "2016-02-25T23:24:55.642Z", "loadErrorCode": null, "pageFunctionStartedAt": "2016-02-25T23:24:55.839Z", "pageFunctionFinishedAt": "2016-02-25T23:24:55.841Z", "uniqueKey": "https://www.alcatrazcruises.com/SearchEventDaySpan.aspx?date=02-25-2016&selected=", "type": "UserEnqueued", ...
这应该是你所期望的。
但是,有时第一次API调用会产生错误:
{
"type": "ALREADY_RUNNING",
"message": "The act is already running and concurrent execution is not allowed"
}
因此resultsURL将为null
,您必须处理此错误案例。
答案 1 :(得分:0)
你的行
OK= "$URL" | jq '.resultsURL'
将环境变量OK
设置为空字符串,然后尝试执行"$URL"
作为命令并将其输出传递给jq
。如果要将OK
设置为命令的结果,则必须使用$OK=(...)
,就像设置URL
时一样。正确的语法是:
OK=$(echo "$URL" | jq '.resultsURL')
要删除.jq
输出中的引号,您可以执行以下操作:
OK=$(echo "$URL" | jq '.resultsURL' | tr -d '"')