From: satomichan <...@...> Date: Sun, 19 Apr 2026 09:49:40 +0000 (+0900) Subject: 第2放送(r2)の廃止に対応. 保存ファイルパスを制限長さに収める処理をbytes単位で厳密に. ファイル名用にラジオ深夜便の番組情報を縮める処理を追加. X-Git-Url: https://satomichan.jp/gitweb/?a=commitdiff_plain;ds=sidebyside;p=rec-radiko.git 第2放送(r2)の廃止に対応. 保存ファイルパスを制限長さに収める処理をbytes単位で厳密に. ファイル名用にラジオ深夜便の番組情報を縮める処理を追加. --- diff --git a/get-nhk-title.pl b/get-nhk-title.pl index 18aab9c..361d6b7 100755 --- a/get-nhk-title.pl +++ b/get-nhk-title.pl @@ -14,9 +14,8 @@ NHKオンライン テキスト版 (https://k.nhk.jp/) で提供されている には放送局を指定します. 指定できるのは, - 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} = ''; } #タイトル取得・エスケープ diff --git a/rec-nhk-radio.pl b/rec-nhk-radio.pl index 63a336b..1fe4f06 100755 --- a/rec-nhk-radio.pl +++ b/rec-nhk-radio.pl @@ -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"};