. * * @link https://www.librenms.org * * @copyright 2018 Tony Murray * @author Tony Murray */ namespace App\ApiClients; use Exception; use LibreNMS\Config; use LibreNMS\Interfaces\Geocoder; class BingApi extends BaseApi implements Geocoder { use GeocodingHelper; protected $base_uri = 'http://dev.virtualearth.net'; protected $geocoding_uri = '/REST/v1/Locations'; /** * Get latitude and longitude from geocode response * * @param array $data * @return array */ protected function parseLatLng($data) { return [ 'lat' => isset($data['resourceSets'][0]['resources'][0]['point']['coordinates'][0]) ? $data['resourceSets'][0]['resources'][0]['point']['coordinates'][0] : 0, 'lng' => isset($data['resourceSets'][0]['resources'][0]['point']['coordinates'][1]) ? $data['resourceSets'][0]['resources'][0]['point']['coordinates'][1] : 0, ]; } /** * 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('Bing API key missing, set geoloc.api_key'); } return [ 'query' => [ 'key' => $api_key, 'addressLine' => $address, ], ]; } /** * Checks if the request was a success * * @param \Psr\Http\Message\ResponseInterface $response * @param array $data decoded response data * @return bool */ protected function checkResponse($response, $data) { return $response->getStatusCode() == 200 && ! empty($data['resourceSets'][0]['resources']); } }