全競輪場のネット中継を視聴できるコマンドラインツール

クールで機能的な競輪場リンク集 - Doing It To Deathで知った競輪場のリンク集やっぱ競輪は楽しいジャンが素晴らしい。ネット中継へのリンクがasxファイルへじかになっているのが良い。この情報を利用して、競輪場を指定するとそのネット中継をmplayerで見ることができるRubyスクリプトを書いてみた。ruby-1.9.1で動作を確認している。

#! /usr/bin/env ruby
# -*- coding: utf-8 -*-

require 'rexml/document'
require 'open-uri'

URL_TOP = 'http://keirinn.web.fc2.com/'

def find_bank(elm)
  return unless elm
  name = elm.attributes['class']
  return(name) if name
  find_bank(elm.parent)
end

bank_input = ARGV.shift
src = open(URL_TOP, 'r:Shift_JIS'){|input| input.read}.encode('UTF-8').
      sub(/<!-{2} FC2, inc.-{2}>.+<!-{2} FC2, inc.-{2}>/m, '')
a = REXML::Document.new(src).
    elements.to_a("//img[contains(@src,'kamera_')]").
    map{|e| [find_bank(e), e.parent.attributes['href']]}.
    select{|e| e[1]}.sort

cs = a.select{|bank, url| /^#{bank_input}/ =~ bank}
case cs.size
when 1
  system "mplayer -playlist '#{cs[0][1]}'"
when 0
  puts 'your input is wrong.', 'all candidates:'
  a.each{|e| printf(" %-s\n", e[0])}
else
  puts 'your input is ambiguous.', 'candidates:'
  cs.each{|e| printf(" %-s\n", e[0])}
end

このスクリプトをファイル名k-liveでコマンドパスの通った所に保存して実行権限を与える。コマンドライン

% k-live tachikawa

とすれば立川のネット中継がmplayerで見れる。競輪場名が特定されるなら

% k-live tachi

と後ろを省略してもよい。特定できない名前を指定すると

% k-live.rb matsu
your input is ambiguous.
candidates:
 matsudo
 matsusaka
 matsuyama

のように候補を示して何もしない。

私はscreenを常用しているので次のようなスクリプトを用意している。

#! /bin/sh
screen -X eval "screen 1 k-live $1" 'other'

これだとこのコマンドを実行したscreenのウインドウがmplayerの出力で汚れることがないしmplayerの出力を見たければいつでも見れる。

これを作って非常に快適になった。CUI中心の計算機生活を送っている競輪ファンはお試しあれ。