retry code

久しぶりにコードを書いた。といっても30ステップ程度のスクリプトだけど。


最近radikoの録音が途中でサーバから切断される。それもTBSだけ。同じ時間に録っている文化放送は問題がない。
radikoolみたいに終了時刻を監視して再接続させたいな。


バッチファイルだと時間の計算がめんどくさい。で、Rubyを使ってみることにした。初Rubyだ。
Ruby入門的なコンテンツをいくつか読んでコーディング。
こんな感じ。

station = ARGV.shift
program = ARGV.shift
durings = ARGV.shift.to_i

retry_count = 3
while retry_count > 0 do
    begin_time = Time.now
#   puts begin_time.strftime("%Y%m%d-%H%M%S")
    start_time = begin_time.strftime("%Y%m%d-%H%M%S")

    rtmpdump = "..."
    ffmpeg = "..."
    neroaacenc = "..."

    command = "#{rtmpdump} | #{ffmpeg} | #{neroaacenc}"
#   puts command
    system(command)

    end_time = Time.now
#   puts end_time.strftime("%Y%m%d-%H%M%S")
    progress_time = (end_time - begin_time).ceil
#   puts progress_time
    durings -= progress_time
    break if durings < 60
    retry_count = 3 if progress_time > 60
    retry_count -= 1
end

これをExerbでexeファイル化して使う。
早速昨日のキラキラで効果があったよ。14:13頃に切断後、15秒で再接続。