2017-10-16 11 views
0

Qualtrics APIを使用して、定期的に調査データを取得しています。以下は私のシェルスクリプト(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を過ごした取得します - {"result":{"percentComplete":0.0、 "file":null、 "status": "進行中"}: - : - : - : - : - :: - : -}%、合計、%Xferd平均速度時間時間現在の時間 合計Dloadアップロード合計スピードレフトスピード 100 129 100 129 0 0 405 0 - : - : - - : - : - :: - : - 405

中央ディレクトリの終わりの署名が見つかりません。このファイルは、 のzipファイルではないか、またはマルチパートアーカイブの1つのディスクを構成します。 後者の場合、このアーカイブの最後のディスクである に、中央ディレクトリとZIPファイルのコメントがあります。

解凍:/Users/myname/Desktop/response.zipまたは /Users/myname/Desktop/WEA/response.zip.zipの一つにzipファイル ディレクトリを見つけることができない、および/ユーザ/ MYNAME /デスクトップを見つけることができません/WEA/response.zip.ZIP、期間。

このエラーは、通常、このエラーが最初にスクリプトを実行したときにのみ発生するということです。再実行すると、何も変更せずに、エラーなく実行されます。私の理解では、このエラーメッセージは破損したzipファイルを意味します。 POSTリクエストを変数に保存して破損していますか?私は後でGET要求に必要なes_idを提供するので、ポストリクエスト出力を何とかキャプチャする必要があります。私はそれをハードコードしますが、es_idは毎週更新されます。

+2

私の推測では、あなたのzipファイルが無効な理由は、エクスポートが完了していないためです。ループ内にhttps://myorg.qualtrics.com/API/v3/responseexports/${es_id}を入れて、zipをダウンロードする前にエクスポートが完了したかどうかを確認する必要があります。 –

+0

@ T.Gibbonsあなたは正しいです、私は間違って、応答のエクスポートステータスのドキュメント(ここでは、https://api.qualtrics.com/docs/get-response-export-progress)で与えられた2番目のカールコマンドを仮定しています。 。しかし、私は戻ってすべての成功した引っ張りが 'percentComplete:100'を持っているのに対し、失敗した引っ張りはすべて上記の' percentComplete:0'を持っています。なぜコードを実行するのが最初に完了しないのでしょうか?それを再実行すると、完全な引き込みが得られますか? –

+0

私はあなたの質問に対する答えを知らない。私の推測では、何かが最初の試みでキャッシュされるので、2番目の試みはより速く実行されるでしょう。 –

答えて

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" 
関連する問題