Raspberry Piでダッシュボードを作る(7) -時刻表-
Raspberry Piとミニディスプレイ,各種センサを使ってダッシュボードを作ります.
- Raspberry Piでダッシュボードを作る(1) -準備-
- Raspberry Piでダッシュボードを作る(2) -真っ白ダッシュボード-
- Raspberry Piでダッシュボードを作る(3) -デザイン-
- Raspberry Piでダッシュボードを作る(4) -天気予報-
- Raspberry Piでダッシュボードを作る(5) -温度・湿度(センサ)-
- Raspberry Piでダッシュボードを作る(6) -鉄道遅延情報-
- Raspberry Piでダッシュボードを作る(7) -時刻表- ←イマココ
今回のゴール
- 通勤に使っている最寄り駅の時刻表を表示させる.
いちいち最寄り駅の時刻表を調べるのは面倒です.ダッシュボードに常に表示させておきましょう.
時刻表の抽出
今回は Yahoo!路線情報 を利用します(※個人利用に留めましょう).例として 日比谷駅(東京メトロ日比谷線)の時刻表 を使ってみます.
情報の抽出には, Nokogiri
ライブラリを用います(スクレイピングとも言います).使い方は他所に譲るとして,下記スクリプトを parse.rb
といった名前で用意します.
#!/usr/bin/env ruby require 'net/http' require 'nokogiri' data = Nokogiri::HTML.parse(Net::HTTP.get(URI.parse(ARGV[0]))) data.css('table.tblDiaDetail > tr').each do |node| hour = node.css('td:first-child').text.rjust(2,"0") node.css('td:last-child > ul > li').each do |train| next if train.text !~ /(\d+)/ minute = $1.rjust(2,"0") puts "#{hour}:#{minute}" end end
実行してみましょう.
$ gem install nokogiri # Nokogiriライブラリをインストール $ chmod +x ./parse.rb # 実行権限を付与 $ ./parse.rb "https://transit.yahoo.co.jp/station/time/22951/?gid=3301&kind=1&done=time" 05:07 05:26 05:38 05:46 05:54 06:02 (省略)
無事に取得できました.ダッシュボードで表示するために,ファイルに出力しておきます.
$ ./parse.rb "https://transit.yahoo.co.jp/station/time/22951/?gid=3301&kind=1&done=time" > hibiya.txt
ダッシュボードへの表示
今回はかなりゴリ押しです.「むこう60分間の時刻表をいい感じに表示する」ようにします.
<div class="card"> <h4 class="card-header">時刻表</h4> <div class="card-body"> <% data = File.read("hibiya.txt") train_data = data.split(/\n/).map{|e| e.chomp}.select{|e| e>Time.now.strftime("%H:%M") && e<(Time.now+60*60).strftime("%H:%M")} .group_by{|e| e[0,2]}.map{|k,v| "<strong>#{k}</strong>#{" "*3}#{v.map{|e| e[3,2]}.join(" ")}"}.join("<br>") %> <p><%= train_data %></p> </div> </div>
これで,「次の電車何分だっけ?」というときにスマートフォンを操作せずに確認出来るようになりました.
補足
今回,土休日や種別(急行など)は考慮していません.
今日はここまで.