2016-02-25 25 views
0

我有分配卷曲的变量的问题和卷曲的输出分配给变量: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

变化'OK = “$网址” | jq'.resultsUrl''为'OK = $(echo $ URL | jq'.resultsUrl')'。在尝试卷曲它之前,您应该检查OK是否为空。 –

+0

如何知道设置'URL'的正确语法,但不能使用相同的语法来设置'OK'? – Barmar

回答

2

我的猜测是:

jq '.resultsUrl' 

输出领域resultsUrl引号,因此卷曲不能正确地处理它。此外,$URL | ...不起作用,您将不得不直接使用echocurl

尝试

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,你将不得不处理这个错误情况。

+0

你是对的,我忘了提及resultUrl包含引号。它仍然没有工作,目前的结果是:[]。如果有帮助,我可以在这里发布一个示例链接。 – Adrian

+0

是,做到这一点请;) – Ctx

+0

https://api.myjson.com/bins/4g7q7 - 嗯与此JSON它的工作。我想也许这就是问题,$ OK变量包含带参数的URL? – Adrian

0

你的线

OK= "$URL" | jq '.resultsURL' 

环境变量OK设置为空字符串,则尝试执行"$URL"为命令,且管其输出到jq。如果你想设置OK一个命令的结果,你必须使用$OK=(...),就像你设置URL时一样。正确的语法是:

OK=$(echo "$URL" | jq '.resultsURL') 

,并除去从.jq输出的报价,你可以这样做:

OK=$(echo "$URL" | jq '.resultsURL' | tr -d '"')