我发现了几种使用基于 Web 的 API 来实现此目的的方法。我觉得美国邮政服务 http://www.usps.com/是最准确的,因为邮政编码是他们的事,但是Ziptastic http://daspecster.github.com/ziptastic/看起来容易多了。
使用美国邮政服务 HTTP/XML API
根据这个美国邮政服务网站上的页面,记录了其基于 XML 的 Web API https://www.usps.com/business/webtools-technical-guides.htm,特别是第 4.0 节(第 22 页)这个PDF文档 https://www.usps.com/webtools/_pdf/Address-Information-v3-1b.pdf,他们有一个 URL,您可以在其中发送包含 5 位邮政编码的 XML 请求,他们将使用包含相应城市和州的 XML 文档进行响应。
根据他们的文档,您将发送以下内容:
http://SERVERNAME/ShippingAPITest.dll?API=CityStateLookup&XML=<CityStateLookupRequest%20USERID="xxxxxxx"><ZipCode ID= "0"><Zip5>90210</Zip5></ZipCode></CityStateLookupRequest>
以下是您将收到的回复:
<?xml version="1.0"?>
<CityStateLookupResponse>
<ZipCode ID="0">
<Zip5>90210</Zip5>
<City>BEVERLY HILLS</City>
<State>CA</State>
</ZipCode>
</CityStateLookupResponse>
USPS does要求您在使用 API 之前先向他们注册,但据我所知,访问是免费的。顺便说一句,他们的 API 还有一些其他功能:您可以进行地址标准化和邮政编码查找,以及整套跟踪、运输、标签等。
使用 Ziptastic HTTP/JSON API
这是一项相当新的服务,但根据他们的文档,看起来您需要做的就是发送 GET 请求到http://ziptasticapi.com http://ziptasticapi.com,像这样:
GET http://ziptasticapi.com/48867
他们将返回一个 JSON 对象,格式如下:
{"country": "US", "state": "MI", "city": "OWOSSO"}
确实,它有效。您可以通过执行以下操作从命令行测试这一点:
curl http://ziptasticapi.com/48867