Sample code for 30+ languages & platforms
Perl

Google Maps Geolocation Request

See more REST Examples

Demonstrates how make a Google Maps Geolocation REST API request.

Chilkat Perl Downloads

Perl
use chilkat();

$success = 0;

# This example duplicates the following CURL request:
# curl -d @your_filename.json -H "Content-Type: application/json" -i "https://www.googleapis.com/geolocation/v1/geolocate?key=YOUR_API_KEY"

# This example requires the Chilkat API to have been previously unlocked.
# See Global Unlock Sample for sample code.

$rest = chilkat::CkRest->new();

# Connect to the Google API REST server.
$bTls = 1;
$port = 443;
$bAutoReconnect = 1;
$success = $rest->Connect("www.googleapis.com",$port,$bTls,$bAutoReconnect);

# Add the Content-Type request header.
$rest->AddHeader("Content-Type","application/json");

# Add your API key as a query parameter
$rest->AddQueryParam("key","YOUR_API_KEY");

# The JSON query is contained in the body of the HTTP POST.
# This is a sample query (which we'll dynamically build in this example)
# { 
#  "homeMobileCountryCode": 310,
#  "homeMobileNetworkCode": 260,
#  "radioType": "gsm",
#  "carrier": "T-Mobile",
#  "cellTowers": [
#   {
#    "cellId": 39627456,
#    "locationAreaCode": 40495,
#    "mobileCountryCode": 310,
#    "mobileNetworkCode": 260,
#    "age": 0,
#    "signalStrength": -95
#   }
#  ],
#  "wifiAccessPoints": [
#   { 
#    "macAddress": "01:23:45:67:89:AB",
#    "signalStrength": 8,
#    "age": 0,
#    "signalToNoiseRatio": -65,
#    "channel": 8
#   },
#   { 
#    "macAddress": "01:23:45:67:89:AC",
#    "signalStrength": 4,
#    "age": 0
#   }
#  ]
# }

$json = chilkat::CkJsonObject->new();
$json->AppendInt("homeMobileCountryCode",310);
$json->AppendInt("homeMobileNetworkCode",260);
$json->AppendString("radioType","gsm");
$json->AppendString("carrier","T-Mobile");

$aCellTowers = chilkat::CkJsonArray->new();
$json->AppendArray2("cellTowers",$aCellTowers);

$oCellTower = chilkat::CkJsonObject->new();
$aCellTowers->AddObjectAt2(0,$oCellTower);
$oCellTower->AppendInt("cellId",39627456);
$oCellTower->AppendInt("locationAreaCode",40495);
$oCellTower->AppendInt("mobileCountryCode",310);
$oCellTower->AppendInt("mobileNetworkCode",260);
$oCellTower->AppendInt("age",0);
$oCellTower->AppendInt("signalStrength",-95);

$aWifi = chilkat::CkJsonArray->new();
$json->AppendArray2("wifiAccessPoints",$aWifi);

$oPoint = chilkat::CkJsonObject->new();
$aWifi->AddObjectAt2(0,$oPoint);
$oPoint->AppendString("macAddress","01:23:45:67:89:AB");
$oPoint->AppendInt("signalStrength",8);
$oPoint->AppendInt("age",0);
$oPoint->AppendInt("signalToNoiseRatio",-65);
$oPoint->AppendInt("channel",8);

$aWifi->AddObjectAt2(1,$oPoint);
$oPoint->AppendString("macAddress","01:23:45:67:89:AC");
$oPoint->AppendInt("signalStrength",4);
$oPoint->AppendInt("age",0);

$responseJson = $rest->fullRequestString("POST","/geolocation/v1/geolocate",$json->emit());
if ($rest->get_LastMethodSuccess() == 0) {
    print $rest->lastErrorText() . "\r\n";
    exit;
}

# When successful, the response code is 200.
if ($rest->get_ResponseStatusCode() != 200) {
    # Examine the request/response to see what happened.
    print "response status code = " . $rest->get_ResponseStatusCode() . "\r\n";
    print "response status text = " . $rest->responseStatusText() . "\r\n";
    print "response header: " . $rest->responseHeader() . "\r\n";
    print "response JSON: " . $responseJson . "\r\n";
    print "---" . "\r\n";
    print "LastRequestStartLine: " . $rest->lastRequestStartLine() . "\r\n";
    print "LastRequestHeader: " . $rest->lastRequestHeader() . "\r\n";
    exit;
}

$json->put_EmitCompact(0);
print "JSON request body: " . $json->emit() . "\r\n";

# The JSON response should look like this:
# { 
#  "location": {
#   "lat": 37.4248297,
#   "lng": -122.07346549999998
#  },
#  "accuracy": 1145.0
# }

print "JSON response: " . $responseJson . "\r\n";

$jsonResp = chilkat::CkJsonObject->new();
$jsonResp->Load($responseJson);

$jsonLoc = chilkat::CkJsonObject->new();
$jsonResp->ObjectOf2("location",$jsonLoc);

# Any JSON value can be obtained as a string..
$latitude = $jsonLoc->stringOf("lat");
print "latitude = " . $latitude . "\r\n";
$longitude = $jsonLoc->stringOf("lng");
print "longitude = " . $longitude . "\r\n";

$accuracy = $jsonResp->stringOf("accuracy");
print "accuracy = " . $accuracy . "\r\n";