private function executeQuery($query)
{
if (null !== $this->getLocale()) {
$query = sprintf('%s&culture=%s', $query, str_replace('_', '-', $this->getLocale()));
}
$request = $this->getMessageFactory()->createRequest('GET', $query);
$content = (string) $this->getHttpClient()->sendRequest($request)->getBody();
if (empty($content)) {
throw new NoResult(sprintf('Could not execute query "%s".', $query));
}
$json = json_decode($content);
if (!isset($json->resourceSets[0]) || !isset($json->resourceSets[0]->resources)) {
throw new NoResult(sprintf('Could not execute query "%s".', $query));
}
$data = (array) $json->resourceSets[0]->resources;
$results = [];
foreach ($data as $item) {
$coordinates = (array) $item->geocodePoints[0]->coordinates;
$bounds = null;
if (isset($item->bbox) && is_array($item->bbox) && count($item->bbox) > 0) {
$bounds = ['south' => $item->bbox[0], 'west' => $item->bbox[1], 'north' => $item->bbox[2], 'east' => $item->bbox[3]];
}
$streetNumber = null;
$streetName = property_exists($item->address, 'addressLine') ? (string) $item->address->addressLine : '';
$zipcode = property_exists($item->address, 'postalCode') ? (string) $item->address->postalCode : '';
$city = property_exists($item->address, 'locality') ? (string) $item->address->locality : '';
$country = property_exists($item->address, 'countryRegion') ? (string) $item->address->countryRegion : '';
$countryCode = property_exists($item->address, 'countryRegionIso2') ? (string) $item->address->countryRegionIso2 : '';
$adminLevels = [];
foreach (['adminDistrict', 'adminDistrict2'] as $i => $property) {
if (property_exists($item->address, $property)) {
$adminLevels[] = ['name' => $item->address->{$property}, 'level' => $i + 1];
}
}
$results[] = array_merge($this->getDefaults(), ['latitude' => $coordinates[0], 'longitude' => $coordinates[1], 'bounds' => $bounds, 'streetNumber' => $streetNumber, 'streetName' => $streetName, 'locality' => empty($city) ? null : $city, 'postalCode' => empty($zipcode) ? null : $zipcode, 'adminLevels' => $adminLevels, 'country' => empty($country) ? null : $country, 'countryCode' => empty($countryCode) ? null : $countryCode]);
}
return $this->returnResults($results);
}