Quantcast
Channel: Bashタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 2869

インターネットラジオをズボラに自動録音したい

$
0
0
動機 インターネットラジオを自動で取得する方法は幾つか提供されています。 音泉ダウンロード支援ツール PowerShellでHiBiKi Radio Stationと音泉とRadikoタイムフリーを保存してPodcast形式で配る 音泉ダウンロード支援ツールは便利ですが、 週に一回、Windows PCを起動するのも面倒だなー、と思っていて、 常時起動しているNASとかラズパイで何とかしたいな、が発端です。 crontabからスクリプトを定期で呼び出すだけにしたいのです。 自動取得スクリプト rec-onsen.sh #!/bin/bash KEYWORD=("かもさん" "内田彩の") LINE_TOKEN="" WORK_DIR="./" function onsen_download(){ TARGET=$1 ### ワード検索(タイトル) target_title=`cat ./index.html | jq -r '.[].title' | grep ${TARGET}` if [ "${target_title}" = "" ] ; then echo "no title." return 0 fi ### 最新話パラメータ取得 title=`cat ./index.html | jq -r --arg a "${target_title}" '.[] | select(.title == $a) | .contents[0].title'` poster_image_url=`cat ./index.html | jq -r --arg a "${target_title}" '.[] | select(.title == $a) | .contents[0].poster_image_url'` streaming_url=`cat ./index.html | jq -r --arg a "${target_title}" '.[] | select(.title == $a) | .contents[0].streaming_url'` guests=`cat ./index.html | jq -r --arg a "${target_title}" '.[] | select(.title == $a) | .contents[0].guests[]'` performers=`cat ./index.html | jq -r --arg a "${target_title}" '.[] | select(.title == $a) | .performers[].name'` delivery_date=`date "+%Y"` delivery_date+="年" delivery_date+=`cat ./index.html | jq -r --arg a "${target_title}" '.[] | select(.title == $a) | .contents[0].delivery_date' | sed -e 's/\//月/g'` delivery_date+="日" track_no=`echo ${title} | sed -e 's/[^0-9]//g'` if [ "${guests}" != "" ] ; then guest_title=" ゲスト:${guests}" guests="${guests}" fi filename="${target_title} ${title} ${delivery_date}放送${guest_title}.m4a" ### ダウンロード済確認 downloded=`grep -s ${filename} ./downloaded.txt` if [ "${downloded}" != "" ] ; then echo "Already downloaded." return 0 fi ### カバーアート取得 wget -O "${target_title} ${title} ${delivery_date}放送${guest_title}.jpg" ${poster_image_url} ### ストリーム取得 ffmpeg -i ${streaming_url} ${codec_option} -acodec copy -bsf:a aac_adtstoasc "${filename}" mv ./"${filename}" ./"${filename}.org" ffmpeg -i "${filename}.org" -i "${target_title} ${title} ${delivery_date}放送${guest_title}.jpg" -map 0:a -map 1:v -disposition:1 attached_pic -metadata "title=${target_title} ${title}" -metadata "artist=${performers}" -metadata "comment=ゲスト:${guests}" -metadata "album=${target_title}" -metadata "track=${track_no}" -metadata "date=${delivery_date}" -c copy "${filename}" rm ./*.org ./*.jpg echo "${filename}" >> ./downloaded.txt ### LINE通知 if [ ${LINE_TOKEN} != "" ] ; then curl -X POST -H "Authorization: Bearer ${LINE_TOKEN}" -F "message=録音完了:${filename//;/;}" https://notify-api.line.me/api/notify fi } ### jsonデータ取得 cd ${WORK_DIR} rm -f ./index.html ./title_list.txt wget https://www.onsen.ag/web_api/programs/ cat ./index.html | jq -r '.' > ./index.json cat ./index.html | jq -r '.[].title' > ./title_list.txt ### ストリーム取得 for item in ${KEYWORD[@]}; do onsen_download ${item} done サンプルのダウンロード対象は、長寿番組の動画有/無 から適当にチョイスしています。 仕様説明 番組タイトルからキーワードを検索してダウンロードします 各番組の最新話を対象としてダウンロードします 動画番組の場合も決め打ちでm4aとしてダウンロードします downloaded.txt にダウンロード済ファイル一覧を記録し、重複してダウンロードしない様にしています LINE Tokenを登録する事で、ダウンロード完了時に通知を行います 変数説明 変数 説明 KEYWORD テキスト配列でダウンロード対象を指定 LINE_TOKEN 完了通知用LINE Token WORK_DIR 一時ファイル用ディレクトリ 一時ファイル ファイル 説明 index.html https://www.onsen.ag/ から取得した生データ index.json 上のデータをjqに通して読みやすくしたもの title_list.txt 番組タイトル一覧 downloaded.txt ダウンロード済ファイル一覧 index.json と title_list.txt は特に使っていませんが、 番組を探すのに役に立つので、ファイルを作成する様にしています。 感想 取り敢えず、自分が録音したい番組についてのニーズは満たせたので、満足です。 Jisonの勉強にもなりました。 出演者情報からの検索や、他のインターネットラジオについても考えてみたいですが、 つづきはgithubにスクリプトを置いて、育ててみようと思います。 https://github.com/yoheike/Radio-Rec/releases/tag/v0.1

Viewing all articles
Browse latest Browse all 2869

Trending Articles