Ruby - Flightradar24 から航空会社情報一覧取得!
Updated:
航空機の運行状況をリアルタイムで確認できる Web サイト Flightradar24.com に登録されている航空会社情報の一覧を Ruby で取得してみました。(と言っても、 JSON データを取得しているだけですが)
空港情報一覧の取得については前回の記事をご参照ください。
0. 前提条件
- Ruby 2.2.4-p230 での作業を想定。
- 世界中の全航空会社を網羅している訳ではないかもしれない。(空港情報一覧と同様に)
1. Ruby スクリプトの作成
難しいことはしていないので、説明は省略する。
ただ、悪質な Bot でないことを主張するため、連絡先を User Agent に設定している。(伏字は適宜置き換えること)
File: fr24_airlines.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
#! /usr/local/bin/ruby
# coding: utf-8
#---------------------------------------------------------------------------------
#= Flightradar24 航空会社情報取得
#
# date name version
# 2015.12.20 mk-mode.com 1.00 新規作成
#
# Copyright(C) 2015 mk-mode.com All Rights Reserved.
#---------------------------------------------------------------------------------
#++
require 'json'
require 'open-uri'
require 'timeout'
class Fr24Airlines
URL = "http://www.flightradar24.com/_json/airlines.php" # 接続先 URL
TIMEOUT = 10 # OpenURI 接続時のタイムアウト
USER_AGENT = "xxxxxxx Bot (by Ruby/#{RUBY_VERSION}, Administrator: xxxxxxxx@yyyyyyy.zzz)"
# OpenURI 接続時の User-Agent, Mail Address
FILE_PATH = "./data/airlines" # 保存ファイル
def exec
get_json # JSON 取得
#save_file # ファイル保存
save_file_csv # ファイル保存(CSV 形式)
rescue => e
$stderr.puts "[#{e.class}] #{e.message}"
e.backtrace.each { |tr| $stderr.puts "\t#{tr}" }
exit 1
end
private
# JSON 取得
def get_json
str = nil
timeout(TIMEOUT) do
str = open(URL, {"User-Agent" => USER_AGENT}) { |f| f.read }
end
@json = JSON.parse(str)["rows"].sort_by { |j| j["Name"] }
rescue => e
raise
end
# ファイル保存
# * 最大文字数(name: 33)
def save_file
File.open("#{FILE_PATH}.txt", "w") do |f|
str = "NAME" + " " * 31 + "IATA ICAO"
f.puts str
@json.each do |j|
f.printf("%-33s %2s %3s\n", j["Name"], j["Code"], j["ICAO"])
end
end
rescue => e
raise
end
# ファイル保存(CSV 形式)
# * 最大文字数(name: 33)
# * Code が "" のこともあることに注意
# * カンマが含まれる可能性のある Name のみ "" でくくっている
def save_file_csv
File.open("#{FILE_PATH}.csv", "w") do |f|
f.puts "NAME,IATA,ICAO"
@json.each do |j|
f.puts "\"#{j["Name"]}\",#{j["Code"]},#{j["ICAO"]}"
end
end
rescue => e
raise
end
end
Fr24Airlines.new.exec
2. Ruby スクリプトの実行
Ruby スクリプトと同じディレクトリ内に “data” ディレクトリを作成後、以下を実行。
$ ./fr24_airlines.rb
3. データの確認
“data” ディレクトリ内に “airlines.txt” が作成されるので確認してみる。
File: data/airlines.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
NAME IATA ICAO
1Time T6 RNX
9 Air AQ JYH
ABSA Cargo M3 TUS
ABX Air GB ABX
ACT Airlines 9T RUN
AIS Airlines IS PNX
ALPI Eagles E8 ELG
ASL Airlines France 5O FPO
ASL Airlines Ireland AG ABR
ASL Airlines Switzerland FT FAT
:
====< 以下省略 >====
:
CSV 形式で出力した場合は “airlines.csv” を確認してみる。
File: data/airlines.csv
1
2
3
4
5
6
7
8
9
10
11
12
13
14
NAME,IATA,ICAO
"1Time",T6,RNX
"9 Air",AQ,JYH
"ABSA Cargo",M3,TUS
"ABX Air",GB,ABX
"ACT Airlines",9T,RUN
"AIS Airlines",IS,PNX
"ALPI Eagles",E8,ELG
"ASL Airlines France",5O,FPO
"ASL Airlines Ireland",AG,ABR
"ASL Airlines Switzerland",FT,FAT
:
====< 以下省略 >====
:
4. 関係のある過去の記事
- Ruby - NOAA(アメリカ海洋大気庁)気象観測所一覧!
- Bash - NOAA 気象観測所検索!
- Bash - METAR 気象情報取得!
- Ruby - Flightradar24 から空港情報一覧取得!
5. その他
“Flightradar24.com” が提供するリアルタイムの航空機の飛行情報も、調査に調査を重ねて取得できるようになりました。(後日紹介)
ちなみに、Web で期間を指定せずに検索するとリアルタイム飛行情報を取得する方法についてある程度はヒットしますが、その9割くらいは情報が古いです。
以上。
Comments