我有一個城市名稱字段,我從中獲得價值(即隨機格式),例如「紐約」,「紐約」或「紐約」或「紐約」。用戶輸入城市名稱(僅限美國)檢索郵政編碼的最佳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