Я пытаюсь создать итеративный сканер для Google Places API. Как известно любому, кто использовал их API, ответ содержит только 20 результатов на страницу, и я пытаюсь получить полный список результатов, поэтому я создал l oop, который будет выполнять функцию, если присутствует поле next_page_token , Самое необычное происходит потому, что он успешно извлекает и отображает первые 20 результатов, но не выполняет второй поиск, но не выдает никаких ошибок в Laravel. Код для этого выглядит следующим образом (это Laravel)
public function getAllPlaces(){
if (Auth::user()->id != '5') {
return redirect('/userlanding')->with('error', 'Denied access');
} else {
$client = new Client();
$types = 'park';
$radius = '50000';
$location = [
'latitude' => '36.187740',
'longitude' => '-92.731422'
];
$keyword = '';
$requestQuery = "https://maps.googleapis.com/maps/api/place/nearbysearch/json?location={$location['latitude']},{$location['longitude']}&radius={$radius}&type={$types}{$keyword}&key=MYSUPERSECRETKEY";
$response = $client->request('GET', $requestQuery);
$statusCode = $response->getStatusCode();
$body = $response->getBody()->getContents();
$body = json_decode($body);
$numofrecordspresent = 0;
$data = $body->results;
$results = collect();
foreach($data as $result) {
$results->push($result;
$numofrecordspresent = $numofrecordspresent + 1;
}
}
if(isset($body->next_page_token)) {
$loopData = [
'nexttoken' => $body->next_page_token,
'locationData' => $location,
'numofrecordspresent' => $numofrecordspresent,
'radius' => $radius,
'types' => $types,
'keyword' => $keyword,
'client' => $client,
];
$this->loopedPlaceSearch($loopData);
} else {
return view('apireturnpage')->with('numofrecordspresent', $numofrecordspresent);
}
}
}
public function loopedPlaceSearch($loopData) {
$client = new Client();
$location = $loopData['locationData'];
$numofrecordspresent = $loopData['numofrecordspresent'];
$pagetoken = $loopData['nexttoken'];
$radius = $loopData['radius'];
$types = $loopData['types'];
$keyword = $loopData['keyword'];
$requestQuery = "https://maps.googleapis.com/maps/api/place/nearbysearch/json?location={$location['latitude']},{$location['longitude']}&radius={$radius}&type={$types}{$keyword}&pagetoken={$pagetoken}&key=MYSUPERSECRETKEY";
$response = $client->request('GET', $requestQuery);
$statusCode = $response->getStatusCode();
$body = $response->getBody()->getContents();
$body = json_decode($body);
$data = $body->results;
$results = collect();
foreach($data as $result) {
$results->push($result;
$numofrecordspresent = $numofrecordspresent + 1;
}
}
if (isset($body->next_page_token)) {
$loopData = [
'nexttoken' => $body->next_page_token,
'locationData' => $location,
'numofrecordspresent' => $numofrecordspresent,
];
$this->loopedPlaceSearch($loopData);
} else {
return view('apireturnpage')->with('numofrecordspresent', $numofrecordspresent);
}
}
На данный момент, чтобы проработать то, что я сказал ранее, первая функция, которая вызывается из сети. php работает просто отлично, помещая все 20 результатов в коллекцию результатов, но когда есть больше результатов (то есть присутствует next_page_token), вторая функция вызывается, но возвращает «INVALID_REQUEST» в теле. Это очень странно, потому что получение точной фактической строки запроса из второй функции, которая используется, но не удается, и помещение ее в мою строку URL-адреса возвращает правильный ответ, исключая любые опечатки в вызове API.
Любая помощь будет Буду признателен, похоже, это ошибка, и я не могу понять, почему она не работает.