以下是使用PHP的curl_multi_init函数同时请求多个接口,并生成XML文件的示例代码:

<?php
// 请求的接口列表
$urls = [
    "http://baidu.com/ch1.php?data=20230831",
    "http://baidu.com/ch2.php?data=20230831",
    // 其他接口
];

// 并发请求多个接口
$mh = curl_multi_init();
$handles = [];
foreach ($urls as $i => $url) {
    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_HEADER, false);
    curl_setopt($ch, CURLOPT_TIMEOUT, 30);
    curl_multi_add_handle($mh, $ch);
    $handles[$i] = $ch;
}

$running = null;
do {
    curl_multi_exec($mh, $running);
} while ($running);

// 读取请求结果
$results = [];
foreach ($handles as $i => $ch) {
    $results[$i] = curl_multi_getcontent($ch);
    curl_multi_remove_handle($mh, $ch);
}
curl_multi_close($mh);

// 解析结果生成XML文件
$xmlWriter = new XMLWriter();
$xmlWriter->openURI("tv.xml");
$xmlWriter->setIndent(true);
$xmlWriter->startDocument('1.0', 'UTF-8');
$xmlWriter->startDTD('tv', null, 'http://xmltv.cvs.sourceforge.net/viewvc/xmltv/xmltv/xmltv.dtd');
$xmlWriter->endDTD();
$xmlWriter->startElement('tv');
$xmlWriter->writeAttribute('generator-info-name', 'Sage');
$xmlWriter->writeAttribute('generator-info-url', 'https://github.com/OpenAI/gpt/blob/main/samples/dialogue.py');

foreach ($results as $result) {
    $data = json_decode($result, true);
    if ($data && isset($data[0]['ret_data'])) {
        foreach ($data[0]['ret_data'] as $item) {
            $xmlWriter->startElement('channel');
            $xmlWriter->writeAttribute('id', $item['bd_name']);
            $xmlWriter->startElement('display-name');
            $xmlWriter->writeAttribute('lang', 'zh');
            $xmlWriter->text($item['bd_name']);
            $xmlWriter->endElement();
            $xmlWriter->endElement();
            
            $xmlWriter->startElement('programme');
            $xmlWriter->writeAttribute('channel', $item['bd_name']);
            $xmlWriter->writeAttribute('start', str_replace(' ', '', $item['begin_time']) . ' +0800');
            $xmlWriter->writeAttribute('stop', str_replace(' ', '', $item['end_time']) . ' +0800');
            $xmlWriter->startElement('title');
            $xmlWriter->writeAttribute('lang', 'zh');
            $xmlWriter->text($item['desc']);
            $xmlWriter->endElement();
            $xmlWriter->endElement();
        }
    }
}

$xmlWriter->endElement();
$xmlWriter->endDocument();
$xmlWriter->flush();

echo "XML文件生成成功!";
?>

这段代码会将请求结果解析后生成一个名为tv.xml的XML文件,内容如示例所示。你可以根据需要修改和扩展代码来适应更多的接口和数据。

使用 PHP 并发请求多个接口生成 XML 文件

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

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