我正在使用Qualtrics API按计划的时间间隔检索调查数据。下面是我的shell脚本(bash)get_responses.sh
,它发布导出,测量下载完成率,获取导出,以及存储/解压缩文件。
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 - : - : - - : - : - - : - : - 256 {"结果":{" percentComplete":0.0,"文件":null,"状态":"正在进行" ;}," meta":{" httpStatus":" 200 - OK"," requestId":" 2c55524c-03aa- 495c-8de7-b54d5b441b34"}}%接收的总百分比%Xferd平均速度时间时间当前时间 Dload上载总左转速度 100 129 100 129 0 0 405 0 - : - : - - : - : - - : - : - 405
找不到中心目录签名。这个文件不是 一个zip文件,或者它构成一个多部分存档的磁盘。在里面 后一种情况,将在上面找到中心目录和zipfile注释 此存档的最后一个磁盘。
解压缩:无法找到zipfile /Users/myname/Desktop/response.zip或其中一个目录 /Users/myname/Desktop/WEA/response.zip.zip,找不到/Users/myname/Desktop/WEA/response.zip.ZIP,期间。
奇怪的是,这个错误通常只在我第一次运行脚本时才会发生。如果我重新运行它,而不进行任何更改,它将没有任何错误。据我所知,此错误消息表示损坏的zip文件。我是否通过将POST请求保存到变量中来破坏POST请求?我需要以某种方式捕获post请求输出,因为它提供了后续GET请求所需的es_id
。我会硬编码,但es_id
每周刷新一次。
答案 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"