1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84
<?php
namespace SIW\External;
class Postcode_Lookup{
const API_URL = 'https://geodata.nationaalgeoregister.nl/locatieserver/v3/free';
public function get_address( string $postcode, string $housenumber ) {
$address = get_transient( "siw_address_{$postcode}_{$housenumber}" );
if ( false === $address ) {
$address = $this->retrieve_address( $postcode, $housenumber );
if ( false === $address ) {
return false;
}
set_transient( "siw_address_{$postcode}_{$housenumber}", $address, MONTH_IN_SECONDS );
}
return $address;
}
protected function retrieve_address( string $postcode, string $housenumber ) {
$url = add_query_arg( [
'q' => "postcode:{$postcode}",
'fq' => "huisnummer:{$housenumber}",
], self::API_URL );
$args = [
'timeout' => 10,
'redirection' => 0,
];
$response = wp_safe_remote_get( $url, $args );
if ( is_wp_error( $response ) ) {
return false;
}
$statuscode = wp_remote_retrieve_response_code( $response );
if ( \WP_Http::OK != $statuscode ) {
return false;
}
$body = json_decode( wp_remote_retrieve_body( $response ) );
if ( 0 === $body->response->numFound ) {
return false;
}
$address = [
'street' => $body->response->docs[0]->straatnaam,
'city' => $body->response->docs[0]->woonplaatsnaam,
];
return $address;
}
}