我正在使用Qualtrics API按計劃的時間間隔檢索調查數據。下面是我的shell腳本(bash)get_responses.sh
,它發佈導出,度量下載完成率,獲取導出以及存儲/解壓縮文件。捲曲請求後損壞的zip文件
STARTDATE=$(date -v-7d "+%Y-%m-%d")
STARTDATESTRING=$STARTDATE"T00:00:00-07:00:00"
ENDDATE=$(date "+%Y-%m-%d")
ENDDATESTRING=$ENDDATE"T00:00:00-07:00:00"
result=$(curl -X POST -H 'X-API-TOKEN: MYAPITOKEN' -H 'Content-Type: application/json' -d '{
"surveyId": "SV_000000000000",
"startDate": "startDate": "'"$STARTDATESTRING"'",
"endDate": "endDate": "'"$ENDDATESTRING"'",
"format": "csv",
"useLocalTime": true,
"useLabels": true
}' "https://myorg.qualtrics.com/API/v3/responseexports")
es_id=$(echo "$result" | /usr/local/Cellar/jq/1.5_2/bin/jq --raw-output '.result.id')
curl -H "X-API-TOKEN: MYAPITOKEN" "https://myorg.qualtrics.com/API/v3/responseexports/${es_id}"
curl -X GET -H "Content-Type: application/json" -H "X-API-TOKEN: MYAPITOKEN" "https://myorg.qualtrics.com/API/v3/responseexports/${es_id}/file" -o "/Users/myname/Desktop/WEA/response.zip"
unzip "/Users/myname/Desktop/WEA/response.zip" -d "/Users/myname/Desktop/WEA/"
我斷斷續續得到以下無差錯
%合計%收稿%Xferd平均速度時間時間時間電流 DLOAD上傳一共花左速度 100 339 100 133 100 206 165 256 - :「 - 」: - 「: - 」: - : - 「012」「」「」 }「meta」:{「httpStatus」:「200 - OK」,「requestId」:「2c55524c-03aa-495c-8de7-b54d5b441b34」}}%總計%收到%Xferd平均速度時間時間時間當前 Dload Upload Total花了左速度 100 129 100 129 0 0 405 0 - : - : - - : - : - - 405
找不到中央目錄結尾的簽名。這個文件不是 一個zip文件,或者它構成一個多部分檔案的一個磁盤。在 後一種情況下,中心目錄和zipfile註釋將在 上找到此歸檔的最後一個磁盤。
解壓:不能在/Users/myname/Desktop/response.zip的一個或 /Users/myname/Desktop/WEA/response.zip.zip找到zip文件 目錄下,並不能找到/用戶/ MYNAME /桌面/WEA/response.zip.ZIP,期限。
奇怪的是,這個錯誤通常只發生在我第一次運行腳本時。如果我重新運行它,而不做任何改變,它將毫無錯誤地通過。據我瞭解,這個錯誤消息意味着一個損壞的zip文件。我是否通過將其保存到變量中來破壞POST請求?我需要以某種方式捕獲post請求輸出,因爲它提供了我需要用於後續GET請求的es_id
。我會硬編碼,但每週刷新es_id
。
我的猜測是你的zip文件無效的原因是因爲導出沒有完成。您需要將https://myorg.qualtrics.com/API/v3/responseexports/${es_id}放入循環中,然後在下載zip之前檢查結果以確定導出是否完成。 –
@ T.Gibbons你是對的,我錯誤地認爲這是第二個curl命令在給出響應導出狀態文檔[這裏](https://api.qualtrics.com/docs/get-response-export-progress) 。但是我已經回去看到所有成功的pull都有'percentComplete:100',而所有不成功的pull都有'percentComplete:0',如上所示。爲什麼運行代碼最初無法完成,但重新運行它會產生全面拉動? –
我不知道你的問題的答案。我的猜測是某件事會在第一次嘗試時被緩存,所以第二次嘗試運行得更快。 –