らじる★らじる 録音予約ツール

2025/09/28 00:39 LinuxPerl
らじる★らじる でインターネット配信されるラジオ番組を、指定した時刻に予約録音するツールを制作しました。

ソースファイル

動作要件

  • Linux など
  • perl 次のモジュールが使用可能なこと
    • HTTP::Tiny
    • HTML::Entities
    • XML::XPath
    • XML::XPath::XMLParser
  • ffmpeg が単独で正常に動作していること(パスの通っている場所に配置してください)
  • at (ジョブの遅延実行とバッチ処理) がインストールされていること。

実行方法の例

各 .pl ファイルに実行権をつけて、パスの通っている場所 (/usr/local/bin/ など) に配置して、
$ rec-nhk-radio.pl [ -c | --check | --verbose ] [--offset-time <開始オフセット(秒)>] [--end-margin  <後方余白(秒)>] <放送局ID> [<録音開始日>] <録音開始時刻> [<録音長(分)> <タイトル>]
のように実行してください。
-c または --check任意atコマンドを発行せずに、コマンドの内容を表示します。
--verbose任意冗長表示モード
--offset-time <開始オフセット(秒)>任意録音開始時刻の00秒から実際に録音を開始するまでの秒数を指定します。デフォルトは35秒です。らじる★らじる は電波での放送から50秒ほど遅れているようです。
--end-margin <後方余白(秒)>任意指定の録音長さの後に余分に録音する秒数を指定します。デフォルトは30秒です。
<放送局ID>必須放送局ID 例: tokyo-r1, r2, tokyo-fm
<録音開始日>省略可録音開始する日付を YYYY-MM-DD 形式で指定します。 例: 2024-09-02
<録音開始時刻>必須録音開始する時刻を24時間制で hhmm または hh:mm 形式で指定します。 例: 305, 0305, 3:05, 03:05
<録音長(分)>省略可録音の長さを分単位で指定します。 例: 61
<タイトル>省略可タイトルを指定します。
<録音開始日> を省略した場合には、現在以降直近の <録音開始時刻> から録音が開始されます。
<録音長(分)> と <タイトル> を省略した場合には、番組表からそれらの情報を取得し設定されます。

環境変数 RADIKO_SAVE_TO に保存先のディレクトリを指定します。
~/.bashrc などに
export RADIKO_SAVE_TO=/var/radiko/save/to
のように追記すればよいでしょう。

放送局ID

指定できるのは、r2 (第2放送), sapporo-r1, sendai-r1, tokyo-r1, nagoya-r1, osaka-r1, hiroshima-r1, matsuyama-r1, fukuoka-r1 (ここまで第1放送),
sapporo-fm, sendai-fm, tokyo-fm, nagoya-fm, osaka-fm, hiroshima-fm, matsuyama-fm, fukuoka-fm (ここまでFM放送) です。

2025-09-27

らじる★らじる の URL 変更(2025-09-26)に伴い、録音部を radish から新たに自作した dl-radiru2.pl に切り替えました。

2025-08-03

もともと radiko 専用としていましたが、radish での radiko 対応が残念ながら終えられてしまったので、本ツールも らじる★らじる 専用として改修しました。

2024-09-11対策済み: at の落とし穴 (?) セット時のカレントディレクトリがなくなってしまったときの問題

このツールでタイマー録音をセットしたのに、録音に失敗するケースがありました。
rec-radiko.pl を実行した時点のカレントディレクトリを削除して(あるいは名前変更して)しまうとダメなようでした。
at -c <job番号> で確認してみると
cd /home/*****/aaaaa/bbbbb || {
         echo 'Execution directory inaccessible' >&2
         exit 1
}
のような記述があって、at を読んだときのディレクトリが存在しなくなると失敗させるようになっていました。