Я нашел несколько способов сделать это с помощью веб-API. Я думаю, что Почтовая служба США будет наиболее точной, поскольку почтовые индексы - это их дело, но Ziptastic выглядит намного проще.
Использование HTTP / XML API почтовой службы США
Согласно этой странице веб-сайта Почтовой службы США, которая документирует их веб-API на основе XML , в частности, раздел 4.0 (стр. 22) этого PDF-документа , у них есть URL-адрес, по которому вы можете отправить XML-запрос, содержащий 5-значный почтовый индекс, и они будут ответьте 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 делает требует , чтобы вы регистрируетесь с ними , прежде чем вы можете использовать API, но, насколько я мог судить, не взимать плату за доступ. Кстати, у их API есть и другие функции: вы можете выполнять стандартизацию адресов и поиск по почтовому индексу, а также весь набор отслеживания, доставки, этикеток и т. Д.
Обновление: с 13 августа 2017 г. Ziptastic стал платным API, и его можно найти здесь.
Это довольно новый сервис, но, согласно их документации, похоже, что все, что вам нужно сделать, это отправить запрос GET на http://ziptasticapi.com , например:
GET http://ziptasticapi.com/48867
И они вернут объект JSON в следующем виде:
{"country": "US", "state": "MI", "city": "OWOSSO"}
Действительно, работает. Вы можете проверить это из командной строки, выполнив примерно следующее:
curl http://ziptasticapi.com/48867
geocoder.cit.api.here.com/6.2/geocode.json?PostalCode=2400&country=Denmark&app_id={APP_ID}&app_code={APP_CODE}&gen=9
(вы можете предоставить части адреса )