Je veux fondamentalement récupérer une liste de ville et d'état dans un code postal. L'API Geocode de Google est-il capable de le faire? J'ai essayé de regarder dans la documentation mais j'ai trouvé l'information écrasante.
Toute aide serait appréciée. S'il existe une autre méthode pour accomplir cette tâche, veuillez me le faire savoir.
Merci
EDIT: J'ai pu récupérer la ville et l'état via: http://maps.google.com/maps/geo?output=xml&q=14606 mais existe-t-il une limite à cela?
Utilisez le API GeoCoding
Par exemple, pour rechercher le zip 77379, utilisez une requête comme celle-ci:
http://maps.googleapis.com/maps/api/geocode/json?address=77379&sensor=true
J'ai trouvé plusieurs façons de procéder avec des API Web. Je pense que le S Postal Service serait le plus précis, car les codes postaux sont ce qu’ils recherchent, mais Ziptastic semble beaucoup plus facile.
Selon cette page sur le site Web du US Postal Service qui documente son API Web basée sur XML , en particulier la section 4.0 (page 22) de this PDF document , ils ont une URL où vous pouvez envoyer une demande XML contenant un code postal à 5 chiffres et ils répondent avec un document XML contenant la ville et l'état correspondants.
Selon leur documentation, voici ce que vous enverriez:
http://SERVERNAME/ShippingAPITest.dll?API=CityStateLookup&XML=<CityStateLookupRequest%20USERID="xxxxxxx"><ZipCode ID= "0"><Zip5>90210</Zip5></ZipCode></CityStateLookupRequest>
Et voici ce que vous recevrez en retour:
<?xml version="1.0"?>
<CityStateLookupResponse>
<ZipCode ID="0">
<Zip5>90210</Zip5>
<City>BEVERLY HILLS</City>
<State>CA</State>
</ZipCode>
</CityStateLookupResponse>
USPS fait vous devez vous enregistrer auprès d'eux avant de pouvoir utiliser l'API, mais pour autant que je sache, l'accès est gratuit. A propos, leur API a d'autres fonctionnalités: vous pouvez faire la normalisation d'adresses et la recherche de code postal, ainsi que toute la suite de suivi, d'expédition, d'étiquettes, etc.
Mise à jour: à compter du 13 août 2017, Ziptastic est désormais une API payante et peut être trouvée ici
C'est un nouveau service, mais selon leur documentation, il semble que tout ce que vous avez à faire est d'envoyer une demande GET à http://ziptasticapi.com , comme suit:
GET http://ziptasticapi.com/48867
Et ils renverront un objet JSON du type:
{"country": "US", "state": "MI", "city": "OWOSSO"}
En effet, ça marche. Vous pouvez tester cela à partir d'une ligne de commande en faisant quelque chose comme:
curl http://ziptasticapi.com/48867
function getCityState($Zip, $blnUSA = true) {
$url = "http://maps.googleapis.com/maps/api/geocode/json?address=" . $Zip . "&sensor=true";
$address_info = file_get_contents($url);
$json = json_decode($address_info);
$city = "";
$state = "";
$country = "";
if (count($json->results) > 0) {
//break up the components
$arrComponents = $json->results[0]->address_components;
foreach($arrComponents as $index=>$component) {
$type = $component->types[0];
if ($city == "" && ($type == "sublocality_level_1" || $type == "locality") ) {
$city = trim($component->short_name);
}
if ($state == "" && $type=="administrative_area_level_1") {
$state = trim($component->short_name);
}
if ($country == "" && $type=="country") {
$country = trim($component->short_name);
if ($blnUSA && $country!="US") {
$city = "";
$state = "";
break;
}
}
if ($city != "" && $state != "" && $country != "") {
//we're done
break;
}
}
}
$arrReturn = array("city"=>$city, "state"=>$state, "country"=>$country);
die(json_encode($arrReturn));
}
il y a quelques mois, j'avais les mêmes exigences pour l'un de mes projets. J'ai cherché un peu et trouvé la solution suivante. Ce n'est pas la seulement solution mais je l'ai trouvée dans l'un des plus simple = un.
Utilisez le service Web à l'adresse http://www.webservicex.net/uszip.asmx .
Spécifiquement GetInfoByZIP()
méthode.
Vous pourrez interroger par n'importe quel code postal (ex: 40220
) et vous aurez une réponse comme suit ...
<?xml version="1.0" encoding="UTF-8"?>
<NewDataSet>
<Table>
<CITY>Louisville</CITY>
<STATE>KY</STATE>
<Zip>40220</Zip>
<AREA_CODE>502</AREA_CODE>
<TIME_ZONE>E</TIME_ZONE>
</Table>
</NewDataSet>
J'espère que cela t'aides...