Help us understand the problem. What is going on with this article?

FlightAware API を使って,飛行データを取得しよう.

Flight Aware とは

ADS-Bの周波数を受信して、飛行機の位置情報を可視化しているサービスです。

代表的なサイトとして、
Flight Aware や FlightRader24 などがあります。

私は2つともスマホにインストールしており、どちらにもお世話になっています。

ただ、APIを使いたい際には、Flight Awareがおすすめです!

FlighAware_home.PNG

Flight Aware API とは

FlightAware のAPI に関するページ
https://flightaware.com/commercial/flightxml/

APIマニュアル
http://flightxml.flightaware.com/soap/FlightXML2/doc#

FlightAwareAPI.jpeg

ふたつ並んでおりますが、左は個人でデータ取得、右は企業などが大規模にデータを取得するなどの違いがあるようです。
今回は、この左側のFlightXMLというAPIサービスを利用いたしました。

FlightAware API を使ってみよう。

実際に API を使ってみましょう。
その際に以下の2つが必要になります.

・FlightAwareのAPI
 →Your FlightAware API Keys のページで API を取得
・FlightAwareのユーザーネーム
 →アカウントを作成する際に,自分で決めたものです.

ではさっそくやってみましょう.

プログラミング初心者の方は,Pythonのプログラムも載せているので安心してください.

Flight Number と Tail number の違い

Flight Number: NH171 のようにフライトごとに割り当てられている番号です。
NH171 であれば、サンディエゴ 12:25発-成田 15:05着のフライトであると特定できます。

ただFlight Number だけでは、いつのどの飛行機までか特定できません。

tail number は、登録番号で JA828A のように機体ごとに割り当てられている番号です。
tail number と 出発時間(出発予定時間 OR 実際の出発時間) を組み合わせると、
いつのどのフライトかひとつに特定できます。

Flight Number も Tail number も FlightAware のサイトにいけば確認できますので安心してください.

API: GetFlightID

GetFlightIDでは,faFlightID というFlightAwareが割り当てるフライトごとのIDを取得することができます.
これをゲットできれば、しめたもの!
次に紹介する GetHistoricalTrack の情報を取得する際に、faFlightID をinputと設定するのでとても大事なステップです。

GetFlightIDでのInput は、飛行機の登録番号と出発時間(予定時間または実際の出発時間)の情報が必要になります。
また出発時間は、Unix Time で表示された時間である必要があります.

Unix Timeを調べるには、Epoch Converterの Epoch & Unix Timestamp Conversion Tools が便利です。

正確な出発時間調べるの大変だしうまくいくか不安ですよね。
なので、基本は出発予定時間を使いましょう。また、時間は、分単位までで大丈夫です。

例:日本時間の 「2019年 1月 1日 1時 1分 0秒」 を変換すると以下のように Unix Timeで返ってきます。

 Epoch timestamp: 1546272060

それでは準備ができたら,以下のプログラムを参考にfaFlightIDを取得してみましょう.

GetFlightID.py
import requests

#以下2つはFlightAwareユーザーであることの承認に使われます。
username = "your_flightaware_username"  # FlightAware登録時のusername
apiKey = "your_flightaware_apikey"      # FlightAwareのAPI

fxmlUrl = "https://flightxml.flightaware.com/json/FlightXML2/"


inputs = {'ident':'NH171','departureTime':'1566433007'} #FlightNumberとUnixTimeでの現地出発時間
response = requests.get(fxmlUrl + "GetFlightID", params=inputs, auth=(username, apiKey))


if response.status_code == 200:
    print (response.json())
else:
    print ("Error executing request")

API: GetHistoricalTrack

過去の飛行データを取得するためのAPIです.
ちなみに,公式サポートに問い合わせたところ,(エンタープライズアカウントであっても,APIでの過去のデータ取得は)14日前までしか取得できないということでした.

さきほど取得したfaFlightIDをInputとして,以下のプログラムを処理してみましょう.

GetHistoricalTrack.py
import requests
import json
import pandas as pd

username = "your_flightaware_username"
apiKey = "your_flightaware_apikey"
fxmlUrl = "https://flightxml.flightaware.com/json/FlightXML2/"

# GetFlightID または、 InFlightInfo で取得したFlightAware固有のfaFlightIDを使用する。
registration = {'faFlightID':'ANA171-1560778504-airline-0082'}
response = requests.get(fxmlUrl + "GetHistoricalTrack", params=registration, auth=(username, apiKey))

if response.status_code == 200:
    print (response.json())
else:
    print ("Error executing request")

#JSON形式のデータを取得
json_data = response.json()

#dumpは、dict型を str型にする。
TrackResult=json.dumps(json_data["GetHistoricalTrackResult"])

#loadsはdict型にする。
TrackResult_dict=json.loads(TrackResult)

data=json.dumps(TrackResult_dict["data"])

#pandasでjsonデータを読み込む。
df = pd.read_json(data)

#CSV形式で出力
csv_data = df.to_csv("out/HistricalTrack_01.csv")

このような形で、データを整形することができました。

単位は、groundspeed は knot,
altitude は 100feet です!

スクリーンショット 2019-09-02 13.05.38.png

まとめ

最後までお読みいただきありがとうございます。

うまくいきましたら,ぜひ「いいね」おねがいしまーす.

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away