curl请求后损坏的zipfile

时间:2017-10-16 23:40:37

标签: bash curl qualtrics

我正在使用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每周刷新一次。

1 个答案:

答案 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"