Tcl
Tcl
Google Maps Geolocation Request
See more REST Examples
Demonstrates how make a Google Maps Geolocation REST API request.Chilkat Tcl Downloads
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