【Mac】シェルスクリプトでラジコの保存、2018年初頭

2018年1月6日

 あけましておめでとうございます。
 今年もよろしくお願います。

 新年そうそうなんだけど、radiko.jp の番組の録音・保存は、ザリガニが見ていた…。 さんのスクリプトが便利だ。
 ザリガニさんが紹介、改良した rec_radiko.sh スクリプトや、timer コマンドを導入すれば、簡単な登録だけで、あとはもう寝ていても番組が保存されていく、という環境が作れる。
 導入の準備が大変そうに思えるものの、Homebrew というのをぶちこんでしまえば、さほどのことはない。あっという間だ。


スポンサード リンク

 手順としては以下のようになるかと思う。

  1. Homebrew のインストール
  2. 各種コマンドのインストール
  3. timer コマンドのインストール
  4. rec_radiko.sh などスクリプトのインストール

🍺 Homebrew のインストール

Homebrew は、Apple が用意していないあなたの必要なものをインストールします。
Homebrew — macOS 用パッケージマネージャー

 というわけで、Homebrew は macOS のパッケージ管理のツールのひとつである。以下のサイトへいって、冒頭に書いてあるコードをターミナルで実行する。

🍺 Homebrew — macOS 用パッケージマネージャー


/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

 2018 年現在、スクリプトは上のようになっている。
 実行するとすぐさま、
「いろいろフォルダ作ったりするけど、本当にやるの?」
 というような確認と、パスワードの入力を求められる。求められるまま応じて大丈夫だ。
 またインストールの途中で、コマンドラインツールのインストールを求めてくるかもしれない。
 内心嫌だな、と思っても、ここまできたら仕方ないので、ここでも求められるまま応じてあげる。
 インストールはそこそこ時間がかかるものの、まぁ 10 分くらいだと思う。


Installation successful!

 とかいってきたら、成功だ。

 Homebrew 自体をアンインストールする場合は、以下のページの中ほどにあるスクリプトを実行する。

🔗 FAQ — Homebrew

 2018 年はじめのアンインストールのスクリプトは以下のようになっている。


ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/uninstall)"

⬛️ 各種コマンドのインストール

 ラジコの保存に必要なツールは以下の 4 つだ。

  • wget (ファイルのダウンロード)
  • swftools (swf のファイルを扱ったりする)
  • rtmpdump (ストリーミングを保存したりする)
  • ffmpeg (動画や音声を変換する)

 これらを Homebrew でインストールする。基本は、
brew install コマンド名
 で OK だ。
 つまり、


brew install wget
brew install swftools
brew install rtmpdump
brew install ffmpeg


 以上をひとつひとつターミナルで実行していく。Homebrew が必要なものをずんずんとインストールしてくれる。ちなみに、これらが必要なくなったら、


brew uninstall wget

 でいいみたい。
 また、Homebrew インストールのさいにコマンドラインツールのインストールを求められなかった場合、ここでその要求がくるかもしれない。なにかを make とかする時などに、コマンドラインツールはどうしても必要になる。
 最悪、


xcode-select --install

 というのをターミナルで実行すれば、インストールできるらしいので、入れておく。
 すでにインストールされている場合は、


command line tools are already installed

 というメッセージが返ってくるはず。

⏰ timer コマンドのインストール

 タイマー予約のかなめ、timer コマンドをインストールする。
 やり方は、ザリガニさんの下記の記事の通りである。

🔗 予約日時になったらちゃんと目覚めるtimerコマンドが欲しい – ザリガニが見ていた…。

 下記のページへいって、右のほうにある「Clone or download」という緑色のボタンから、「Download ZIP」を選択して、Zip ファイルをダウンロードする。

🔗 GitHub – zarigani/timer

 ダウンロードした Zip ファイルを展開したら、なかにある install.sh を実行する。
 そのさいにパスワードを要求されるので、入力する。


sh /Users/ユーザ名/Downloads/timer-master/install.sh

 コマンドは「usr/local/bin」にインストールされる。
 ファインダーで、[コマンド] + [シフト] + [ g ] キーを押し、「usr/local/bin」と入力すると確認できる。

📻 rec_radiko.sh などスクリプトのインストール

 これも上記、timer コマンドのインストールとほぼ同じなんだけど、ひと工夫いる。
 下記のページへゆき、右側の緑色のボタンから、「Download ZIP」を選択し、ダウンロードするのは同じだ。

🔗 GitHub – zarigani/radikoru

 Zip ファイルを展開してあらわれる「radikoru-master」フォルダのなかに、rec_radiko.sh というファイルがある。
 radiko.jp のほうで仕様の変更があり、その rec_radiko.sh の内容を書き換えなくてはならない。

 CotEditor などで rec_radiko.sh を開き、以下のように、コピペコピペでばんばん書き直していく。

📻 だいたい 8 行目くらい


VERSION=3.0.0.01

VERSION=4.0.0

📻 だいたい 47 行目くらい


swfextract -b 14 $playerfile -o $keyfile

swfextract -b 12 $playerfile -o $keyfile

📻 だいたい 60 行目くらい


--header="X-Radiko-App: pc_1" \

--header="X-Radiko-App: pc_ts" \

📻 だいたい 89 行目くらい


--header="X-Radiko-App: pc_1" \

--header="X-Radiko-App: pc_ts" \

📻 だいたい 93、94 行目くらい


--header="X-Radiko-Authtoken: ${authtoken}" \
--header="X-Radiko-Partialkey: ${partialkey}" \

--header="X-Radiko-AuthToken: ${authtoken}" \
--header="X-Radiko-PartialKey: ${partialkey}" \

📻 だいたい 180 行目くらい


playerurl=http://radiko.jp/player/swf/player_$VERSION.swf

playerurl=http://radiko.jp/apps/js/flash/myplayer-release.swf

 書き換えの箇所は以下のサイトさまを参考にさせていただきました。
🔗 ザリガニさんのrec_radiko.shへのradiko仕様変更点の反映 – 桃源老師のつぶやき

 書き換えが終わったら、rec_radiko.sh を保存する。
 展開したファイルのなかにある「install.sh」を実行すれば、一瞬でインストールの完了だ。
 以上で準備はできたはず。

📻 テストしてみる

 ターミナルを開き、試しにまずfind_radikoru.sh -l を実行してみる。
 これはお住いの地域で聞ける放送局を表示してくれる機能だ。
 おれは群馬県に住んでいるので、以下のように表示される。


$ rec_radikoru.sh -l
---- ID ---- ---- NAME ----
NHK-R1 NHK-R1
NHK-R2 NHK-R2
NHK-FM NHK-FM
TBS TBSラジオ
QRR 文化放送
LFR ニッポン放送
RN1 ラジオNIKKEI第1
RN2 ラジオNIKKEI第2
INT InterFM897
FMT TOKYO FM
FMJ J-WAVE
FMGUNMA FM GUNMA
JORF ラジオ日本
BAYFM78 bayfm78
NACK5 NACK5
YFM FMヨコハマ
HOUSOU-DAIGAKU 放送大学
JOAK NHKラジオ第1(東京)
JOAB NHKラジオ第2
JOAK-FM NHK-FM(東京)

 ラジコの予約や保存には、左に記載されている放送局の ID が必要になる。
 実際に保存できるかどうか、以下のようにして試した。


rec_radiko.sh -t 30 QRR

「-t 30」は三十秒間、という意味、
「QRR」というのは放送局の ID だ。この場合は「文化放送を三十秒、保存する」ということになる。
 実際にやってみると、ダウンロードフォルダに「文化放送_20180104-2240.m4a」というファイルが生成された。再生してみると、ちゃんと音が出る。ファイル名に付随している数字は「2018年1月4日22時40分」という録画開始の時間である。

⏰ timerコマンドを試す

 timer コマンドは、スリープしている Mac を叩き起こしてくれる便利なコマンドである。詳しい解説、使い方はザリガニさんの下記の記事にある。

🔗 予約日時になったらちゃんと目覚めるtimerコマンドが欲しい – ザリガニが見ていた…。

 timer コマンドのオプション設定は簡単なのに、おれのような年寄りにはけっこう難しい。しかし、find_radciko.sh スクリプトを使えば、コピペだけで簡単に予約できるようになる。

 find_radiko.sh は検索文字を引数に入力すると、番組表を検索してくれるスクリプトだ。例えば、find_radiko.sh 爆笑問題 のように使う。
(ただし、radiko.jp がサービスする番組表の仕様が変わったのか、現在のところ少し表示がおかしい)。
 ここでは、BLITZ POWER PUSH という TBS ラジオの 5 分番組でテストする。


$ find_radiko.sh BLITZ
AreaID=JP10

-------------------- 20180101220000 6900 TBS TBSラジオ
====================
timer -e 01/01 2200 /usr/local/bin/rec_radikoru.sh -o radikoru/ -t 6900 TBS

-------------------- 20180101235500 300 TBS TBSラジオ
BLITZ POWER PUSH
====================
timer -e 01/01 2355 /usr/local/bin/rec_radikoru.sh -o radikoru/ -t 300 TBS

-------------------- 20180102220000 6900 TBS TBSラジオ
====================
timer -e 01/02 2200 /usr/local/bin/rec_radikoru.sh -o radikoru/ -t 6900 TBS

-------------------- 20180102235500 300 TBS TBSラジオ
BLITZ POWER PUSH
====================
timer -e 01/02 2355 /usr/local/bin/rec_radikoru.sh -o radikoru/ -t 300 TBS

-------------------- 20180103220000 6900 TBS TBSラジオ
====================
timer -e 01/03 2200 /usr/local/bin/rec_radikoru.sh -o radikoru/ -t 6900 TBS

-------------------- 20180103235500 300 TBS TBSラジオ
BLITZ POWER PUSH
====================
timer -e 01/03 2355 /usr/local/bin/rec_radikoru.sh -o radikoru/ -t 300 TBS

-------------------- 20180104220000 6900 TBS TBSラジオ
====================
timer -e 01/04 2200 /usr/local/bin/rec_radikoru.sh -o radikoru/ -t 6900 TBS

-------------------- 20180104235500 300 TBS TBSラジオ
BLITZ POWER PUSH
====================
timer -e 01/04 2355 /usr/local/bin/rec_radikoru.sh -o radikoru/ -t 300 TBS

-------------------- 20180105220000 6900 TBS TBSラジオ
====================
timer -e 01/05 2200 /usr/local/bin/rec_radikoru.sh -o radikoru/ -t 6900 TBS

-------------------- 20180105235500 300 TBS TBSラジオ
BLITZ POWER PUSH
====================
timer -e 01/05 2355 /usr/local/bin/rec_radikoru.sh -o radikoru/ -t 300 TBS

 というように、今週放送される BLITZ POWER PUSH がずらずらと表示される。
 ここで注目すべきは、


timer -e 01/04 2355 /usr/local/bin/rec_radikoru.sh -o radikoru/ -t 300 TBS

 という一文だ。これをターミナルにコピペして実行すれば、そのまま予約できてしまう。
(ただし、
timer -e 01/05 2200 /usr/local/bin/rec_radikoru.sh -o radikoru/ -t 6900 TBS
 という一文もある。これは前番組の荻上チキの番組のデータだと思われる。仕様の変更があって間違って表示されるようだ)

「timer」は timer コマンドのこと。
「-e」は予約に必要なオプション。
「01/04」というのは録音を実行する日時だ。
「2355」は23時55分をあらわす。録音開始時間。24時間表記を4 桁の数字にして指定する。
「/usr/local/bin/rec_radikoru.sh」は実行するスクリプトと、その場所。
「-o radikoru/」は保存場所である。デフォルトはダウンロードフォルダなので、この場合はダウンロードフォルダに「radikoru」というフォルダを生成して保存する。
「-t 300」は録音時間。秒で入力する。この場合は 5 分間。
「TBS」は録音する放送局の ID。

 これを実行し、意図的に Mac をスリープさせて待ってみたところ、ものの見事に Mac はスリープから起動した。
 正確にいうと、ディスプレイが点灯してパスワードの入力画面が表示され、ほうっておくとディスプレイは暗くなった。おそらくディスプレイはスリープするものの、システムは動いている状態かと思う。
 録音終了時間を経過するとそのままスリープに戻る。
 ダウンロードフォルダ内の radikoru フォルダにはちゃんと意図していたファイルが作られていた。

(試してないけど、ノート型の Mac を閉じている状態ではスリープから復帰しないと思われる)

📆 毎週の予約

 さて、上記の timer コマンドだと、1月4日に一回だけ録音して終わりである。
 BLITZ POWER PUSH は月曜から金曜までやってるので、毎日のように timer コマンドで予約登録しなくちゃいけないのか、というともちろんそんなことはない。
 BLITZ POWER PUSH の場合は以下のように、日付を消して曜日で指定する。


timer -e 01/04 2355 /usr/local/bin/rec_radikoru.sh -o radikoru/ -t 300 TBS

timer -e 1-5 2355 /usr/local/bin/rec_radikoru.sh -o radikoru/ -t 300 TBS

「01/04」を消して、「1-5」とした。
 この 1 というのは月曜日をあらわす。
 以下、2 は火曜日、3 は水曜日、4 木曜日、 5 金曜日、6 土曜日、0 日曜日。
 となる。つまり「1-5」というのは「月曜日から金曜日」まで、ということだ。
 こうしておけば、あとは特に設定しなくても毎週、月曜から金曜はスリープから目覚めて録音してくれるのである。

 例えば毎週火曜日の深夜 1 時から 2 時間、TBS ラジオで放送している「火曜JUNK 爆笑問題カーボーイ」を録音する場合は以下のようになる。


timer -e 3 0100 /usr/local/bin/rec_radikoru.sh -o radikoru/ -t 7200 TBS

 火曜JUNK と銘打ってはいるものの、実際に放送されるのは水曜なので、曜日の指定は「 3 」となる。
 また、予約を取り消す場合は上記の「 -e 」オプションを「 -d 」に変えてもう一度 timer コマンドを実行する。


timer -d 3 0100 /usr/local/bin/rec_radikoru.sh -o radikoru/ -t 7200 TBS

 timer -i を実行すると対話モードに入り、より簡単に予約を削除できる。


$ timer -i
1: 3 0100 /usr/local/bin/rec_radikoru.sh -o radikoru/ -t 7200 TBS
Select Number :1
[c]opy [d]elete :d

 予約のリストが番号つきで表示されるので、消したい予約の番号を入力、その後でデリートの d を入力する。

 ひとつ注意で、-o でファイルの保存場所を指定できるものの、ここに日本語のフォルダを入れたりすると、timer のデリートがうまくいかない、気がする。勘違いかもしれないけど、そういう場合は Users/library/LaunchAgents にある書類を捨てるしかない。

 とはいえ、いろいろ素晴らしくよく出来ていて、今のところ問題なく動いている。すごいと思う。
 ありがたく使わせていただいております。

スポンサードリンク