Created
December 20, 2015 05:49
-
-
Save komasaru/940d11d07a3fd452ba10 to your computer and use it in GitHub Desktop.
Ruby script to get a airline list from Flightradar24.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#! /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