请求接口1:httpbaiducomch1phpdata=20230831得到内容 ret_status 0 ret_msg success ret_data end_time 2023-08-31 005500 begin_time 2023-08-31 000
你可以使用以下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和日期范围以适应你的实际情况。另外,你可能需要根据你的接口返回的实际数据结构进行适当的修改。
希望可以帮助到你
原文地址: http://www.cveoy.top/t/topic/iUxn 著作权归作者所有。请勿转载和采集!