Skip to content

Instantly share code, notes, and snippets.

@komasaru
Created December 20, 2015 05:49
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save komasaru/940d11d07a3fd452ba10 to your computer and use it in GitHub Desktop.
Save komasaru/940d11d07a3fd452ba10 to your computer and use it in GitHub Desktop.
Ruby script to get a airline list from Flightradar24.
#! /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
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment