Last active
May 20, 2018 12:44
-
-
Save SalesforceBobLightning/54d57b8cd4e491cd3f74bde9396f4f1d to your computer and use it in GitHub Desktop.
Using getAddress() / getaddress.io postcode address lookup with Salesforce Apex
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public class GetAddressAPI { | |
// Get Address API: https://getaddress.io/ | |
// Documentation: https://getaddress.io/Documentation | |
public String getAddresses(String postcode) { | |
if (postcode == null) { | |
return null; | |
} | |
string responseData = makeAPICall(postcode); | |
System.debug(responseData); | |
if (responseData == null){ | |
return null; | |
} | |
LookupAddressResponse response = (LookupAddressResponse)JSON.deserialize(responseData, LookupAddressResponse.class); | |
List<LookupAddress> addresses = new List<LookupAddress>(); | |
for(string a : response.addresses){ | |
String[] segments = a.split(','); | |
LookupAddress address = new LookupAddress(); | |
address.latitude = response.latitude; | |
address.longitude = response.longitude; | |
address.line1 = segments[0].trim(); | |
address.line2 = segments[1].trim(); | |
address.line3 = segments[2].trim(); | |
address.line4 = segments[3].trim(); | |
address.locality = segments[4].trim(); | |
address.townCity = segments[5].trim(); | |
address.county = segments[6].trim(); | |
address.postcode = postcode; | |
String fullAddress = ''; | |
for (string segment : segments){ | |
if (String.isNotBlank(segment)){ | |
if (fullAddress != ''){ | |
fullAddress += ', '; | |
} | |
fullAddress += segment; | |
} | |
} | |
fullAddress += ', ' + postcode; | |
address.FullAddress = fullAddress; | |
addresses.add(address); | |
} | |
return JSON.serialize(addresses); | |
} | |
public string makeAPICall(string postcode) { | |
if (postcode == null) { | |
return null; | |
} | |
String url = 'https://api.getAddress.io/find/' | |
+ EncodingUtil.urlEncode(postcode.replace(' ', ''), 'UTF-8') | |
+ '?api-key=' + getAPIKey(); | |
Http http = new Http(); | |
HttpRequest request = new HttpRequest(); | |
HttpResponse httpResponse = new HttpResponse(); | |
request.setMethod('GET'); | |
request.setEndpoint(url); | |
request.setTimeout(120000); | |
httpResponse = http.send(request); | |
if (httpResponse.getStatusCode() == 200){ | |
return httpResponse.getBody(); | |
} else { | |
System.debug(httpResponse.getStatusCode()); | |
System.debug(httpResponse.getBody()); | |
throw new AuraHandledException(httpResponse.getBody()); | |
} | |
} | |
private String getAPIKey() { | |
return ''; // Add your API key or get it from custom settings | |
} | |
class LookupAddressResponse { | |
Decimal latitude; | |
Decimal longitude; | |
List<String> addresses; | |
} | |
class LookupAddress { | |
Decimal latitude; | |
Decimal longitude; | |
String fullAddress; | |
String line1; | |
String line2; | |
String line3; | |
String line4; | |
String locality; | |
String townCity; | |
String county; | |
String postcode; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment