我有一个城市名称字段,我从中获得价值(即随机格式),例如“纽约”,“纽约”或“纽约”或“纽约”。用户输入城市名称(仅限美国)检索邮政编码的最佳API?
拥有该字段的值,我需要出示用户与那些在他们的名字在这个格式值城市的列表:
纽约 - 纽约 - 10001个
MN - 纽约米尔斯 - 56567
效率和性能很重要。我可以使用JavaScript或PHP来检索这些数据。
到目前为止,我试过使用Freebase API。这里有一个例子查询我使用:http://tinyurl.com/3ogpf7k
而且这里是我使用的JavaScript代码:
// App.q contains city name field's value
var query = {
extended : 1,
query : [{
search : App.q,
type : '/location/citytown',
id : null,
name : null,
postal_codes : [],
"/location/location/containedby" : [{
"type" : "/location/us_state",
"name": null,
// two letters abbreviation of state
"/common/topic/alias" : []
}]
}]
},
url = 'http://www.freebase.com/api/service/mqlread?callback=?&query=' +
encodeURIComponent(JSON.stringify(query));
$.getJSON(url, function(data) {
var cities, i, len, name, aliases, j, abbr, postal_code, HTML = [];
for (i = 0, len = data.result.length; i < len; i += 1) {
// cities with names matching user's input
if (data.result[ i ].name.toLowerCase().indexOf(App.q) === -1) continue;
// cities that have postal_codes data available
if (data.result[ i ].postal_codes.length === 0) continue;
name = data.result[ i ].name;
aliases = data.result[ i ]["/location/location/containedby"][0]["/common/topic/alias"];
postal_code = data.result[ i ].postal_codes[0];
// find two-letters alias
for (j = aliases.length - 1; j >= 0; j -= 1) {
if (aliases[j].length === 2 && aliases[j] === aliases[j].toUpperCase()) {
abbr = aliases[j];
}
}
HTML.push(D.renderHTML(liTemplate, {
name : name,
abbr : abbr,
postal_code : postal_code
}));
}
console.log(HTML.join(''));
});
然而,查询“纽约”似乎并没有返回连“纽约市”。
有没有更好的API来满足我的需求?我在做Freebase API的问题吗?
UPD。另一个有用的API,允许做种相同的(它仍然不把我的需求,但 - 通过他们太多的结果,并没有分页的方式):
文档:http://www.geonames.org/export/web-services.html
例子:http://api.geonames.org/postalCodeSearch?placename=los%20angeles&username=demo&maxRows=500
谢谢!
关联一个城市,邮政编码不会在英国工作的基础搜索服务的文件,它只会给你的前几个字符代码。另一点是,有很多地址与附近的城市没有关联,因此地址表单的城市字段不适用。 – koan 2011-06-05 13:13:35
无论是荷兰。它反过来工作。如果您有邮政编码和门牌号码,您可以从中获取城市和街道。据我所知,没有开放的数据库或免费的API来使用该数据库,尽管您可以购买该数据库的许可证并获取定期更新。 – GolezTrol 2011-06-05 13:15:27
我不认为它适用于任何有大城市的地方。在美国,即使不是非常大的城镇也经常有多个邮政编码,而且在邮局中分配“邮箱”的代码块很常见(不知道国际术语;内部带锁的安全箱邮局建筑物)。 – Pointy 2011-06-05 13:18:25