しふみんのブログ

しふみんのブログです。

列車運行情報を取得するgemを作った

関東エリアの列車の運行情報を取得するgemを作りました。
標題は目的語が大きく、情報を取得できるのは関東エリアのみです(大事なことなので)

github.com traininfo_kanto | RubyGems.org | your community gem host

インストール

Gemfileに下記の行を追加して bundle install するか、

# Gemfile
gem 'traininfo_kanto'

あるいは、直接gemをインストールしてください。

gem install traininfo_kanto

使い方

# app.rb
require 'traininfo_kanto'

TraininfoKanto.get(['山手線', '京浜東北線'], url: true)

こんなコードを用意しておいて

$ ruby app.rb

実行すると

["山手線は平常運転です。", "京浜東北線は列車遅延があります。\n宇都宮線内でドア点検を行った影響で、一部列車に遅れが出ています。 (9月21日 16時45分掲載)\nhttps://transit.yahoo.co.jp/traininfo/detail/22/0/"]

が返ってきます。

url オプションがあり、 true にすると「平常運転」以外の場合に最後に詳細ページのリンクを追加します(デフォルトは false )

コマンド

CLIも用意しているので、コマンドライン上で

$ traininfo_kanto get 山手線 京浜東北線
山手線は平常運転です。
京浜東北線は列車遅延があります。
宇都宮線内でドア点検を行った影響で、一部列車に遅れが出ています。 (9月21日 16時45分掲載)

みたいな感じでも使えます。 CLIでは url オプションはなしです(そのうち実装するかも)

Docker

shifumin/traininfo_kanto - Docker Hub

Docker Hubにイメージを上げたので、Dockerの実行環境があれば

$ docker run --rm shifumin/traininfo_kanto get 山手線 京浜東北線

で試すことができます。
Rubyの環境すら必要ありません。
便利ですね。

どうやって情報を取得しているか

単純にYahoo!路線情報の運行ページ{:target='_blank'}をnokogiriでスクレイピングして情報を取得しています。

やりたかったこと

要はこういうことをやりたかったんですよね。

f:id:shifumin:20181010200426p:plain

上記はうちのSlack botです。
で、運行情報取得部分だけgemに切り出しました。

注意点

さて、注意点があります。
関東の運行情報と言いながら現時点(2018年10月9日)でサポートしている路線は下記だけです。
(メトロ、都営とJRの僕が利用しそうな路線と後小湊鉄道だけ)
JRは頑張って後で追加します。私鉄は……w

Supported routes

まだできていないこと

  • サポートしている路線の数が少ない
    • せめてJR東日本(関東)の路線は全てカバーしたい
  • テストを全く書いていない
    • gemのテストの知見を得たいので書きたい
  • CLItraininfo_kanto list (運行情報を取得できる路線一覧を取得する)のサブコマンドくらいは流石に実装したい
    • 実装します

終わりに

Rubygems作成とDockerHubにDocker imageアップロードは初めてでしたが、学びがありよかったです。
こちらからは以上です。