You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用curl技巧将DepMap自定义数据多步下载合为单命令?

DepMap自定义数据下载流程自动化方案

DepMap数据库支持通过任务系统下载自定义数据(例如「Expression Public 23Q4」),原本需要手动执行四步curl操作:

  • 执行第一条curl命令获取任务ID
  • 使用任务ID轮询任务进度百分比
  • 任务状态变为SUCCESS时提取下载URL
  • 通过下载URL获取目标文件

原第一步的curl命令如下:

curl https://depmap.org/portal/api/download/custom -H 'content-type: application/json' \
  --data-raw '{"datasetId":"expression","dropEmpty":true,"addCellLineMetadata":false}'

能否用curl单命令实现自动化?

纯curl本身做不到——curl只是HTTP请求工具,没有流程控制、逻辑判断和轮询的能力。但可以结合shell脚本与jq(JSON解析工具),把整个流程打包成一个可执行脚本,或者压缩成单行shell命令。

完整自动化脚本(推荐)

这个脚本包含错误处理和状态反馈,可读性强、易维护:

#!/bin/bash

# 1. 发起自定义下载任务,获取任务ID
TASK_RESPONSE=$(curl -s https://depmap.org/portal/api/download/custom \
  -H 'content-type: application/json' \
  --data-raw '{"datasetId":"expression","dropEmpty":true,"addCellLineMetadata":false}')
TASK_ID=$(echo "$TASK_RESPONSE" | jq -r '.taskId')

if [ -z "$TASK_ID" ]; then
  echo "获取任务ID失败,请检查请求参数或网络状态"
  exit 1
fi

echo "已获取任务ID: $TASK_ID"

# 2. 轮询任务状态,直到完成或失败
while true; do
  STATUS_RESPONSE=$(curl -s "https://depmap.org/portal/api/download/custom/status/$TASK_ID")
  STATUS=$(echo "$STATUS_RESPONSE" | jq -r '.status')
  PROGRESS=$(echo "$STATUS_RESPONSE" | jq -r '.progress')

  echo "当前进度: ${PROGRESS}% | 任务状态: ${STATUS}"

  # 判断任务状态
  if [ "$STATUS" = "SUCCESS" ]; then
    DOWNLOAD_URL=$(echo "$STATUS_RESPONSE" | jq -r '.downloadUrl')
    break
  elif [ "$STATUS" = "FAILED" ]; then
    echo "任务执行失败,请稍后重试"
    exit 1
  fi

  # 每5秒轮询一次,可根据需求调整间隔
  sleep 5
done

# 3. 下载目标文件
echo "任务完成,开始下载文件..."
curl -O "$DOWNLOAD_URL"

echo "文件下载完成,保存为当前目录下的同名文件"

单行命令版本(仅演示,可读性差)

如果一定要写成单条命令,可以把脚本压缩成一行(需确保已安装jq):

TASK_ID=$(curl -s https://depmap.org/portal/api/download/custom -H 'content-type: application/json' --data-raw '{"datasetId":"expression","dropEmpty":true,"addCellLineMetadata":false}' | jq -r '.taskId'); while true; do RESP=$(curl -s "https://depmap.org/portal/api/download/custom/status/$TASK_ID"); STATUS=$(echo "$RESP" | jq -r '.status'); PROGRESS=$(echo "$RESP" | jq -r '.progress'); echo "进度: ${PROGRESS}% | 状态: ${STATUS}"; if [ "$STATUS" = "SUCCESS" ]; then URL=$(echo "$RESP" | jq -r '.downloadUrl'); curl -O "$URL"; break; elif [ "$STATUS" = "FAILED" ]; then echo "任务失败"; exit 1; fi; sleep 5; done

注意事项

  • 需要提前安装jq工具:Debian/Ubuntu用apt install jq,macOS用brew install jq
  • 轮询间隔可根据任务耗时调整,避免过于频繁请求给服务器造成压力

内容的提问来源于stack exchange,提问作者Intrastellar Explorer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 03:23:22