0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

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

Last updated at Posted at 2021-08-16

動機

インターネットラジオを自動で取得する方法は幾つか提供されています。

音泉ダウンロード支援ツールは便利ですが、
週に一回、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}"
		guest_option="ゲスト:${guests}"
	else
		guest_title=""
		guest_option=""
	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 -headers "Referer: https://www.onsen.ag/" -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=${guest_option}" -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

追記

  • 出演者とゲストのサーチに対応しました
  • 響も対応しました (rec-hibiki.sh)

追記2

2021/12/15に音泉の仕様変更が有り、
-headers "Referer: https://www.onsen.ag/" を付与する必要が出た様です。
付けなければ、"Server returned 403 Forbidden (access denied)"が発生します。

0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?