Sample code for 30+ languages & platforms
Chilkat2-Python

UPS Address Validation (City, State, Zip)

See more HTTP Misc Examples

Demonstrates making a call to the UPS address validation REST API.

Chilkat Chilkat2-Python Downloads

Chilkat2-Python
import sys
import chilkat2

success = False

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

http = chilkat2.Http()

# This is the testing endpoint for address validation:
url = "https://wwwcie.ups.com/rest/AV"

# Send an HTTP request with the following JSON body:

# {
#   "AccessRequest": {
#     "AccessLicenseNumber": "Your Access License Number",
#     "UserId": "Your Username",
#     "Password": "Your Password"
#   },
#   "AddressValidationRequest": {
#     "Request": {
#       "TransactionReference": {
#         "CustomerContext": "Your Customer Context"
#       },
#       "RequestAction": "AV"
#     },
#     "Address": {
#       "City": "ALPHARETTA",
#       "StateProvinceCode": "GA",
#       "PostalCode": "30005"
#     }
#   }
# }

# Build the above JSON.
json = chilkat2.JsonObject()
json.UpdateString("AccessRequest.AccessLicenseNumber","UPS_ACCESS_KEY")
json.UpdateString("AccessRequest.UserId","UPS_USERNAME")
json.UpdateString("AccessRequest.Password","UPS_PASSWORD")
json.UpdateString("AddressValidationRequest.Request.TransactionReference.CustomerContext","Your Customer Context")
json.UpdateString("AddressValidationRequest.Request.RequestAction","AV")
json.UpdateString("AddressValidationRequest.Address.City","ALPHARETTA")
# We're making an intentional mistake here by passing CA instead of GA.
json.UpdateString("AddressValidationRequest.Address.StateProvinceCode","CA")
json.UpdateString("AddressValidationRequest.Address.PostalCode","30005")

sb = chilkat2.StringBuilder()
resp = chilkat2.HttpResponse()
success = http.HttpJson("POST",url,json,"application/json",resp)
if (success == False):
    print(http.LastErrorText)
    sys.exit()

print("status = " + str(resp.StatusCode))

# A 200 response status indicate success.
if (resp.StatusCode != 200):
    print(resp.BodyStr)
    print("Failed.")
    sys.exit()

json.Load(resp.BodyStr)
json.EmitCompact = False
print(json.Emit())

# A successful exact response looks like this:

# {
#   "AddressValidationResponse": {
#     "Response": {
#       "TransactionReference": {
#         "CustomerContext": "Your Customer Context"
#       },
#       "ResponseStatusCode": "1",
#       "ResponseStatusDescription": "Success"
#     },
#     "AddressValidationResult": {
#       "Rank": "1",
#       "Quality": "1.0",
#       "Address": {
#         "City": "ALPHARETTA",
#         "StateProvinceCode": "GA"
#       },
#       "PostalCodeLowEnd": "30005",
#       "PostalCodeHighEnd": "30005"
#     }
#   }
# }
# 

# A successful response that was not an exact match provides an array of closest matches, like this:

# {
#   "AddressValidationResponse": {
#     "Response": {
#       "TransactionReference": {
#         "CustomerContext": "Your Customer Context"
#         "Quality": "0.9875",
#         "Address": {
#       },
#       "ResponseStatusCode": "1",
#       "ResponseStatusDescription": "Success"
#     },
#     "AddressValidationResult": [
#       {
#         "Rank": "1",
#           "City": "ALPHARETTA",
#           "StateProvinceCode": "GA"
#         },
#         "PostalCodeLowEnd": "30005",
#         "PostalCodeHighEnd": "30005"
#       },
#       {
#         "Rank": "2",
#         "Quality": "0.9750",
#         "Address": {
#           "City": "ALPHARETTA",
#           "StateProvinceCode": "GA"
#         },
#         "PostalCodeLowEnd": "30004",
#         "PostalCodeHighEnd": "30004"
#       },
#       {
#         "Rank": "3",
#         "Quality": "0.9750",
#         "Address": {
#           "City": "ALPHARETTA",
#           "StateProvinceCode": "GA"
#         },
#         "PostalCodeLowEnd": "30009",
#         "PostalCodeHighEnd": "30009"
#       }
#     ]
#   }
# }

# Use the online tool at Generate JSON Parsing Code
# to generate JSON parsing code.

numResults = json.SizeOfArray("AddressValidationResponse.AddressValidationResult")
if (numResults < 0):

    # Here's parse code for the above JSON exact response:
    customerContext = json.StringOf("AddressValidationResponse.Response.TransactionReference.CustomerContext")
    statusCode = json.StringOf("AddressValidationResponse.Response.ResponseStatusCode")
    statusDescription = json.StringOf("AddressValidationResponse.Response.ResponseStatusDescription")
    resultRank = json.StringOf("AddressValidationResponse.AddressValidationResult.Rank")
    resultQuality = json.StringOf("AddressValidationResponse.AddressValidationResult.Quality")
    city = json.StringOf("AddressValidationResponse.AddressValidationResult.Address.City")
    provinceCode = json.StringOf("AddressValidationResponse.AddressValidationResult.Address.StateProvinceCode")
    postalCodeLowEnd = json.StringOf("AddressValidationResponse.AddressValidationResult.PostalCodeLowEnd")
    postalCodeHighEnd = json.StringOf("AddressValidationResponse.AddressValidationResult.PostalCodeHighEnd")

    print("Exact match!")
    print("postal code: " + postalCodeLowEnd)

else:

    print("Non-Exact match.")

    customerContext = json.StringOf("AddressValidationResponse.Response.TransactionReference.CustomerContext")
    statusCode = json.StringOf("AddressValidationResponse.Response.ResponseStatusCode")
    statusDescription = json.StringOf("AddressValidationResponse.Response.ResponseStatusDescription")
    i = 0
    while i < numResults :
        json.I = i
        rank = json.StringOf("AddressValidationResponse.AddressValidationResult[i].Rank")
        print("rank: " + rank)
        quality = json.StringOf("AddressValidationResponse.AddressValidationResult[i].Quality")
        addressCity = json.StringOf("AddressValidationResponse.AddressValidationResult[i].Address.City")
        print("addressCity: " + addressCity)
        addressStateProvinceCode = json.StringOf("AddressValidationResponse.AddressValidationResult[i].Address.StateProvinceCode")
        postalCodeLowEnd = json.StringOf("AddressValidationResponse.AddressValidationResult[i].PostalCodeLowEnd")
        print("postal code: " + postalCodeLowEnd)
        postalCodeHighEnd = json.StringOf("AddressValidationResponse.AddressValidationResult[i].PostalCodeHighEnd")
        i = i + 1