2017-08-01 32 views
0

我试图从Google Analytics API运行多个cURL请求,并希望看看是否有另一种更有效的运行请求的方式,而不是像下面那样手动构建它们。我需要最终构建大约10-15个请求,以便在这种情况下构建更有用的东西。如何运行来自API的多个cURL请求

<?php 

$ch1 = curl_init(); 
$ch2 = curl_init(); 
$ch3 = curl_init(); 

curl_setopt($ch1, CURLOPT_URL, "https://www.googleapis.com/analytics/v3/data/parameters_go_here"); 
curl_setopt($ch2, CURLOPT_URL, "https://www.googleapis.com/analytics/v3/data/parameters_go_here"); 
curl_setopt($ch3, CURLOPT_URL, "https://www.googleapis.com/analytics/v3/data/parameters_go_here"); 

curl_exec($ch1); 
curl_exec($ch2); 
curl_exec($ch3); 
?> 

回答

1

可以使用multi-curl

$urls = array($url1, $url2, $url3); 

$curl_arr = array(); 
$inits = curl_multi_init(); 

for($i = 0; $i < count($urls); $i++) 
{ 
    $url =$urls[$i]; 
    $curl_arr[$i] = curl_init($url); 
    curl_setopt($curl_arr[$i], CURLOPT_RETURNTRANSFER, true); 
    curl_multi_add_handle($inits, $curl_arr[$i]); 
} 

do { 
    curl_multi_exec($inits, $running); 
} while($running > 0); 


for($i = 0; $i < count($urls); $i++) 
{ 
    $results[] = curl_multi_getcontent($curl_arr[$i]); 
} 
print_r($results); 

或创建功能

function doCurl($url){ 
    $ch = curl_init(); 
    curl_setopt($ch1, CURLOPT_URL, $url); 
    curl_exec($ch); 
} 
0

考虑你每次路过不同的参数,你做需要做出独立的呼叫API。说了这么多,你可能会受益于利用function(),你结构中的电话,并在传递参数作为变量:

function getData($param = "") { 
    $core_url = "https://www.googleapis.com/analytics/v3/data/"; 
    $target_url = $core_url . $param; 

    $ch = curl_init(); 
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
    curl_setopt($ch, CURLOPT_URL, $target_url); 
    $result = curl_exec($ch); 
    curl_close($ch); 

    return json_decode($result); 
} 

这将“美化”你的代码,让您可以简单地通过一个一个字呼叫。下面显示了如何访问返回的信息属性:

getData('stats')->item; /* Calls https://www.googleapis.com/analytics/v3/data/stats */ 
getData('info')->item; /* Calls https://www.googleapis.com/analytics/v3/data/info */ 

注意,这仍然会产生相同量的API所请求的数据,虽然提供了其中调用API更清洁的方式每次你需要。

希望这会有所帮助! :)