. * * @package LibreNMS * @link http://librenms.org * @copyright 2018 Tony Murray * @author Tony Murray */ namespace App\ApiClients; use Exception; use LibreNMS\Config; use LibreNMS\Interfaces\Geocoder; class GoogleMapsApi extends BaseApi implements Geocoder { use GeocodingHelper; protected $base_uri = 'https://maps.googleapis.com'; protected $geocoding_uri = '/maps/api/geocode/json'; /** * Get latitude and longitude from geocode response * * @param array $data * @return array */ private function parseLatLng($data) { return [ 'lat' => isset($data['results'][0]['geometry']['location']['lat']) ? $data['results'][0]['geometry']['location']['lat'] : 0, 'lng' => isset($data['results'][0]['geometry']['location']['lng']) ? $data['results'][0]['geometry']['location']['lng'] : 0, ]; } /** * Get messages from response. * * @param array $data * @return array */ protected function parseMessages($data) { return [ 'error' => isset($data['error_message']) ? $data['error_message'] : '', 'response' => $data, ]; } /** * Build Guzzle request option array * * @param string $address * @return array * @throws \Exception you may throw an Exception if validation fails */ protected function buildGeocodingOptions($address) { $api_key = Config::get('geoloc.api_key'); if (!$api_key) { throw new Exception('Google Maps API key missing, set geoloc.api_key'); } return [ 'query' => [ 'key' => $api_key, 'address' => $address, ] ]; } /** * Checks if the request was a success * * @param \Psr\Http\Message\ResponseInterface $response * @param array $data decoded response data * @return bool * @throws Exception you may throw an Exception if validation fails */ protected function checkResponse($response, $data) { return $response->getStatusCode() == 200 && $data['status'] == 'OK'; } }