使用PHP cURL 并发请求获取电视节目数据生成XML文件
您可以使用以下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、数据解析逻辑等。
原文地址: https://www.cveoy.top/t/topic/qAzL 著作权归作者所有。请勿转载和采集!