2016-02-25 57 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 '"')