你可以使用以下PHP代码来实现同时请求多个接口并生成XML文件:

<?php
// 设置日期范围
$start_date = '2023-08-31';
$end_date = '2023-09-02';

// 创建一个空的XML文档
$xml = new DOMDocument('1.0', 'UTF-8');
$xml->formatOutput = true;

// 创建根元素
$tv = $xml->createElement('tv');
$tv->setAttribute('generator-info-name', 'Sage');
$tv->setAttribute('generator-info-url', 'https://github.com/OpenAI/gpt/blob/main/samples/dialogue.py');
$xml->appendChild($tv);

// 创建curl_multi资源
$multi_handle = curl_multi_init();

// 循环生成日期范围内的接口URL
$current_date = new DateTime($start_date);
$end_date = new DateTime($end_date);
while ($current_date <= $end_date) {
    $date = $current_date->format('Ymd');
    $url1 = 'http://baidu.com/ch1.php?data=' . $date;
    $url2 = 'http://baidu.com/ch2.php?data=' . $date;

    // 添加接口1请求
    $ch1 = curl_init();
    curl_setopt($ch1, CURLOPT_URL, $url1);
    curl_setopt($ch1, CURLOPT_RETURNTRANSFER, true);
    curl_multi_add_handle($multi_handle, $ch1);

    // 添加接口2请求
    $ch2 = curl_init();
    curl_setopt($ch2, CURLOPT_URL, $url2);
    curl_setopt($ch2, CURLOPT_RETURNTRANSFER, true);
    curl_multi_add_handle($multi_handle, $ch2);

    // 增加日期
    $current_date->modify('+1 day');
}

// 执行并等待所有请求完成
$running = null;
do {
    curl_multi_exec($multi_handle, $running);
} while ($running);

// 处理每个请求的响应
$channel_ids = [];
while ($done = curl_multi_info_read($multi_handle)) {
    $ch = $done['handle'];

    // 获取接口响应数据
    $response = curl_multi_getcontent($ch);
    $data = json_decode($response, true);

    // 解析接口数据并生成XML节点
    foreach ($data[0]['ret_data'] as $programme) {
        $channel_id = $programme['bd_name'];

        // 添加channel节点
        if (!in_array($channel_id, $channel_ids)) {
            $channel_ids[] = $channel_id;
            $channel = $xml->createElement('channel');
            $channel->setAttribute('id', $channel_id);
            $display_name = $xml->createElement('display-name', $channel_id);
            $display_name->setAttribute('lang', 'zh');
            $channel->appendChild($display_name);
            $tv->appendChild($channel);
        }

        // 添加programme节点
        $programme_node = $xml->createElement('programme');
        $programme_node->setAttribute('channel', $channel_id);
        $programme_node->setAttribute('start', str_replace('-', '', $programme['begin_time']) . ' +0800');
        $programme_node->setAttribute('stop', str_replace('-', '', $programme['end_time']) . ' +0800');
        $title = $xml->createElement('title', $programme['desc']);
        $title->setAttribute('lang', 'zh');
        $programme_node->appendChild($title);
        $tv->appendChild($programme_node);
    }

    // 移除完成的请求
    curl_multi_remove_handle($multi_handle, $ch);
    curl_close($ch);
}

// 关闭curl_multi资源
curl_multi_close($multi_handle);

// 保存XML文件
$xml->save('tv.xml');

echo 'XML文件已生成。';
?>

上述代码通过使用php的curl_multi_init函数同时请求多个接口,并将每个接口的响应数据解析成XML节点,最终生成一个tv.xml文件。

请注意替换接口URL和日期范围以适应你的实际情况。另外,你可能需要根据你的接口返回的实际数据结构进行适当的修改。

希望可以帮助到你

请求接口1:httpbaiducomch1phpdata=20230831得到内容 ret_status 0 ret_msg success ret_data end_time 2023-08-31 005500 begin_time 2023-08-31 000

原文地址: http://www.cveoy.top/t/topic/iUxn 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录