2017-10-17 5 views
0

5550 개의 다른 경로가 있으며 각 레코드에 대해 foreach 루프를 수행하고 API 데이터를 가져와야합니다. 그래서 나는 Laravel에 폭식과 기능을 만들어 :Google지도에서 거리 데이터를로드하여 데이터베이스에 저장해야합니다.

public function getDirectionDistance($origins, $distinations) 
{ 
    $client = new Client(); 
    $res = $client->get("https://maps.googleapis.com/maps/api/distancematrix/json?origins=$origins&destinations=$distinations&key=ччч")->getBody()->getContents(); 
    $obj = json_decode($res, true); 
    $distance = $obj['rows'][0]['elements'][0]['distance']['text']; 
    $clean = $string = str_replace(' km', '', $distance); 
    return $clean; 

} 

내가 가게 방법

public function store() 
{ 
    $route = $this->route->with('from','to')->get(); 
    $maps = new Maps(); 

    foreach ($route as $item){ 

     $direction = new Direction(); 
     $from = $item->from->name; 
     $to = $item->to->name; 
     $direction->route_id = $item->id; 
     $direction->distance = $maps->getMapsApi("$from,israel","$to,israel"); 
     $direction->save(); 
     sleep(3); 

    } 

} 

에 그것을 사용하지만 그것을 할 때, 나는 200 개 루트 1 개 거리를 취득하고 이후 200 행 나는 다음 길을위한 다음 거리를 얻는다. 중지하고 api가 완료 될 때까지 기다렸다가 저장하고 다음 행을 시작합니다. 기계 학습 가격 계산기를 만들려면 데이터가 필요합니다. 을 내가 CURL과 함께 Google에 전화를 걸 함수를 만들어 : 저를이 방식으로 작동 들어

+0

무엇을하기를 원하십니까? 한 번에 5500 개의 레코드를 모두 저장 하시겠습니까? – Vikash

+0

예, route_id를 사용하여 거리를 저장하고 경로의 관계를 만들고 싶습니다. –

+0

chunck의 데이터를 나누어 한 번에 모든 데이터를 저장할 수 있습니다. 작은 chunck로 나누어 저장합니다 – Vikash

답변

0

public function calculateDistance($origins, $destination){ 
    $staticDistanceModel = New StaticDistance(); 
    $url = "https://maps.googleapis.com/maps/api/distancematrix/json?origins=" . $origins . "&destinations=" . $destination . "&mode=driving&language=it-IT&key=xyz"; 
      $ch = curl_init(); 
      curl_setopt($ch, CURLOPT_URL, $url); 
      curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
      curl_setopt($ch, CURLOPT_PROXYPORT, 3128); 
      curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); 
      curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); 
      $response = curl_exec($ch); 
      curl_close($ch); 
      $response_a = json_decode($response, true); 
      if (isset($response_a['rows'][0]['elements'][0]['distance']['value'])) { 
       $m = $response_a['rows'][0]['elements'][0]['distance']['value']; 
      }else{ 
       $m = 0; 
      } 

      $staticDistanceModel->insertStatic($origins, $destination, $m); 
     } 
    } 

내 모델의 기능은 뭔가 같은 :

public function insertStatic($origins, $destination, $m){ 
     $arrayInsert = array('origins'=>$origins, 'destination'=>$destination,'distance'=>$m); 
     Self::create($arrayInsert); 
    } 

과의 내 컨트롤러는 다음과 같습니다.

foreach ($array as $object) { 
    $calculator = $this->calculateDistance($object->origins, $object->destination); 
} 

그러나 se google 제한 요청 및 5500 개의 레코드 시간이 길어서 배열을 청크 할 수 있습니다.

희망이 당신을 도울 수