3

IATAコード(http://en.wikipedia.org/wiki/IATA_airport_code)に基づいて国コード(ISO-3166 alpha2)を検索する必要があるアプリを開発しています。

そのための(できれば無料の)APIはありますか?

4

1 に答える 1

8

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クエリは明らかに無関係な情報と一致する可能性があります。例えば、

しかし、開示で十分ですが、これらのクエリを生成する方法を見てみましょう

  • まず、 Freebaseで必要な種類のアイテムを熟読して、この領域でサイトが提供するものを理解し、この種類のアイテムで利用できる情報の幅と深さを非公式に「感じ」ます。
    たとえば、FreebaseのAirportTypeで見つかったさまざまな空港インスタンスをのぞくことができます。
  • 必要なアイテムのタイプが特定されたら、それらのスキーマを調べることができます(そこに到達するための多くの方法、たとえばページ下部のリンク)これが空港タイプの例
    のスキーマです。
  • スキーマは、特定のタイプについて収集される情報のフィールドを示します。ただし、スキーマは比較的完全で複雑な場合がありますが、対応するタイプの個々のインスタンスのすべてにこれらのフィールドが適切に入力されていない場合があることに注意してください。以下で説明するように、インスタンスのアドホックレビューまたはインスタンスのリストを使用して非公式に確認してください。
  • インスタンスのリストビューに戻り、列を追加および削除してこのビューを変更します。これは、リストの左上にあるオレンジ色の「+」ボタンと、各列ヘッダーの横にある小さな「x」ボタンを使用してそれぞれ実行されます。
    [新しい列の追加]セクションに表示されるツリー([+]を押した後に表示される)で、開始するタイプまたはそれに接続されているタイプのスキーマをドリルダウンできることを確認してください。
    空港の場合、「画像」、「記事」、「航空会社」に関連するフィールドをすばやく削除してスペースを確保し、IATAコードを追加し、「場所」をドリルして国を見つけ、そこからISOコード。「国」へのこの接続は少しトリッキーでした、私は「によって含まれる」を調べなければなりませんでした
  • 表形式のリストがあり、目的のフィールドがあり、レビュー目的でいくつかの追加フィールドが使用されている場合は、[このコレクションのデータを使用する]の[MQL]リンクを選択して、対応するMQLコードをエクスポートできます。ページの下。これにより、MQLスニペットをコピーできるウィンドウがポップアップ表示されますが、クエリエディタに進む方がおそらく良いでしょう。([クエリエディターで表示]ボタンを押したときにMQLを表示しないアプリケーションのバグのため、MQLコードをコピーしてエディターに貼り付ける必要がある場合があります)
  • クエリエディタは、この初期/デフォルトクエリを微調整してテストするための便利な方法を提供します。あなたはMQL言語に精通する必要があるかもしれません、それは一般的にかなり直感的です。
  • クエリが必要なものを正確に生成したら、それを「ワンライナー」(エディター画面の下部にあるフォーマットの便利なボタン)にして、Freebase MQL読み取りサービスへのURL内で使用できるようにします(例を参照してください)。この回答の上部)。
  • もう少しテストと調整(たとえば、文字列をURLにコピー/編集しているときにタイプミスによって時々発生するJSON構文エラーと戦う)など...出来上がり!
  • 実際には、Freebaseで実行できることは他にもたくさんあります。たとえば、Googleクライアントライブラリを使用してMQLサービスとの統合を容易にすることができます。

最後に、次の提案を行います。このオンラインAPIをアプリケーションに統合するのではなく、完全なリストをダウンロードして、それを使用してローカルデータベースを作成できる場合があります。このようにして、行を追加したり、空の列を埋めたりすることで、データを補完できる場合があります。このアプローチは、IATA /空港の例に特に当てはまります-結局のところ、空港とその基礎となるコードのリストは比較的小さく、それほど頻繁に変更されることはありません-。もちろん、このアプローチでは、ローカルDBを更新するか、それ以外の場合は時々維持する必要がありますが、Freebaseへのオンラインのリアルタイム接続の要件がなくなります。

于 2012-10-28T01:18:00.413 に答える