我正在开发一个需要根据 IATA 代码 (http://en.wikipedia.org/wiki/IATA_airport_code) 查找国家代码 (ISO-3166 alpha2) 的应用程序。
是否有(最好是免费的)API?
我正在开发一个需要根据 IATA 代码 (http://en.wikipedia.org/wiki/IATA_airport_code) 查找国家代码 (ISO-3166 alpha2) 的应用程序。
是否有(最好是免费的)API?
我在这里提交了一个不完整的解决方案,既是为了解决手头的 IATA-to-Contry-Code 问题,也是为了引起人们对结构化内容可能未被充分利用的资源的关注:我说的是Freebase!
这是不完整的,因为并非所有 IATA 代码都包括在内(尽管我猜测覆盖率相对较高)或并非所有都分配了国家代码(唉,这是一种更常见的情况)。
我想推荐的 API 是Freebase MQL 读取服务。
这项免费服务的工作原理是发送一个带有参数的 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"
}
]
}
通过深入研究 Freebase/aviation/airport
类型并使用我在下面简要描述的各种工具,这个解决方案在大约 30 分钟内被“搅起” 。
请注意,这是一种通用方法,适用于各种查询:例如,我们可以获取 1950 年之前建造的跨度超过 500 英尺的桥梁列表,而不是将 IATA 机场代码与 ISO 国家代码匹配,或者查找出生在特定城市的著名音乐家等。此外,AFAIK、Freebase API 和信息是免费提供的。但是请注意,与从专业来源获得的内容相比,在 Freebase 上找到的内容存在一些限制(和一些优势!)。
从 Freebase 获得的信息可能不如通过 API 和从专业来源获得的数据提取获得的信息那样权威、完整或最新。这种限制说明了在 Freebase 以协作的、类似维基的方式收集的信息的准普遍广度,由一个主要是志愿者的工作组,与由各种行业的付费专业人士进行的集中的、通常是单一目的的信息收集相比国际航空运输协会或国际海事组织 (IMO) 等组织。另一方面,Freebase 凭借其数据的语义表示,提供了以强大的方式连接信息位的方法。由于权威来源主要提供“表格”数据,Freebase 查询可以匹配明显不相关的信息片段。例如,
但是足够的披露,让我们看看如何产生这些查询
最后我想提出以下建议:与其将这个在线 API 集成到您的应用程序中,有时可以下载完整列表并使用它创建一个本地数据库。以这种方式,可以通过添加行和/或填充空列来补充数据。这种方法特别适用于 IATA/机场示例——毕竟机场列表及其基础代码相对较小,并且不会经常变化。当然,这种方法可能需要偶尔刷新和维护本地数据库,但它消除了与 Freebase 的在线、实时连接的要求。