LoginSignup
1
3

More than 3 years have passed since last update.

Lufthansa Open API で航空オープンデータを触る

Last updated at Posted at 2020-04-03

ルフトハンザドイツ航空 (LH) は Lufthansa Open API を公開しています。この API を利用することで、航空便に関する様々な情報を手軽に取得することができます。

なお、本記事では API の動作検証にあたっては Postman を利用しておりますが、cURL や任意のプログラミング言語を用いても同様の結果が得られます。

利用登録とトークンの取得

アカウント登録

https://developer.lufthansa.com/docs/read/API_basics を確認し、アカウント登録を行いましょう。
なお、180日以上ログインがない場合、メールアドレスによる再認証が必要になります。

アプリケーション登録

https://developer.lufthansa.com/apps/register からアプリケーションの登録を行います。

アクセストークンの取得

アクセストークンは一定時間で失効します。

POST https://api.lufthansa.com/v1/oauth/token

Request Body

  • client_id : 取得したKey
  • client_secret : 取得したSecret
  • grant_type : client_credentials

Response Body

アクセストークンと有効時間(秒)が取得できます。

レスポンス
{"access_token":"XXXXXXXXXXXXXXXXXXXX","token_type":"bearer","expires_in":21600}

航空データの取得

では、実際に航空便データを取得してみましょう。ここでは主要なAPIのみ紹介します(随時加筆していきます)。

また、https://developer.lufthansa.com/io-docs でインタラクティブに試すこともできるので活用しましょう。

共通事項

情報を取得する場合、Request Header に以下の内容を設定してください。いずれも必須です。

Key Value
Accept application/json or application/xml
Authorization Bearer 取得したトークン
(例: Bearer b2d5h7n4chvpun2f4pu7jh36

また、GETのパラメータでは以下のキーを用いることができます。

  • limit: リクエストごとに返されるレコード数。(デフォルト:20、最大値:100)
  • offset: スキップするレコード数。(デフォルト:0)

静的情報

空港情報

空港の座標および都市コード、国コード、多言語での空港名、タイムゾーンなどが取得できます。

GET https://api.lufthansa.com/v1/mds-references/airports/空港コード?LHoperated=0

  • 空港コード: IATAコード(3レターコード)。
  • LHoperated: 1にすると、ルフトハンザドイツ航空が就航している空港に限った結果を返します。デフォルトは 0です。
    • コードシェア便や同一アライアンスの便が就航していても「ルフトハンザドイツ航空が就航している」としてカウントされるようです。要はルフトハンザを経由して予約が手配ができるかどうか、ということだと思われます。以下に例を挙げます。
      • HND (LH就航)→ OK
      • HSG(LH就航なし、NH就航)→ OK
      • KKJ(LH就航なし、NH就航なし、NHは7Gとのコードシェアで就航)→OK
      • OKD(LH就航なし、NH就航なし)→ 1 にすると ResourceNotFound となる。

Response Body の例
v1/mds-references/airports/HND
{
    "AirportResource": {
        "Airports": {
            "Airport": {
                "AirportCode": "HND",
                "Position": {
                    "Coordinate": {
                        "Latitude": 35.5522,
                        "Longitude": 139.7797
                    }
                },
                "CityCode": "TYO",
                "CountryCode": "JP",
                "LocationType": "Airport",
                "Names": {
                    "Name": [{
                        "@LanguageCode": "DE",
                        "$": "Tokio Haneda"
                    }, {
                        "@LanguageCode": "EN",
                        "$": "Tokyo Haneda"
                    }, {
                        "@LanguageCode": "ES",
                        "$": "Tokio Haneda"
                    }, {
                        "@LanguageCode": "FR",
                        "$": "Tokyo Haneda"
                    }, {
                        "@LanguageCode": "IT",
                        "$": "Tokio Haneda"
                    }, {
                        "@LanguageCode": "JA",
                        "$": "東京"
                    }, {
                        "@LanguageCode": "KO",
                        "$": "도쿄"
                    }, {
                        "@LanguageCode": "PL",
                        "$": "Tokio Haneda"
                    }, {
                        "@LanguageCode": "PT",
                        "$": "Tóquio Haneda"
                    }, {
                        "@LanguageCode": "RU",
                        "$": "Токио "
                    }, {
                        "@LanguageCode": "ZH",
                        "$": "东京"
                    }]
                },
                "UtcOffset": "+09:00",
                "TimeZoneId": "Asia/Tokyo"
            }
        },
        "Meta": {
            "@Version": "1.0.0",
            "Link": [{
                "@Href": "https://api.lufthansa.com/v1/mds-references/airports/HND?limit=20&offset=0&LHoperated=0",
                "@Rel": "self"
            }, {
                "@Href": "https://api.lufthansa.com/v1/mds-references/cities/TYO",
                "@Rel": "related"
            }, {
                "@Href": "https://api.lufthansa.com/v1/mds-references/countries/JP",
                "@Rel": "related"
            }, {
                "@Href": "http://travelguide.lufthansa.com/de/de/{cityCode}/HND",
                "@Rel": "alternate"
            }, {
                "@Href": "http://travelguide.lufthansa.com/de/en/{cityCode}/HND",
                "@Rel": "alternate"
            }, {
                "@Href": "http://travelguide.lufthansa.com/de/es/{cityCode}/HND",
                "@Rel": "alternate"
            }, {
                "@Href": "http://travelguide.lufthansa.com/de/fr/{cityCode}/HND",
                "@Rel": "alternate"
            }]
        }
    }
}
}

航空会社情報

ICAOコード(3レターコード)、航空会社の名称を取得できます。ルフトハンザに限らず他社の情報も取得できます。

GET https://api.lufthansa.com/v1/mds-references/airlines/航空会社コード

  • 航空会社コード: IATA航空会社コード(2レターコード)

Response Body の例
v1/mds-references/airlines/7G
{
    "AirlineResource": {
        "Airlines": {
            "Airline": {
                "AirlineID": "7G",
                "AirlineID_ICAO": "SFJ",
                "Names": {
                    "Name": {
                        "@LanguageCode": "EN",
                        "$": "Star Flyer"
                    }
                }
            }
        },
        "Meta": {
            "@Version": "1.0.0",
            "Link": {
                "@Href": "https://api.lufthansa.com/v1/mds-references/airlines/7G?limit=20&offset=0",
                "@Rel": "self"
            }
        }
    }
}

機種情報

IATA航空機コードを渡すと、ICAO航空機コードと機種名を取得できます。

GET https://api.lufthansa.com/v1/mds-references/aircraft/機種コード

Response Body の例
v1/mds-references/aircraft/AT7
{
    "AircraftResource": {
        "AircraftSummaries": {
            "AircraftSummary": {
                "AircraftCode": "AT7",
                "Names": {
                    "Name": {
                        "@LanguageCode": "EN",
                        "$": "ATR 72"
                    }
                },
                "AirlineEquipCode": "AT72"
            }
        },
        "Meta": {
            "@Version": "1.0.0",
            "Link": {
                "@Href": "https://api.lufthansa.com/v1/mds-references/aircraft/AT7?limit=20&offset=0",
                "@Rel": "self"
            }
        }
    }
}

動的情報

フライト情報

ルフトハンザが運航するフライトの情報が取得できます。
ルフトハンザ便名が付与されているコードシェア便の情報も取得できるほか、ルフトハンザと提携関係にある航空会社(NHなど)の便名は取得することができました。

GET https://api.lufthansa.com/v1/operations/flightstatus/便名/YYYY-MM-DD

  • 便名: IATA航空会社コードによる便名表記(例: LH16
  • 日付: YYYY-MM-DDの形式で、出発地での日付

Response Body の例
/v1/operations/flightstatus/LH16/2020-04-01
{
    "FlightStatusResource": {
        "Flights": {
            "Flight": [{
                "Departure": {
                    "AirportCode": "FRA",
                    "ScheduledTimeLocal": {
                        "DateTime": "2020-04-01T14:30"
                    },
                    "ScheduledTimeUTC": {
                        "DateTime": "2020-04-01T12:30Z"
                    },
                    "ActualTimeLocal": {
                        "DateTime": "2020-04-01T14:24"
                    },
                    "ActualTimeUTC": {
                        "DateTime": "2020-04-01T12:24Z"
                    },
                    "TimeStatus": {
                        "Code": "FE",
                        "Definition": "Flight Early"
                    },
                    "Terminal": {
                        "Name": "1",
                        "Gate": "A22"
                    }
                },
                "Arrival": {
                    "AirportCode": "HAM",
                    "ScheduledTimeLocal": {
                        "DateTime": "2020-04-01T15:35"
                    },
                    "ScheduledTimeUTC": {
                        "DateTime": "2020-04-01T13:35Z"
                    },
                    "ActualTimeLocal": {
                        "DateTime": "2020-04-01T15:23"
                    },
                    "ActualTimeUTC": {
                        "DateTime": "2020-04-01T13:23Z"
                    },
                    "TimeStatus": {
                        "Code": "FE",
                        "Definition": "Flight Early"
                    },
                    "Terminal": {
                        "Name": "2"
                    }
                },
                "MarketingCarrier": {
                    "AirlineID": "LH",
                    "FlightNumber": "016"
                },
                "OperatingCarrier": {
                    "AirlineID": "LH",
                    "FlightNumber": "016"
                },
                "Equipment": {
                    "AircraftCode": "32N",
                    "AircraftRegistration": "DAINE"
                },
                "FlightStatus": {
                    "Code": "LD",
                    "Definition": "Flight Landed"
                },
                "ServiceType": "Passenger"
            }]
        },
        "Meta": {
            "@Version": "1.0.0",
            "Link": [{
                "@Href": "https://api.lufthansa.com/v1/operations/flightstatus/LH16/2020-04-01",
                "@Rel": "self"
            }, {
                "@Href": "https://api.lufthansa.com/v1/mds-references/airports/{airportCode}",
                "@Rel": "related"
            }]
        }
    }
}

Response Body の例(コードシェア便の例)
/v1/operations/flightstatus/LH4877/2020-04-01
{
    "FlightStatusResource": {
        "Flights": {
            "Flight": [
                {
                    "Departure": {
                        "AirportCode": "FUK",
                        "ScheduledTimeLocal": {
                            "DateTime": "2020-04-01T09:35"
                        },
                        "ScheduledTimeUTC": {
                            "DateTime": "2020-04-01T00:35Z"
                        },
                        "TimeStatus": {
                            "Code": "OT",
                            "Definition": "Flight On Time"
                        },
                        "Terminal": {
                            "Name": "D"
                        }
                    },
                    "Arrival": {
                        "AirportCode": "HND",
                        "ScheduledTimeLocal": {
                            "DateTime": "2020-04-01T11:15"
                        },
                        "ScheduledTimeUTC": {
                            "DateTime": "2020-04-01T02:15Z"
                        },
                        "ActualTimeLocal": {
                            "DateTime": "2020-04-01T10:59"
                        },
                        "ActualTimeUTC": {
                            "DateTime": "2020-04-01T01:59Z"
                        },
                        "TimeStatus": {
                            "Code": "FE",
                            "Definition": "Flight Early"
                        },
                        "Terminal": {
                            "Name": "2"
                        }
                    },
                    "MarketingCarrier": {
                        "AirlineID": "LH",
                        "FlightNumber": "4877"
                    },
                    "OperatingCarrier": {
                        "AirlineID": "NH",
                        "FlightNumber": "246"
                    },
                    "Equipment": {
                        "AircraftCode": "767"
                    },
                    "FlightStatus": {
                        "Code": "LD",
                        "Definition": "Flight Landed"
                    },
                    "ServiceType": "Passenger"
                }
            ]
        },
        "Meta": {
            "@Version": "1.0.0",
            "Link": [
                {
                    "@Href": "https://api.lufthansa.com/v1/operations/flightstatus/LH4877/2020-04-01",
                    "@Rel": "self"
                },
                {
                    "@Href": "https://api.lufthansa.com/v1/mds-references/airports/{airportCode}",
                    "@Rel": "related"
                }
            ]
        }
    }
}

同一便をNH便名で取得した場合。コードシェア便で取得する場合に比べて機材の番号など、より詳細な情報が取得できます。

/v1/operations/flightstatus/NH246/2020-04-01
{
    "FlightStatusResource": {
        "Flights": {
            "Flight": [
                {
                    "Departure": {
                        "AirportCode": "FUK",
                        "ScheduledTimeLocal": {
                            "DateTime": "2020-04-01T09:35"
                        },
                        "ScheduledTimeUTC": {
                            "DateTime": "2020-04-01T00:35Z"
                        },
                        "TimeStatus": {
                            "Code": "OT",
                            "Definition": "Flight On Time"
                        },
                        "Terminal": {
                            "Name": "D"
                        }
                    },
                    "Arrival": {
                        "AirportCode": "HND",
                        "ScheduledTimeLocal": {
                            "DateTime": "2020-04-01T11:15"
                        },
                        "ScheduledTimeUTC": {
                            "DateTime": "2020-04-01T02:15Z"
                        },
                        "ActualTimeLocal": {
                            "DateTime": "2020-04-01T10:59"
                        },
                        "ActualTimeUTC": {
                            "DateTime": "2020-04-01T01:59Z"
                        },
                        "TimeStatus": {
                            "Code": "FE",
                            "Definition": "Flight Early"
                        },
                        "Terminal": {
                            "Name": "2"
                        }
                    },
                    "MarketingCarrier": {
                        "AirlineID": "NH",
                        "FlightNumber": "246"
                    },
                    "OperatingCarrier": {
                        "AirlineID": "NH",
                        "FlightNumber": "246"
                    },
                    "Equipment": {
                        "AircraftCode": "767",
                        "AircraftRegistration": "JA606A"
                    },
                    "FlightStatus": {
                        "Code": "LD",
                        "Definition": "Flight Landed"
                    },
                    "ServiceType": "Passenger"
                }
            ]
        },
        "Meta": {
            "@Version": "1.0.0",
            "Link": [
                {
                    "@Href": "https://api.lufthansa.com/v1/operations/flightstatus/NH246/2020-04-01",
                    "@Rel": "self"
                },
                {
                    "@Href": "https://api.lufthansa.com/v1/mds-references/airports/{airportCode}",
                    "@Rel": "related"
                }
            ]
        }
    }
}

ただし、ルフトハンザと直接提携のない航空会社が運航している便については正確な航空会社が取得できません。
以下はスターフライヤー7G89便をNH3889便として取得した際も OperatingCarrierNH となります。

v1/operations/flightstatus/NH3889/2020-04-02
{
    "FlightStatusResource": {
        "Flights": {
            "Flight": [
                {
                    "Departure": {
                        "AirportCode": "HND",
                        "ScheduledTimeLocal": {
                            "DateTime": "2020-04-02T20:30"
                        },
                        "ScheduledTimeUTC": {
                            "DateTime": "2020-04-02T11:30Z"
                        },
                        "TimeStatus": {
                            "Code": "OT",
                            "Definition": "Flight On Time"
                        },
                        "Terminal": {
                            "Name": "1"
                        }
                    },
                    "Arrival": {
                        "AirportCode": "KKJ",
                        "ScheduledTimeLocal": {
                            "DateTime": "2020-04-02T22:10"
                        },
                        "ScheduledTimeUTC": {
                            "DateTime": "2020-04-02T13:10Z"
                        },
                        "TimeStatus": {
                            "Code": "OT",
                            "Definition": "Flight On Time"
                        }
                    },
                    "MarketingCarrier": {
                        "AirlineID": "NH",
                        "FlightNumber": "3889"
                    },
                    "OperatingCarrier": {
                        "AirlineID": "NH",
                        "FlightNumber": "3889"
                    },
                    "Equipment": {
                        "AircraftCode": "320"
                    },
                    "FlightStatus": {
                        "Code": "NA",
                        "Definition": "No status"
                    },
                    "ServiceType": "Passenger"
                }
            ]
        },
        "Meta": {
            "@Version": "1.0.0",
            "Link": [
                {
                    "@Href": "https://api.lufthansa.com/v1/operations/flightstatus/NH3889/2020-04-02",
                    "@Rel": "self"
                },
                {
                    "@Href": "https://api.lufthansa.com/v1/mds-references/airports/{airportCode}",
                    "@Rel": "related"
                }
            ]
        }
    }
}

顧客向けフライト情報(Customer Flight Information)

通常のフライト情報と概ね同じですが、フライトインフォメーションボードなどで旅客に表示するようなデータが取得できます。
また、コードシェア便情報もより詳細に取得できます。

GET https://api.lufthansa.com/v1/operations/customerflightinformation/便名/YYYY-MM-DD

  • 便名: IATA航空会社コードによる便名表記(例: LH16
  • 日付: YYYY-MM-DDの形式で、出発地での日付

Response Body の例

フライト情報(Flight Status)ではコードシェアの「親」情報しか取得できませんが、顧客向けフライト情報(Customer Flight Information)では「親」となる便を指定してもMarketingCarrierListとして「子」となる便名の一覧を取得できます。

/v1/operations/customerflightinformation/LH4877/2020-04-01
{
    "FlightInformation": {
        "Flights": {
            "Flight": {
                "Departure": {
                    "AirportCode": "FUK",
                    "Scheduled": {
                        "Date": "2020-04-01",
                        "Time": "09:35"
                    },
                    "Actual": {
                        "Date": "2020-04-01",
                        "Time": "09:35"
                    },
                    "Terminal": {
                        "Name": "D"
                    },
                    "Status": {
                        "Code": "OT",
                        "Description": "Flight On Time"
                    }
                },
                "Arrival": {
                    "AirportCode": "HND",
                    "Scheduled": {
                        "Date": "2020-04-01",
                        "Time": "11:15"
                    },
                    "Actual": {
                        "Date": "2020-04-01",
                        "Time": "10:59"
                    },
                    "Terminal": {
                        "Name": "2"
                    },
                    "Status": {
                        "Code": "LD",
                        "Description": "Flight Landed"
                    }
                },
                "MarketingCarrierList": {
                    "MarketingCarrier": [{
                        "AirlineID": "AZ",
                        "FlightNumber": "5150"
                    }, {
                        "AirlineID": "LH",
                        "FlightNumber": "4877"
                    }]
                },
                "OperatingCarrier": {
                    "AirlineID": "NH",
                    "FlightNumber": "246"
                },
                "Equipment": {
                    "AircraftCode": "767"
                },
                "Status": {
                    "Code": "OT",
                    "Description": "Flight On Time"
                }
            }
        },
        "Meta": {
            "@Version": "1.0.0",
            "Link": [{
                "@Href": "https://api.lufthansa.com/v1/operations/customerflightinformation/LH4877/2020-04-01",
                "@Rel": "self"
            }, {
                "@Href": "https://api.lufthansa.com/v1/mds-references/airports/{airportCode}",
                "@Rel": "related"
            }]
        }
    }
}

路線運航情報

路線単位でのフライト情報。他社便しか運航していない区間も取得できる場合があります。

GET https://api.lufthansa.com/v1/operations/flightstatus/route/出発地空港コード/目的地空港コード/YYYY-MM-DD?serviceType=all

  • 出発地空港コード: IATA空港コード(3レターコード)
  • 目的地空港コード: IATA空港コード(3レターコード)
  • 日付: 出発地の現地時間における日付。(YYYY-MM-DD の形式)
  • serviceType : cargo, paasenger, all (デフォルトは passanger)

Response Body の例
/v1/operations/flightstatus/route/JFK/FRA/2020-04-01?serviceType=all
{
    "FlightStatusResource": {
        "Flights": {
            "Flight": [{
                "Departure": {
                    "AirportCode": "JFK",
                    "ScheduledTimeLocal": {
                        "DateTime": "2020-04-01T00:30"
                    },
                    "ScheduledTimeUTC": {
                        "DateTime": "2020-04-01T04:30Z"
                    },
                    "ActualTimeLocal": {
                        "DateTime": "2020-04-01T01:26"
                    },
                    "ActualTimeUTC": {
                        "DateTime": "2020-04-01T05:26Z"
                    },
                    "TimeStatus": {
                        "Code": "DL",
                        "Definition": "Flight Delayed"
                    }
                },
                "Arrival": {
                    "AirportCode": "FRA",
                    "ScheduledTimeLocal": {
                        "DateTime": "2020-04-01T13:50"
                    },
                    "ScheduledTimeUTC": {
                        "DateTime": "2020-04-01T11:50Z"
                    },
                    "ActualTimeLocal": {
                        "DateTime": "2020-04-01T15:08"
                    },
                    "ActualTimeUTC": {
                        "DateTime": "2020-04-01T13:08Z"
                    },
                    "TimeStatus": {
                        "Code": "DL",
                        "Definition": "Flight Delayed"
                    }
                },
                "MarketingCarrier": {
                    "AirlineID": "LH",
                    "FlightNumber": "8163"
                },
                "OperatingCarrier": {
                    "AirlineID": "LH",
                    "FlightNumber": "8163"
                },
                "Equipment": {
                    "AircraftCode": "M1F",
                    "AircraftRegistration": "DALCK"
                },
                "FlightStatus": {
                    "Code": "LD",
                    "Definition": "Flight Landed"
                },
                "ServiceType": "Cargo"
            }]
        },
        "Meta": {
            "@Version": "1.0.0",
            "Link": [{
                "@Href": "https://api.lufthansa.com/v1/operations/flightstatus/route/JFK/FRA/2020-04-01?serviceType=all",
                "@Rel": "self"
            }, {
                "@Href": "https://api.lufthansa.com/v1/mds-references/airports/{airportCode}",
                "@Rel": "related"
            }],
            "TotalCount": 1
        }
    }
}

NRT-FRA の JL便など、ルフトハンザと提携がないエアラインのフライトも取得できる場合があります。
HND-FUKのNHコードシェアのLH便は取得できませんが、NRT-FUKのNH便は取得できるなど、取得可能路線の定義は不明です。

/v1/operations/flightstatus/route/NRT/FRA/2020-04-01?serviceType=all
{
    "FlightStatusResource": {
        "Flights": {
            "Flight": [{
                "Departure": {
                    "AirportCode": "NRT",
                    "ScheduledTimeLocal": {
                        "DateTime": "2020-04-01T11:25"
                    },
                    "ScheduledTimeUTC": {
                        "DateTime": "2020-04-01T02:25Z"
                    },
                    "TimeStatus": {
                        "Code": "NO",
                        "Definition": "No status"
                    },
                    "Terminal": {
                        "Name": "2"
                    }
                },
                "Arrival": {
                    "AirportCode": "FRA",
                    "ScheduledTimeLocal": {
                        "DateTime": "2020-04-01T16:30"
                    },
                    "ScheduledTimeUTC": {
                        "DateTime": "2020-04-01T14:30Z"
                    },
                    "TimeStatus": {
                        "Code": "NO",
                        "Definition": "No status"
                    },
                    "Terminal": {
                        "Name": "2"
                    }
                },
                "MarketingCarrier": {
                    "AirlineID": "JL",
                    "FlightNumber": "407"
                },
                "OperatingCarrier": {
                    "AirlineID": "JL",
                    "FlightNumber": "407"
                },
                "Equipment": {
                    "AircraftCode": "789"
                },
                "FlightStatus": {
                    "Code": "CD",
                    "Definition": "Flight Cancelled"
                },
                "ServiceType": "Passenger"
            }]
        },
        "Meta": {
            "@Version": "1.0.0",
            "Link": [{
                "@Href": "https://api.lufthansa.com/v1/operations/flightstatus/route/NRT/FRA/2020-04-01?serviceType=all",
                "@Rel": "self"
            }, {
                "@Href": "https://api.lufthansa.com/v1/mds-references/airports/{airportCode}",
                "@Rel": "related"
            }],
            "TotalCount": 1
        }
    }
}

1
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
3