macbook pro で 月曜 junk をとりたいいっ - shell script & launchd (1/2)

きっかけ

ラジオの録音で長いこと使ってきたデバイス,pj−10 の水没.
料理しながら聴いていたら,洗い桶の中...

amazon 見たら,モデルも新しくなってる事だし,新調しようか思ったのですが,...そこで踏ん張ってみた.

うんうん,あるものですね.

ポリシー

あるもので,お金使わず,無いなりに時間と知恵を使って実現したいと思います.
でも負けちゃったらその時はゴメンナサイ(笑

しぇる ってやーつ

同じようなこと考えている人って結構いるものですね.以外.
その中で環境が同じ mac os での事例ということで,こちらのサイトに倣うことに.

ただ恥ずかしながら,自分はこちらのサイトで初めて shell script と言うものの存在を眼の当たりにするわけ.
コード見ても何が何だかさっぱりわかりません...orz
ksh って何でつか? w

準備

ぎっとくろん

github にアクセスして 'radiko' を key に検索.
以下のソースを参考にさせていただきました.

  1. ugegit / Radiko
    →ベースとしたソースコード
  2. fukubaya / radiko.ksh
    →id3の埋め込み処理.
  3. 個人的自由帳 » とあるサイトの録音手段 (シェルスクリプト) →主にリトライ処理.

ベースは 1. シンプルですっきりしていた,という好みで.ありがとうございます,いただきます.;

% git clone https://github.com/ugegit/Radiko.git radiko

そして 2 は,
後で gist 覗いて分かったのですが,今回とてもお世話になったこちらのサイトを参考にしているみたいです.
この辺り見ていて,便利だなぁ思った機能,タイトルやアーティストの情報をセットしちゃう機能が 1 にはなくて,その部分について参考にさせていただきました.
そして 3,このあたり気になっていたので,リトライ処理をと参考にさせていただきました.合ってるのかなぁ...笑

必要なソフトウェアをインストール

これについてもこちらのサイトに "0.前提" としての記載,基本こちらに同じで良いと思います.;

(1) 要 Xcode
(2) 要 rtmpdump,ffmpegwgetbase64swftools
(3) スクリプトのPATHは適宜置換えでよろ.(/opt/local/bin;/usr/local/binなど...)

ちなみに自分は homebrew を使っています.
ので,(2) のソフトウェアはすべて homebrew で賄っています.
問題ありませんでした.

brew install {入れたいソフトウェア}

今回の作業で,これに付け加えるのが以下 ;

(4) python
→ (5) のため.
(5) mutagen-1.20
→ mid3v2 のため.これで録音データに名前/アーティスト/年/アルバム/ジャンルをセットする.

(4) ですが,これは (5) の mutagen というパッケージを使うためです.
(5) は録音したデータのファイルに,itunes でいう名前やアーティストの情報を入れるのに必要なものです.
そんな機能要らない,と言う人は (4) も (5) も導入しなくて良いです.*1

(4) (5)についての手続きは以下の通りです.

  1. pythonmac os でしたら在ると思います.それでもいいのではないかと思います.ちなみにこの python も homeberw です. こんな感じ ;

     % which python
     /usr/local/bin/python
     % python -V
     Python 2.7.3
    
  2. ここのページ右サイド[Featured > Downloads]のここからダウンロードし,好きな場所で解凍します.

     % tar xvzf ~/Downloads/mutagen-1.20.tar.gz
    

    自分は先ほどの clone で 'radiko' というディレクトリを作業場とすることにしたので,そこに移動して解凍してます.
    このパッケージを置く場所は基本どこでもいいと思います.作業,管理し易いよう自分のスタイルで.

  3. 解凍で出来たディレクトリへ cd し,'setup.py' を使って build します.

     % cd mutagen-1.20
     % python setup.py build
    
  4. 同じく今度は install.

     % sudo python setup.py install
    

'mid3v2' ってあります? それです.ok.

録音用シェル

ということで,shell script はこんな感じにしてみました.

あ,一応,注意点.
wget などソフトウェアの記載は,必ずフルパスで書いておいてください.

これは後で出てきますが,
スケジューリングの制御を launcd/launchctl でやっています.

ここかなりハマった所なのですが,
ターミナルで直接叩くと上手くいくのに,launchd/launchctl にすると動作しない.
試行錯誤でいじっていたら,そういうことでした.

使用するソフトウェアは,フルパス.

往々にして,ハマるポイントというのは "まさかこんな単純なとこじゃないよな" と手を付けない所がむしろ核心だったり.orz

テストの仕方例

ターミナルで,今回作ったシェルのパスにスペース区切りでパラメータを記載してエンター,トンっ,でいけると思います.

あ,一応,cache 用のディレクトリ,
shell script でですと 'cachedir' のパスになるディレクトリを作っておいた方がいいと思います.
まぁ存在チェックして,無かったら作るようにすれば良いのですが...ですしw

閑話休題.

ここではちゃんと録音できるか,を確認したいのでいきなり何時間とかではなく,まず 1 分間で試す例をメモしておきます.;

% ~/radiko/radiko.sh TBS 1

同じく shell script 内で 'mp3dir' に指定したパスに mp3 ファイルが出来ていたら ok.
[space] キー押して Quick Look で内容を確かめるも良し,
itunes にもっていって聴いてみるも良し.

さらに id3 tag,つまり itunes で言う [名前] とか [アーティスト] に入る情報が埋め込まれるかも確認してみます.;

% ~/radiko/radiko.sh TBS 1 -t 例.名前 -a 例.アーティスト -g 例.ジャンル -A 例.アルバム

勿論,"例.名前" とか "例.アーティスト" ,この "例〜" はお好きな値に.

さて同じようにファイルは出来てますか??
itunes に読み込んで,入ったトラックの情報 ⌘+i で見てみてください.
ターゲットのフィールドに指定した値が入っていたら ok .

f:id:wooweezoowee:20130107132712j:plain

次はスケジューリング

ここでは多くの方がやられているような cron ではなく,launchd/launchctl を使うことにしてます.

なぜなら mac os 的には,そちらがスタンダード,というか推奨みたいなのと,
まぁ自分がその mac os だから,せっかくなのでそちらに寄ってしまうのも良いだろうと.勉強のためにも,というのが一番だけど.
...勉強だってさ,ぷぷっ

*1:でもこの (4) (5) の手続きは本当に要らないのかもしれません.
というのも,この (4) (5) は上述のとおり,名前やアーティスト名などといった,id3 tag を埋めるために導入しています.
この処理, 本当なら ffmpeg で出来る筈みたいなのです.ところが,自分だけなのでしょうが,これがなかなか上手くいかず,慎重な調査もせずに,mutagen の mid3v2 を導入することに決めました.