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

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

背景
ザリガニが見ていた…。さんのらじる★らじるも録音したいにある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