使用 PHP 并发请求多个接口生成 XML 文件
以下是使用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文件,内容如示例所示。你可以根据需要修改和扩展代码来适应更多的接口和数据。
原文地址: https://www.cveoy.top/t/topic/qAxH 著作权归作者所有。请勿转载和采集!