加快我的PHP卷曲请求,天气功能

时间:2017-06-12 03:17:45

标签: php api curl

function weatherData($date_array){
    $weather_array = [];
    $url = "http://api.worldweatheronline.com/premium/v1/past-weather.ashx?key=#######&q=frankston&format=json&date=";
    // Get cURL resource
    array_pop($date_array);
foreach($date_array as $value){
    $url2 = $url . $value;
    $curl = curl_init();
    // Set some options - we are passing in a useragent too here
    curl_setopt_array($curl, array(
        CURLOPT_RETURNTRANSFER => 1,
        CURLOPT_URL => $url2
    ));
    // Send the request & save response to $resp
    $resp = curl_exec($curl);
    // Close request to clear up some resources
    curl_close($curl);
    $data = json_decode($resp);
    $runningTotal = 0;
    for ($i=0; $i < 7; $i++) { 
        $hourly_data = $data->data->weather[0]->hourly[$i]->precipMM;
        $runningTotal += $hourly_data;
    }
    if($runningTotal >= 0.7){
        array_push($weather_array, 'wet <img class="icon" src="images/icons8-Rain-26.png"/>');
    } else{
        array_push($weather_array, 'dry <img class="icon" src="images/images.png"/>');
    }

}
return $weather_array;

好吧,所以我有这个功能会输出一系列的天气或者某些日期不是'湿'或'干',我的问题是如果我有120个日期我想做的话需要超过30天在页面加载时间内导致PHP出现严重错误,所以我需要一些方法将这些同步卷曲请求带到某种异步形式谢谢!

P.S。对于那个无用的缩进感到抱歉

1 个答案:

答案 0 :(得分:0)

注意:这不是关于加快请求的速度。采用完全不同的方法,但它肯定能解决您的PHP超时错误。

建议的解决方案
这是一个更广泛的问题。需要大量的技术解释和实施假设。我将尝试列出以下要点:

  1. 在页面加载时,不要提出任何cURL请求来获取数据。使用ID加载View中的所有日期。
  2. 在页面加载时,触发javascript / jquery函数。
  3. 此函数依次以ID / data作为参数触发每个日期的ajax调用。
  4. 在服务器上收到的请求将依次向第三方服务器发出cURL请求以获得结果。
  5. cURL请求获取所需结果并将其发送回客户端。
  6. 客户端收到结果作为对ajax调用的响应。
  7. 操纵响应以显示在视图中。
  8. 结果将在收到并操作相应日期的响应时显示,但它肯定会解决PHP超时错误。