academe/idealpostcodes

访问 Ideal Postcodes API

0.9.1 2015-07-01 17:25 UTC

This package is auto-updated.

Last update: 2024-08-23 03:27:46 UTC


README

Latest Stable Version Total Downloads

访问 Ideal Postcodes API 的库。API 的主要文档在此:[https://ideal-postcodes.co.uk/documentation](https://ideal-postcodes.co.uk/documentation)

仍在开发中,但已是一个可工作的库。此包并非官方与 Ideal Postcodes 关联。

通用方法

这是我开发此库所采取的通用方法。最初是一天之内为了满足一个特定项目的需求而编写的,所以可能有点匆忙,但我尽量使其尽可能通用。但仍需要扩展更多接口,也许可以利用依赖注入定位器,以便根据需要扩展类。

与远程 API 的通信发生在 Transport 对象中。使用您的 API 密钥实例化该对象,并将其传递给其他类。此类使用 curl 进行通信,但您可能希望创建一个 guzzle 版本或使用不同的 http 客户端 - 只需编写一个适配器即可。

每个值类有两个用途

  • 用于存储从 API 获取的单个记录的值。
  • 用于向 API 发送请求。

因此,如果您想查找,例如,邮编的地址,则实例化 Postcode 对象,然后使用其 getAddresses($postcode) 方法获取邮编的地址对象集合。Postcode 对象将保存与 API 的交互摘要(结果、任何消息等),而 getAddresses() 方法将返回一个集合。

集合由 phpcollection/phpcollection composer 包提供。这是一个新且基本未经测试的包,但似乎很好地满足了这里的需要。我打算在未来使集合更通用,这样您就不必仅限于使用一种集合实现。

示例

示例用法,获取匹配邮编的地址列表

use Academe\IdealPostcodes\Postcode;
use Academe\IdealPostcodes\Transport;

// 'iddqd' is the shared developer API key, limited to 15 requests per day for each IP address.
$transport = new Transport('iddqd');
$postcode = new Postcode($transport);

$addresses = $postcode->getAddresses('ID1 1QD');

foreach($addresses as $address) {
    echo $address->line_1 . "<br>";
}

echo "Number of addresses = " . count($addresses);

获取距离纬度/经度位置 300 米半径内的最多 20 个邮编

use Academe\IdealPostcodes\GeoLocation;
use Academe\IdealPostcodes\Transport;

$transport = new Transport('iddqd');
$geo = new GeoLocation($transport);

$postcodes = $geo->getPostcodes(-0.20864436, 51.48994883, 20, 300);

foreach($postcodes as $postcode) {
    echo $postcode->postcode . "<br>";
    echo $postcode->northings . "<br>";
    echo $postcode->eastings . "<br>";
}

echo "Number of postcodes = " . count($postcodes);

搜索地址

use Academe\IdealPostcodes\Address;
use Academe\IdealPostcodes\Transport;

$transport = new Transport('iddqd');
$addr = new Address($transport);

$addresses = $addr->search('10 Downing Street');

foreach($addresses as $address) {
    echo $postcode->town . "<br>";
}

通过其 ID(UDPRN)获取单个地址

use Academe\IdealPostcodes\Address;
use Academe\IdealPostcodes\Transport;

$transport = new Transport('iddqd');
$addr = new Address($transport);

$address = $addr->get(0);

var_dump($address->toArray());

待办事项

  • Keys API。这包括 CSV 下载,可以流式传输以帮助减少内存使用。
  • 更多和更好的文档。
  • 测试。
  • 考虑为集合创建适配器,以便使用其他集合。
  • 集合不是 JSON 可序列化的;如果它们是,那将有所帮助;目前使用 $collection->all() 并对序列化进行序列化。
  • 更多帮助方法来解释接收到的 API 码,以便更容易地识别 HTTP 错误、无法找到匹配项等。
  • 也许可以考虑将所有请求方法放入一个类中,并返回邮编、地址以及从那里返回的集合。这样,记录可以是真正的值对象。这些方法分散在多个类中,只是为了历史原因,可能不是最佳方法。
  • 查询标签的支持,这些标签适用于所有 API 方法。