通过用户输入城市名称检索邮政编码的最佳API(仅限美国)
Best API to retrieve zip code by user input city name (US only)?
我有一个从中获取值的城市名称字段(即随机格式化),例如"NEW YORK"、"NEW YORK"或"NEW YORK"或"ny"。
有了该字段的值,我需要以以下格式向用户提供一个名称中有该值的城市列表:
NY–纽约市–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
谢谢!
对之前的误导性回答感到抱歉。我没有注意到您使用的是MQL扩展"search"而不是"name"属性。
主要问题是,默认的排序不是根据搜索分数(不确定原因,但事实就是这样)。这样修改你的查询应该可以解决问题:
"search": {"query":"New York","score":null,"type_strict":"all"},
"sort":"-search.score",
"type":"/location/citytown",
sort参数按"search"子查询返回的"score"值降序排序。您还可以使用mql_filter参数进行搜索,使其甚至不考虑不符合您的约束的事情(效率稍高)。
这里记录了搜索扩展,使用的底层搜索服务的文档在这里
- 与运行长作业(javascript,node.js)的第三方API同步的最佳实践
- 更改REST API服务器的最佳实践
- NodeJS restify API缓存最佳实践
- 让Laravel应用程序同时服务于基于浏览器的应用程序,并充当iPhone和Android应用程序的API的最佳实践是什
- 处理批量长 API 调用的最佳做法
- 与 API 一起使用时,将 Date 对象存储在数据库中的最佳实践是什么
- 应用 API 响应转换的最佳位置
- 什么是Java EE Web应用程序中图表和图形的最佳API和工具
- 使用 es6 模块制作可访问 api 的最佳方式
- JavaScript API 函数名称最佳实践
- 使用Express从您的提交中获得.gitignore API密钥的最佳实践是什么
- 使用带有NodeJS的Express构建REST API的最佳实践
- 什么'当从AngularJS中的API响应接收到错误时,触发错误弹出模式的最佳方式
- 使用Facebook Insights图形API(JavaScript)获得准确点击率的最佳方法是什么
- 从React App访问API的最佳方式
- 从web客户端访问REST API的最佳方式是什么?
- 在JSON API中,货币的最佳格式/类型是什么?
- 除API文档外,Sench Touch示例(部分代码)和最佳实践
- 好的示例/模板/最佳实践API文档
- 从.gpx文件导入坐标并使用Google Maps API显示的最佳方法