第2放送(r2)の廃止に対応. 保存ファイルパスを制限長さに収める処理をbytes単位で厳密に. ファイル名用にラジオ深夜便の番組情報を縮める処理を追加. master
authorsatomichan <...@...>
Sun, 19 Apr 2026 09:49:40 +0000 (18:49 +0900)
committersatomichan <...@...>
Sun, 19 Apr 2026 09:49:40 +0000 (18:49 +0900)
get-nhk-title.pl
rec-nhk-radio.pl

index 18aab9c311a660dd59e92d535e15bb7782676e97..361d6b79d06615f37c8dd4e2f808a560a12dff98 100755 (executable)
@@ -14,9 +14,8 @@ NHKオンライン テキスト版 (https://k.nhk.jp/) で提供されている
                        <station> <start_date> <start_time>
 
   <station> には放送局を指定します. 指定できるのは,
-      r2 (第2放送),
       sapporo-r1, sendai-r1, tokyo-r1, nagoya-r1, osaka-r1,
-      hiroshima-r1, matsuyama-r1, fukuoka-r1 (ここまで第1放送),
+      hiroshima-r1, matsuyama-r1, fukuoka-r1 (ここまでAM放送),
       sapporo-fm, sendai-fm, tokyo-fm, nagoya-fm, osaka-fm,
       hiroshima-fm, matsuyama-fm, fukuoka-fm (ここまでFM放送)  です.
 
@@ -128,9 +127,17 @@ if ($program) {
         my $title = '';
 
         #ラジオ深夜便対策
-        if ($option{shinyabin} && $program->{list}[0] =~ /^ラジオ深夜便/) {
-            $title = 'ラジオ深夜便';
-            $option{li} = '2,3';
+        if ($option{shinyabin} && $program->{list}[0] =~ /^関西発ラジオ深夜便/) {
+            $title = '関西発ラジオ深夜便'. $program->{list}[2];
+            $title =~ s/▽天気概況//g;
+            $title =~ s/・?各地の天気と予想気温//g;
+            $option{li} = '';
+        }elsif ($option{shinyabin} && $program->{list}[0] =~ /^ラジオ深夜便/) {
+            $title = 'ラジオ深夜便'. $program->{list}[1]. $program->{list}[2];
+            $title =~ s/▽天気概況//g;
+            $title =~ s/・?各地の天気と予想気温//g;
+            $title =~ s/【アンカー】/_/g;
+            $option{li} = '';
         }
 
         #タイトル取得・エスケープ
index 63a336bff315a444862e738c4ddc58b59c85b408..1fe4f06fcaae25dea2823ed04fc49582b5ec5499 100755 (executable)
@@ -32,8 +32,8 @@ use Getopt::Long qw(:config posix_default no_ignore_case gnu_compat);
 use Time::Piece;
 use Encode;
 
-my $FILE_PERMISSION  = 644;
-my $MAX_TITLE_LENGTH = 160;
+my $FILE_PERMISSION = 644;
+my $MAX_PATH_BYTES  = 230;
 
 
 
@@ -108,8 +108,8 @@ unless (@ARGV) {
     デフォルトは $end_margin_sec 秒です.
 
     <放送局ID> : 地域(sapporo, sendai, tokyo, nagoya, osaka, hiroshima, matsuyama, fukuoka) と
-                 放送(r1, r2, fm) の組み合わせ. ただし r2 には地域なし.
-                 ex) tokyo-r1, matsuyama-fm, r2
+                 放送(AM放送=>r1, FM放送=>fm) の組み合わせ.
+                 ex) tokyo-r1, matsuyama-fm
 
     <録音長(分)> <タイトル> を省略したときには, get-nhk-title.pl を使用して取得します.
 
@@ -152,10 +152,13 @@ $title =~ s/\s+/_/g;
 die "無効な引数です." unless ($y && $m && $d && $time_h <= 24 && $time_h >= 0 &&
                               $time_m <= 59  && $time_m >= 0  && $min > 0     && length $title);
 
-my $file_name_base = sprintf('%04d-%02d-%02d_%02d%02d_nhk-%s_%s_%dmin', $y, $m, $d, $time_h, $time_m, $station,
-                                                                        substr($title, 0, $MAX_TITLE_LENGTH) , $min);
-my $mp3 = "${file_name_base}.mp3";
-my $txt = "${file_name_base}.txt";
+#保存ファイル名 (長さ制限内に収める)
+my $base = sprintf('%04d-%02d-%02d_%02d%02d_nhk-%s_%dmin_%s', $y, $m, $d, $time_h, $time_m,
+                                                              $station, $min, $title       );
+my $len_bytes_save_dir = bytes::length($ENV{RADIKO_SAVE_TO}. '/.mp3');
+$base = substr($base, 0, -1) while bytes::length($base) + $len_bytes_save_dir > $MAX_PATH_BYTES;
+my $mp3 = "${base}.mp3";
+my $txt = "${base}.txt";
 
 my $duration = get_duration_string($min, $end_margin_sec);
 
@@ -168,7 +171,7 @@ my $rec_cmd = "cd $ENV{RADIKO_SAVE_TO}; $SLEEP $offset_time_sec; ".
               (length $ffmpeg_seg_max_retry ? "--ffmpeg-seg_max_retry $ffmpeg_seg_max_retry " : '').
               "$station $duration $mp3 ".
               ($is_logging_mode ? ">> $txt; " : '; ').
-              "$CHMOD $FILE_PERMISSION $file_name_base*.mp3; ";
+              "$CHMOD $FILE_PERMISSION ${base}*.mp3; ";
 my $at_time = sprintf('%d:%02d %02d.%02d.%02d', $time_h, $time_m, $d, $m, ($y - int($y/100)*100 )  );
 my $cmd     = qq{$ECHO -e '$BASH << EOC\\n$rec_cmd\\nEOC' | $AT "$at_time"};