卷曲请求后损坏的zip文件

卷曲请求后损坏的zip文件

问题描述:

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

我不知道你的问题的答案。我的猜测是某件事会在第一次尝试时被缓存,所以第二次尝试运行得更快。 –

使用@ 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"