以前「新しい「らじる☆らじる」 録音方法の提案 」でも紹介したように、らじる☆らじるから配信される音声ファイルは1644.tsのように整数値.tsといったファイル名からなっています。このファイル名と放送時刻を対応付けることができないものかと考えました。
ダウンロードをしばらく続けているうちに、このファイル名は下図のように0から始まって1999までインクリメントされると、再び0に戻るということが分かりました。一つのファイルが10.24秒の音声からなっていますので、約20000秒ごとに同じファイル名が繰り返されるということです。
まず11月4日12時の時報が1308.tsというファイルに含まれていたとします。これは放送局に依存するかも知れませんので、実際に時報と合わせて確認する必要があります。このような場合11月4日12時03分00秒に放送されたファイルは1326.tsだろうということは、なんとなく予想できます。
では今日2017年11月6日15時00分00秒の時報が含まれるファイル名は、
kijun_time="2017-11-4 12:00"
kijun_file=1308
now=`date -d "2017-11-06 15:00:00" +'%s'`
kijun=`date -d "$kijun_time" +'%s'`
diff=`bc << _BC_
( $now - $kijun ) /10.24
_BC_`
now_file=`bc << _BC_
( $kijun_file + $diff ) % 2000
_BC_`echo $now_file
で求めることができます。上記のスクリプトを実行すると1237.tsとなります。
これを踏まえて、1225.tsというファイルが放送される時刻を求めようとするならば、
file=1225
file_diff=`bc << _BC_
( 2000 + $now_file - $file ) % 2000
_BC_`
file_time=`bc << _BC_
$kijun + ( $diff - $file_diff ) * 10.24
_BC_`
date -d "@"$file_time +'%F %T'
を用います。14時57分50秒と予測されます。
以上を一般化して下記のスクリプトによりダウンロード時刻直近の任意のファイル番号の放送時刻が推定可能となりそうです。スクリプト名をfile2clockとするならば、
file2clock file=1225 のようにして実行します。
#!/bin/bash
file=`getparstr $# "$*" "file"`
kijun_time="2017-11-4 12:00"
kijun_file=1308
now_time=`date +'%F %T'`now=`date -d "$now_time" +'%s'`
kijun=`date -d "$kijun_time" +'%s'`
diff=`bc << _BC_
( $now - $kijun ) /10.24
_BC_`
now_file=`bc << _BC_
( $kijun_file + $diff ) % 2000
_BC_`file_diff=`bc << _BC_
( 2000 + $now_file - $file ) % 2000
_BC_`
file_time=`bc << _BC_
$kijun + ( $diff - $file_diff ) * 10.24
_BC_`
date -d "@"$file_time +'%F %T'