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からContry-Codeへの質問に対処する方法と、構造化コンテンツの十分に活用されていないリソースに注意を向ける方法の両方として、ここで不完全な解決策を提出しています。Freebaseについて話しています。
これは、すべてのIATAコードが含まれているわけではない(比較的高いカバレッジを推測している)、またはすべての国コードが割り当てられているわけではない(より一般的な発生)という意味で不完全です。
私が提案したいAPIは、Freebase MQLReadServiceです。
この無料サービスは、MQL(Metaweb Query Language)でクエリを表現するパラメーターを使用してHTTPSリクエストを送信し、目的の結果を含む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分で「完成」しました。
これは一般的なアプローチであり、さまざまなクエリに適用できることに注意してください。たとえば、IATA空港コードをISO国コードに一致させるのではなく、たとえば、スパンが500フィートを超える1950年より前に建設された橋のリストを取得したり、特定の都市で生まれた有名なミュージシャンなど。さらに、AFAIK、Freebase API、および情報は無料で入手できます。ただし、特殊なソースから取得したコンテンツと比較して、Freebaseで見つかったコンテンツにはいくつかの制限(およびいくつかの利点があります!)があることに注意してください。
Freebaseから取得した情報は、APIや特殊なソースからのデータ抽出で取得した情報ほど信頼性が高く、完全でなく、最新のものではない場合があります。この制限は、さまざまな業界の有給の専門家によって実行される焦点を絞った、多くの場合単一目的の情報収集と比較して、ほとんどがボランティアのタスクフォースによって、共同でwikiのような方法でFreebaseで収集される情報の準普遍的な幅を物語っていますIATAや国際海事機関(IMO)などの組織。一方、Freebaseは、データのセマンティック表現を備えており、情報のビットを強力な方法で接続する方法を提供します。信頼できる情報源が主に「表形式」のデータを提供することにより、Freebaseクエリは明らかに無関係な情報と一致する可能性があります。例えば、
しかし、開示で十分ですが、これらのクエリを生成する方法を見てみましょう
最後に、次の提案を行います。このオンラインAPIをアプリケーションに統合するのではなく、完全なリストをダウンロードして、それを使用してローカルデータベースを作成できる場合があります。このようにして、行を追加したり、空の列を埋めたりすることで、データを補完できる場合があります。このアプローチは、IATA /空港の例に特に当てはまります-結局のところ、空港とその基礎となるコードのリストは比較的小さく、それほど頻繁に変更されることはありません-。もちろん、このアプローチでは、ローカルDBを更新するか、それ以外の場合は時々維持する必要がありますが、Freebaseへのオンラインのリアルタイム接続の要件がなくなります。