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

<?php
// 创建一个多个cURL句柄的资源
$multiHandle = curl_multi_init();

// 创建两个cURL句柄
$ch1 = curl_init();
$ch2 = curl_init();

// 设置第一个请求的参数
curl_setopt($ch1, CURLOPT_URL, 'http://baidu.com/ch1.php');
curl_setopt($ch1, CURLOPT_RETURNTRANSFER, true);

// 设置第二个请求的参数
curl_setopt($ch2, CURLOPT_URL, 'http://baidu.com/ch2.php');
curl_setopt($ch2, CURLOPT_RETURNTRANSFER, true);

// 将两个请求的句柄添加到多个cURL句柄中
curl_multi_add_handle($multiHandle, $ch1);
curl_multi_add_handle($multiHandle, $ch2);

// 执行多个cURL请求
do {
    $status = curl_multi_exec($multiHandle, $active);
    if ($active) {
        curl_multi_select($multiHandle);
    }
} while ($active && $status == CURLM_OK);

// 获取第一个请求的响应内容
$response1 = curl_multi_getcontent($ch1);

// 获取第二个请求的响应内容
$response2 = curl_multi_getcontent($ch2);

// 关闭cURL句柄
curl_multi_remove_handle($multiHandle, $ch1);
curl_multi_remove_handle($multiHandle, $ch2);
curl_multi_close($multiHandle);

// 将响应内容转换为数组
$data1 = json_decode($response1, true);
$data2 = json_decode($response2, true);

// 生成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>');

foreach ($data1[0]['ret_data'] as $item) {
    $channel = $xml->addChild('channel');
    $channel->addAttribute('id', $item['bd_name']);
    $displayName = $channel->addChild('display-name', $item['bd_name']);
    $displayName->addAttribute('lang', 'zh');
    $programme = $xml->addChild('programme');
    $programme->addAttribute('channel', $item['bd_name']);
    $programme->addAttribute('start', str_replace('-', '', str_replace(':', '', str_replace(' ', '', $item['begin_time']))).' +0800');
    $programme->addAttribute('stop', str_replace('-', '', str_replace(':', '', str_replace(' ', '', $item['end_time']))).' +0800');
    $title = $programme->addChild('title', $item['desc']);
    $title->addAttribute('lang', 'zh');
}

foreach ($data2[0]['ret_data'] as $item) {
    $channel = $xml->addChild('channel');
    $channel->addAttribute('id', $item['bd_name']);
    $displayName = $channel->addChild('display-name', $item['bd_name']);
    $displayName->addAttribute('lang', 'zh');
    $programme = $xml->addChild('programme');
    $programme->addAttribute('channel', $item['bd_name']);
    $programme->addAttribute('start', str_replace('-', '', str_replace(':', '', str_replace(' ', '', $item['begin_time']))).' +0800');
    $programme->addAttribute('stop', str_replace('-', '', str_replace(':', '', str_replace(' ', '', $item['end_time']))).' +0800');
    $title = $programme->addChild('title', $item['desc']);
    $title->addAttribute('lang', 'zh');
}

// 保存XML文件
$xml->asXML('tv.xml');
?>

以上代码将使用curl_multi_init函数同时请求两个接口,并将响应内容转换为数组。然后,使用SimpleXMLElement类生成XML文件,并将数组中的数据添加到XML中。最后,使用asXML方法将XML保存为文件。请注意,这里使用了一个示例的XML结构,实际使用时你可能需要根据自己的需求进行调整。

使用 PHP curl_multi_init 同时请求多个接口并生成 XML 文件

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

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