全競輪場のネット中継を視聴できるコマンドラインツール
クールで機能的な競輪場リンク集 - 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中心の計算機生活を送っている競輪ファンはお試しあれ。