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

使用PHP合并ClinicalTrials API多页返回的StudyFields JSON数据

ClinicalTrials API 批量请求并合并JSON数据解决方案

核心思路

先调用API获取总记录数,再按单次1000条的上限,循环调整min_rnk和max_rnk参数发起请求,每次将返回的StudyFields数组合并到主数组中,最终生成包含全量数据的单个StudyFieldsResponse结构JSON。

完整PHP代码示例

<?php
// API基础配置
$apiUrl = "https://clinicaltrials.gov/api/v2/studies";
$fields = "NCTId,Condition,BriefTitle"; // 按需调整需要获取的字段
$batchSize = 1000;

// 初始化合并后的主数据结构
$mergedResponse = [
    "StudyFieldsResponse" => [
        "StudyFields" => [],
        "TotalStudies" => 0,
        "MinRank" => 1,
        "MaxRank" => 0
    ]
];

// 第一步:获取总记录数
$firstRequestUrl = sprintf(
    "%s?fields=%s&min_rnk=1&max_rnk=1",
    $apiUrl,
    urlencode($fields)
);
$firstResponse = file_get_contents($firstRequestUrl);
$firstData = json_decode($firstResponse, true);

if (!isset($firstData['StudyFieldsResponse']['TotalStudies'])) {
    die("无法获取总记录数");
}

$totalStudies = $firstData['StudyFieldsResponse']['TotalStudies'];
$mergedResponse['StudyFieldsResponse']['TotalStudies'] = $totalStudies;

// 第二步:循环请求并合并数据
$totalPages = ceil($totalStudies / $batchSize);

for ($page = 1; $page <= $totalPages; $page++) {
    $minRnk = ($page - 1) * $batchSize + 1;
    $maxRnk = min($page * $batchSize, $totalStudies);
    
    $requestUrl = sprintf(
        "%s?fields=%s&min_rnk=%d&max_rnk=%d",
        $apiUrl,
        urlencode($fields),
        $minRnk,
        $maxRnk
    );
    
    $response = file_get_contents($requestUrl);
    $data = json_decode($response, true);
    
    if (isset($data['StudyFieldsResponse']['StudyFields']) && is_array($data['StudyFieldsResponse']['StudyFields'])) {
        $mergedResponse['StudyFieldsResponse']['StudyFields'] = array_merge(
            $mergedResponse['StudyFieldsResponse']['StudyFields'],
            $data['StudyFieldsResponse']['StudyFields']
        );
    }
    
    // 模拟延迟,避免触发API频率限制
    sleep(1);
}

// 更新最大排名
$mergedResponse['StudyFieldsResponse']['MaxRank'] = $totalStudies;

// 输出合并后的JSON
header('Content-Type: application/json');
echo json_encode($mergedResponse, JSON_PRETTY_PRINT);
?>

关键说明

  • 总记录数获取:先请求1条数据拿到TotalStudies,确定循环次数
  • 分页参数计算:每次循环计算当前页的min_rnk和max_rnk,最后一页直接用总记录数作为max_rnk,避免超出范围
  • 数据合并:用array_merge将每次返回的StudyFields数组追加到主数组
  • 频率控制:加入sleep(1)避免短时间请求过多触发API限制,可根据实际情况调整
  • 结果输出:最终JSON仅含一个StudyFieldsResponse节点,StudyFields数组包含全量记录

内容的提问来源于stack exchange,提问作者Samara Galvão

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 15:41:21