Sample code for 30+ languages & platforms
Tcl

Google Maps Geolocation Request

See more REST Examples

Demonstrates how make a Google Maps Geolocation REST API request.

Chilkat Tcl Downloads

Tcl

load ./chilkat.dll

set 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.

set rest [new_CkRest]

# Connect to the Google API REST server.
set bTls 1
set port 443
set bAutoReconnect 1
set success [CkRest_Connect $rest "www.googleapis.com" $port $bTls $bAutoReconnect]

# Add the Content-Type request header.
CkRest_AddHeader $rest "Content-Type" "application/json"

# Add your API key as a query parameter
CkRest_AddQueryParam $rest "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
#   }
#  ]
# }

set json [new_CkJsonObject]

CkJsonObject_AppendInt $json "homeMobileCountryCode" 310
CkJsonObject_AppendInt $json "homeMobileNetworkCode" 260
CkJsonObject_AppendString $json "radioType" "gsm"
CkJsonObject_AppendString $json "carrier" "T-Mobile"

set aCellTowers [new_CkJsonArray]

CkJsonObject_AppendArray2 $json "cellTowers" $aCellTowers

set oCellTower [new_CkJsonObject]

CkJsonArray_AddObjectAt2 $aCellTowers 0 $oCellTower
CkJsonObject_AppendInt $oCellTower "cellId" 39627456
CkJsonObject_AppendInt $oCellTower "locationAreaCode" 40495
CkJsonObject_AppendInt $oCellTower "mobileCountryCode" 310
CkJsonObject_AppendInt $oCellTower "mobileNetworkCode" 260
CkJsonObject_AppendInt $oCellTower "age" 0
CkJsonObject_AppendInt $oCellTower "signalStrength" -95

set aWifi [new_CkJsonArray]

CkJsonObject_AppendArray2 $json "wifiAccessPoints" $aWifi

set oPoint [new_CkJsonObject]

CkJsonArray_AddObjectAt2 $aWifi 0 $oPoint
CkJsonObject_AppendString $oPoint "macAddress" "01:23:45:67:89:AB"
CkJsonObject_AppendInt $oPoint "signalStrength" 8
CkJsonObject_AppendInt $oPoint "age" 0
CkJsonObject_AppendInt $oPoint "signalToNoiseRatio" -65
CkJsonObject_AppendInt $oPoint "channel" 8

CkJsonArray_AddObjectAt2 $aWifi 1 $oPoint
CkJsonObject_AppendString $oPoint "macAddress" "01:23:45:67:89:AC"
CkJsonObject_AppendInt $oPoint "signalStrength" 4
CkJsonObject_AppendInt $oPoint "age" 0

set responseJson [CkRest_fullRequestString $rest "POST" "/geolocation/v1/geolocate" [CkJsonObject_emit $json]]
if {[CkRest_get_LastMethodSuccess $rest] == 0} then {
    puts [CkRest_lastErrorText $rest]
    delete_CkRest $rest
    delete_CkJsonObject $json
    delete_CkJsonArray $aCellTowers
    delete_CkJsonObject $oCellTower
    delete_CkJsonArray $aWifi
    delete_CkJsonObject $oPoint
    exit
}

# When successful, the response code is 200.
if {[CkRest_get_ResponseStatusCode $rest] != 200} then {
    # Examine the request/response to see what happened.
    puts "response status code = [CkRest_get_ResponseStatusCode $rest]"
    puts "response status text = [CkRest_responseStatusText $rest]"
    puts "response header: [CkRest_responseHeader $rest]"
    puts "response JSON: $responseJson"
    puts "---"
    puts "LastRequestStartLine: [CkRest_lastRequestStartLine $rest]"
    puts "LastRequestHeader: [CkRest_lastRequestHeader $rest]"
    delete_CkRest $rest
    delete_CkJsonObject $json
    delete_CkJsonArray $aCellTowers
    delete_CkJsonObject $oCellTower
    delete_CkJsonArray $aWifi
    delete_CkJsonObject $oPoint
    exit
}

CkJsonObject_put_EmitCompact $json 0
puts "JSON request body: [CkJsonObject_emit $json]"

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

puts "JSON response: $responseJson"

set jsonResp [new_CkJsonObject]

CkJsonObject_Load $jsonResp $responseJson

set jsonLoc [new_CkJsonObject]

CkJsonObject_ObjectOf2 $jsonResp "location" $jsonLoc

# Any JSON value can be obtained as a string..
set latitude [CkJsonObject_stringOf $jsonLoc "lat"]
puts "latitude = $latitude"
set longitude [CkJsonObject_stringOf $jsonLoc "lng"]
puts "longitude = $longitude"

set accuracy [CkJsonObject_stringOf $jsonResp "accuracy"]
puts "accuracy = $accuracy"

delete_CkRest $rest
delete_CkJsonObject $json
delete_CkJsonArray $aCellTowers
delete_CkJsonObject $oCellTower
delete_CkJsonArray $aWifi
delete_CkJsonObject $oPoint
delete_CkJsonObject $jsonResp
delete_CkJsonObject $jsonLoc