Skip to content

Commit 1613d4e

Browse files
author
Jordan Hall
committed
Completed support for PostcodeAnywhere and refactored to use custom Address object
1 parent 1694ce8 commit 1613d4e

6 files changed

Lines changed: 81 additions & 33 deletions

File tree

Example.php

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,18 +2,21 @@
22
require_once 'vendor/autoload.php';
33
use \RapidWeb\Postcodes\Utils\Generator;
44
use \RapidWeb\Postcodes\Utils\Validator;
5-
use \RapidWeb\Postcodes\Objects\IdealPostCodes;
5+
use \RapidWeb\Postcodes\Objects\IdealPostcodes;
6+
use \RapidWeb\Postcodes\Objects\PostcodeAnywhere;
67

78
$postcode = Generator::generatePostcode();
89

910
var_dump($postcode);
1011

1112
$validated = Validator::validatePostcode($postcode);
1213

13-
if ($validated) {
14+
var_dump($validated);
1415

15-
$addresses = new IdealPostCodes('API_KEY');
16+
$idealPostcodes = new IdealPostCodes('API_KEY');
17+
$addresses = $idealPostcodes->getAddressesByPostcode('ST16 3DP');
18+
var_dump($addresses);
1619

17-
var_dump($addresses);
18-
19-
}
20+
$postcodeAnywhere = new PostcodeAnywhere('API_KEY');
21+
$addresses = $postcodeAnywhere->getAddressesByPostcode('ST16 3DP');
22+
var_dump($addresses);

README.md

Lines changed: 12 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -17,38 +17,33 @@ To install, just run the following composer command.
1717

1818
## Setup
1919

20-
### Ideal Postcodes
20+
### Postcode Lookup Services
2121

22-
Using some of the data retrieval features provided by this library requires an Ideal Postcodes
23-
API key. Sign up at https://ideal-postcodes.co.uk if you need to use these features.
22+
Using some of the data retrieval features provided by this library requires a postcode lookup service.
23+
It currently supports the following postcode lookup services.
2424

25-
You can then use the following code to get an `IdealPostcodes` object.
25+
* Ideal Postcodes - https://ideal-postcodes.co.uk
26+
* Postcode Anywhere (PCA Predict) - https://www.pcapredict.com/
2627

27-
```php
28-
$idealPostcodes = new \RapidWeb\Postcodes\Objects\IdealPostcodes('API_KEY');
29-
```
30-
31-
32-
### Postcode Anywhere (PCA Predict)
33-
34-
Using some of the data retrieval features provided by this library requires an Postcode Anywhere (PCA Predict)
35-
API key. Sign up at https://www.pcapredict.com/ if you need to use these features.
28+
Sign up at the respective website if you need to use these features.
3629

37-
You can then use the following code to get an `PostcodeAnywhere` object.
30+
You can then use the following code to get an appropriate postcode lookup service object.
3831

3932
```php
40-
$postcodeAnywhere = new \RapidWeb\Postcodes\Objects\PostcodeAnywhere('API_KEY');
33+
$postcodeLookupService = new \RapidWeb\Postcodes\Objects\IdealPostcodes('API_KEY');
34+
// OR
35+
$postcodeLookupService = new \RapidWeb\Postcodes\Objects\PostcodeAnywhere('API_KEY');
4136
```
4237

4338
## Usage
4439

4540
### Get addresses by postcode
4641

4742
To retrieve the addreses associated with a UK postcode, just pass it to the method shown below.
48-
You will receive an array of addresses, appropriately split by their address lines.
43+
You will receive an array of address objects, appropriately split by their address lines and other details.
4944

5045
```php
51-
$addresses = $idealPostcodes->getAddressesByPostcode('ST163DP');
46+
$addresses = $postcodeLookupService->getAddressesByPostcode('ST163DP');
5247
```
5348

5449
### Validate postcode

pa-test.php

Lines changed: 0 additions & 8 deletions
This file was deleted.

src/Objects/Address.php

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
<?php
2+
namespace RapidWeb\Postcodes\Objects;
3+
4+
class Address
5+
{
6+
public $companyName = '';
7+
public $line1 = '';
8+
public $line2 = '';
9+
public $line3 = '';
10+
public $townCity = '';
11+
public $county = '';
12+
public $country = 'United Kingdom';
13+
public $postcode = '';
14+
}

src/Objects/IdealPostcodes.php

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
use GuzzleHttp\Client;
55
use GuzzleHttp\Psr7\Response;
66
use RapidWeb\Postcodes\Interfaces\PostcodeServiceInterface;
7+
use RapidWeb\Postcodes\Objects\Address;
78
use Exception;
89

910
class IdealPostCodes implements PostcodeServiceInterface
@@ -58,7 +59,22 @@ private function parseResponse(Response $response)
5859
throw new Exception('Response does not contain a result.');
5960
}
6061

61-
return $object->result;
62+
$addresses = [];
63+
64+
foreach($object->result as $idealPostcodesAddress) {
65+
$address = new Address;
66+
$address->companyName = $idealPostcodesAddress->organisation_name;
67+
$address->line1 = $idealPostcodesAddress->line_1;
68+
$address->line2 = $idealPostcodesAddress->line_2;
69+
$address->line3 = $idealPostcodesAddress->line_3;
70+
$address->townCity = $idealPostcodesAddress->post_town;
71+
$address->county = $idealPostcodesAddress->county;
72+
$address->country = $idealPostcodesAddress->country;
73+
$address->postcode = $idealPostcodesAddress->postcode;
74+
$addresses[] = $address;
75+
}
76+
77+
return $addresses;
6278

6379
}
6480
}

src/Objects/PostcodeAnywhere.php

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,15 @@
44
use GuzzleHttp\Client;
55
use GuzzleHttp\Psr7\Response;
66
use RapidWeb\Postcodes\Interfaces\PostcodeServiceInterface;
7+
use RapidWeb\Postcodes\Objects\Address;
78
use Exception;
89
use SoapClient;
910

1011
class PostcodeAnywhere implements PostcodeServiceInterface
1112
{
1213
private $apiKey = null;
1314
private $findSOAPClient = null;
15+
private $retrieveByIDSOAPClient = null;
1416

1517
public function __construct($apiKey)
1618
{
@@ -21,6 +23,7 @@ public function __construct($apiKey)
2123
$this->apiKey = $apiKey;
2224

2325
$this->findSOAPClient = new SoapClient('https://services.postcodeanywhere.co.uk/PostcodeAnywhere/Interactive/Find/v1.10/wsdlnew.ws');
26+
$this->retrieveByIDSOAPClient = new \SoapClient('https://services.postcodeanywhere.co.uk/PostcodeAnywhere/Interactive/RetrieveById/v1.30/wsdlnew.ws');
2427

2528
}
2629

@@ -35,7 +38,32 @@ public function getAddressesByPostcode($postcode)
3538

3639
$findResponseAddresses = $findResponse->PostcodeAnywhere_Interactive_Find_v1_10_Result->PostcodeAnywhere_Interactive_Find_v1_10_Results;
3740

38-
return $result;
41+
$addresses = [];
42+
43+
foreach($findResponseAddresses as $findResponseAddress) {
44+
45+
$retrieveByIDResponse = $this->retrieveByIDSOAPClient->PostcodeAnywhere_Interactive_RetrieveById_v1_30(
46+
[
47+
'Key' => $this->apiKey,
48+
'Id' => $findResponseAddress->Id
49+
]
50+
);
51+
52+
$retrieveAddress = $retrieveByIDResponse->PostcodeAnywhere_Interactive_RetrieveById_v1_30_Result->PostcodeAnywhere_Interactive_RetrieveById_v1_30_Results;
53+
54+
$address = new Address;
55+
$address->companyName = $retrieveAddress->Company;
56+
$address->line1 = $retrieveAddress->Line1;
57+
$address->line2 = $retrieveAddress->Line2;
58+
$address->line3 = $retrieveAddress->Line3;
59+
$address->townCity = $retrieveAddress->PostTown;
60+
$address->county = $retrieveAddress->County;
61+
$address->postcode = $retrieveAddress->Postcode;
62+
$address->country = $retrieveAddress->CountryName;
63+
$addresses[] = $address;
64+
}
65+
66+
return $addresses;
3967
}
4068

4169
}

0 commit comments

Comments
 (0)