らじる★らじるの録音用シェルスクリプト再び

主題
らじる★らじるの録音用シェルスクリプトを作ってみたので紹介する。

背景
ザリガニが見ていた…。さんのらじる★らじるも録音したいにあるrec_radiru.shは、らじる★らじるが仕様変更されて、HLSに変わってしまったため、使えなくなった。
ネットを検索すると、NHKネットラジオAPI プログラミング解説というサイトが見つかった。このサイトの情報によると、ストリームURLはxmlで記述されており、これをパースすることで容易にシェルスクリプト化ができそうだったので、作ってみることにした。

スクリプト
スクリプトの内容を以下に示す。なお、こちらからダウンロードすることもできる。

#!/bin/sh

#  rec_radiru2.sh
#
#
#  Created by 桃源老師 on 2020/01/14.
#
#  NHKのらじる★らじるを録音するためのシェルスクリプト
#
#  バージョン:0.4
#
#  バージョン履歴:
#  0.1(2020/01/14)初版
#  0.2(2020/01/14)wgetをcurlに変更
#  0.3(2020/01/14)らじる★らじるの放送情報チェック(404かxmlか)
#                                録音開始メッセージ表示追加
#  0.4(2020/01/15)録音開始メッセージに録音中の放送局、録音時間を追加
#

#ffmpegの存在チェック
check_ffmpeg=`which ffmpeg`
if [ -z $check_ffmpeg ];then
    echo "ffmpegが見つかりません。インストールしてから、再度実行してください。"
    exit 1;
fi

# NHKのらじる★らじるの放送情報取得
channel_xml=`curl "https://www.nhk.or.jp/radio/config/config_web.xml" 2>/dev/null`

#デバッグ用xmlパス
#channel_xml=`cat $HOME/Downloads/config_web.xml`

#xmlフォーマットかどうか確認
#(移動されたりした場合、NHKは自前の404 HTML文書を吐くので、それと区別する)
if [ ! "`echo $channel_xml | grep \/dev/null`;;
    "2") area_info=`echo $channel_xml | xpath "//stream_url/data[area='sendai']" 2>/dev/null`;;
    "3") area_info=`echo $channel_xml | xpath "//stream_url/data[area='tokyo']" 2>/dev/null`;;
    "4") area_info=`echo $channel_xml | xpath "//stream_url/data[area='nagoya']" 2>/dev/null`;;
    "5") area_info=`echo $channel_xml | xpath "//stream_url/data[area='osaka']" 2>/dev/null`;;
    "6") area_info=`echo $channel_xml | xpath "//stream_url/data[area='hiroshima']" 2>/dev/null`;;
    "7") area_info=`echo $channel_xml | xpath "//stream_url/data[area='matsuyama']" 2>/dev/null`;;
    "8") area_info=`echo $channel_xml | xpath "//stream_url/data[area='fukuoka']" 2>/dev/null`;;
    *) echo "条件に合わないキーが入力されました。終了します。"; exit 1;;
esac

#チャンネル選択
echo "録音したいチャンネルを選択してください。"
echo "1.ラジオ第1 2.ラジオ第2 3.FM:"
read channel
case "$channel" in
    "1")
        channel_name="R1";
        channel_namejp="ラジオ第1";
        hls_url=`echo $area_info | xpath "//r1hls/text()" 2>/dev/null`;;
    "2")
        channel_name="R2";
        channel_namejp="ラジオ第2";
        hls_url=`echo $area_info | xpath "//r2hls/text()" 2>/dev/null`;;
    "3")
        channel_name="FM";
        channel_namejp="FM";
        hls_url=`echo $area_info | xpath "//fmhls/text()" 2>/dev/null`;;
    *)
        echo "条件に合わないキーが入力されました。終了します。"; exit 1;;
esac

#時間指定
echo "録音したい時間を指定してください。:"
read input_time
if [[ "$input_time" =~ ^[0-9]+$ ]];then
    rec_time=$input_time
else
    echo "$input_timeは数字ではありません。終了します。";
    exit 1
fi

#ffmpegを使った録音
#echo $hls_url
#echo $channel_name
#echo $rec_time
work_dir=$HOME/Downloads
output_name=NHK-${channel_name}_`date +%Y%m%d-%H%M`.m4a
#echo $output_name

echo "NHK ${channel_namejp}の${rec_time}秒間の録音を開始しました。終了までしばらくお待ち下さい。"

caffeinate -i ffmpeg -i $hls_url -vn -c:a copy -t $rec_time $work_dir/$output_name 2>/dev/null

echo "録音が終了しました。出力ファイルは${work_dir}に${output_name}という名前で保存されています。"

exit 0

スクリプトを上記からコピペした場合は、ファイル名をrec_radiru2.shとして保存する。

実行権の付与
以下のコマンドを実行し、スクリプトに実行権を付与する。

chmod +x rec_radiru2.sh

実行
以下のようにすると対話式でスクリプトが実行される。

./rec_radiru2.sh

以上。

この投稿へのコメント

コメントはありません。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

この投稿へのトラックバック

トラックバックはありません。

トラックバック URL