academe / idealpostcodes
访问 Ideal Postcodes API
Requires
- php: >=5.4.0
- ext-json: *
- phpcollection/phpcollection: ^0.4.0
Requires (Dev)
- phpunit/phpunit: ~4.0
This package is auto-updated.
Last update: 2024-08-23 03:27:46 UTC
README
访问 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 方法。