2017-10-16 86 views
0

我正在使用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

+2

我的猜測是你的zip文件無效的原因是因爲導出沒有完成。您需要將https://myorg.qualtrics.com/API/v3/responseexports/${es_id}放入循環中,然後在下載zip之前檢查結果以確定導出是否完成。 –

+0

@ T.Gibbons你是對的,我錯誤地認爲這是第二個curl命令在給出響應導出狀態文檔[這裏](https://api.qualtrics.com/docs/get-response-export-progress) 。但是我已經回去看到所有成功的pull都有'percentComplete:100',而所有不成功的pull都有'percentComplete:0',如上所示。爲什麼運行代碼最初無法完成,但重新運行它會產生全面拉動? –

+0

我不知道你的問題的答案。我的猜測是某件事會在第一次嘗試時被緩存,所以第二次嘗試運行得更快。 –

回答

1

使用@ T.Gibbons的建議我能夠通過在腳本中加入while循環來消除初始運行時的錯誤。

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" 
post_response=$(curl -X POST -H 'X-API-TOKEN: MYAPITOKEN' -H 'Content-Type: application/json' -d '{ 
    "surveyId": "SV_00000000000000", 
    "startDate": "'"$STARTDATESTRING"'", 
    "endDate": "'"$ENDDATESTRING"'", 
    "format": "csv", 
    "useLocalTime": true, 
    "useLabels": true 
}' "https://myorg.qualtrics.com/API/v3/responseexports") 

es_id=$(echo "$post_response" | /usr/local/Cellar/jq/1.5_2/bin/jq --raw-output '.result.id') 

percent_complete=0 
while [ $percent_complete -ne 100 ] 
do 
    response=$(curl -H "X-API-TOKEN: MYAPITOKEN" "https://myorg.qualtrics.com/API/v3/responseexports/${es_id}") 
    percent_complete=$(echo "$response" | /usr/local/Cellar/jq/1.5_2/bin/jq --raw-output '.result.percentComplete') 
done 

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" 

rm "/Users/myname/Desktop/WEA/response.zip"