我正在开发一款需要根据IATA代码(http://en.wikipedia.org/wiki/IATA_airport_code)查找国家/地区代码(ISO-3166 alpha2)的应用。
是否有(最好是免费的)API?
答案 0 :(得分:8)
我在这里提交的是一个不完整的解决方案,既可以解决手头的IATA-to-Contry-Code问题,又可以关注结构化内容可能未被充分利用的资源:I'我在谈论Freebase!
这并不完整,因为并非所有IATA代码都包含在内(虽然我猜测的覆盖范围相对较高)或者并非所有IATA代码都分配了国家代码(唉更常见)。
我想建议的API是Freebase MQL Read Service 此免费服务通过发送带有参数的HTTPS请求,该参数以MQL(Metaweb查询语言)表示查询,并接收具有所需结果的JSON对象。
特别是请求看起来像
https://www.googleapis.com/freebase/v1/mqlread?indent=2&query=[{"type":"/aviation/airport","id":null,"limit": 25,"name":null,"sort":"name","iata": "SFO", "/location/location/containedby": [{"limit":6,"name":null,"optional": true,"sort":"name","/location/country/iso3166_1_alpha2": [{ "limit":6, "optional": false, "sort":"value", "value":null}]}],"airport_type": [{"limit":3,"name":null,"optional": true,"sort":"name","type":"/aviation/airport_type"}]}]
^--- here place the IATA code
为了便于阅读我在多行显示相应的MQL缩进;同样的事情只有更好的布局。
[{
"type": "/aviation/airport",
"id": null,
"limit": 25,
"name": null,
"sort": "name",
"iata": "SFO", -- <<< that's where you place the desired IATA code
"/location/location/containedby": [{
"limit": 6,
"name": null,
"optional": true,
"sort": "name",
"/location/country/iso3166_1_alpha2": [{
"limit": 6,
"optional": false,
"sort": "value",
"value": null
}]
}],
"airport_type": [{
"limit": 3,
"name": null,
"optional": true,
"sort": "name",
"type": "/aviation/airport_type"
}]
}]
响应如下:
{
"result": [
{
"name": "San Francisco International Airport",
"iata": "SFO",
"/location/location/containedby": [
{
"name": "United States of America",
"/location/country/iso3166_1_alpha2": [
{
"value": "US"
}
]
}
],
"airport_type": [
{
"type": "/aviation/airport_type",
"name": "Public"
}
],
"type": "/aviation/airport",
"id": "/en/san_francisco_international_airport"
}
]
}
这个解决方案是#34;鞭打&#34;通过钻入Freebase /aviation/airport
类型并使用我在下面简要描述的各种工具,大约30分钟。
请注意这是一种通用方法,适用于各种查询:例如,我们可以获取1950年之前构建的桥梁列表,而不是将IATA机场代码与ISO国家/地区代码相匹配。超过500英尺的跨度,或查找在特定城市出生的着名音乐家等。此外,AFAIK,Freebase API和信息是免费提供的。但请注意,与从专业来源获得的内容相比,Freebase中的内容存在一些限制(以及一些优势!)。
从Freebase获得的信息可能不如使用来自专业来源的API和数据提取获得的信息具有权威性,完整性或最新性。这种限制说明了Freebase以协作的,类似wiki的方式,通过大多数志愿者工作组收集的信息的准普遍广度,与付费专业人员在各种交易中进行的重点,通常是单一目的的信息收集相比较像IATA或国际海事组织(IMO)这样的组织。另一方面,Freebase以其数据的语义表示,提供了以强大的方式连接信息的方法。因此权威来源主要提供&#34;表格&#34;数据,Freebase查询可以匹配明显不相关的信息。例如,国际海事组织可能会制作年度吨位,码头数量等的海港名单,Freebase也可以找到在这些港口拍摄的电影或出生在那里的着名作家。
但对于披露而言,让我们看看如何产生这些疑问
我想完成以下建议:有时可以下载完整列表并使用它创建本地数据库,而不是将此在线API集成到您的应用程序中。 。以这种方式,可以通过添加行和/或填充空列来补充数据。这种方法特别适用于IATA /机场示例 - 在所有机场列表及其基础代码相对较小且不经常变化之后。当然,这种方法可能需要刷新本地数据库并偶尔进行维护,但它不需要与Freebase建立在线实时连接。