您可以使用以下PHP代码来实现您的需求:

<?php

// 创建一个cURL多个句柄
$mh = curl_multi_init();

// 定义接口id和日期范围
$ids = [1, 2, 3, 4, 5, 6, 7, 8, 9];
$startDate = '20230831';
$endDate = '20230902';

// 循环生成日期与接口id
foreach ($ids as $id) {
    // 构建接口URL
    $url = 'http://baidu.com/ch.php?id=$id&data=$startDate';

    // 创建一个新的cURL资源
    $ch = curl_init($url);

    // 设置cURL选项
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

    // 将cURL资源添加到多个句柄
    curl_multi_add_handle($mh, $ch);
}

// 执行所有cURL句柄
$running = null;
do {
    curl_multi_exec($mh, $running);
} while ($running > 0);

// 保存接口返回的数据
$responses = [];

// 循环处理每个cURL句柄
foreach ($ids as $id) {
    // 获取cURL句柄的内容
    $ch = curl_multi_getcontent($mh);

    // 解析JSON响应
    $response = json_decode($ch, true);

    // 将响应添加到结果数组中
    $responses[$id] = $response;

    // 移除cURL句柄
    curl_multi_remove_handle($mh, $ch);
}

// 关闭cURL多个句柄
curl_multi_close($mh);

// 创建XML文件
$xml = new SimpleXMLElement('<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE tv SYSTEM "http://xmltv.cvs.sourceforge.net/viewvc/xmltv/xmltv/xmltv.dtd"><tv generator-info-name="Sage" generator-info-url="https://github.com/OpenAI/gpt/blob/main/samples/dialogue.py"></tv>');

// 循环生成XML节点
foreach ($responses as $id => $response) {
    $retData = $response['ret_data'];

    foreach ($retData as $data) {
        $channelId = $data['bd_name'];
        $channelName = $data['bd_name'];
        $programmes = $xml->addChild('channel');
        $programmes->addAttribute('id', $channelId);
        $displayName = $programmes->addChild('display-name', $channelName);
        $displayName->addAttribute('lang', 'zh');

        $programme1 = $programmes->addChild('programme');
        $programme1->addAttribute('channel', $channelId);
        $programme1->addAttribute('start', str_replace('-', '', str_replace(' ', '', str_replace(':', '', $data['begin_time']))) . ' +0800');
        $programme1->addAttribute('stop', str_replace('-', '', str_replace(' ', '', str_replace(':', '', $data['end_time']))) . ' +0800');
        $title1 = $programme1->addChild('title', $data['desc']);
        $title1->addAttribute('lang', 'zh');
    }
}

// 格式化XML输出
$dom = new DOMDocument('1.0');
$dom->preserveWhiteSpace = false;
$dom->formatOutput = true;
$dom->loadXML($xml->asXML());
$dom->save('tv.xml');

此代码使用cURL库发送并处理多个并发请求。它首先循环生成日期和接口ID,然后使用cURL进行请求,并将每个请求的响应保存在$responses数组中。

接下来,根据$responses数组的内容,使用SimpleXMLElement类创建XML文件。循环遍历每个响应的数据,并将其作为节点添加到XML中。

最后,使用DOMDocument类格式化XML输出并保存为tv.xml文件。

请注意,您可能需要根据实际情况调整代码以适应您的需求,例如更改接口URL、数据解析逻辑等。

使用PHP cURL 并发请求获取电视节目数据生成XML文件

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

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