Sample code for 30+ languages & platforms
Tcl Requires Chilkat v11.1.0+

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