簡易 radiko.jp プレミアム対応 Radiko 録音スクリプト rec_radiko2.sh 公開。

簡易radiko録音ツール。要swftools
https://gist.github.com/saiten/875864
簡易Radiko録音スクリプト
https://gist.github.com/matchy2/3956266

上記 URL を参考に radiko.jp プレミアム対応の簡易 Radiko 録音スクリプト rec_radiko2.sh を作成してみました。引数として放送局のステーション id、録音時間、メールアドレス、パスワードなどを渡すと mp3 形式ファイルを作成します。(スクリプトを実行すると録音が始まります。)

追記: 2019/04/01(Mon) 19:17:08

Flash 版の RTMP を利用した拙作 rec_radiko2.sh ではなく、HLS配信データを保存する rec_radiko_live.sh を使用してください。詳しい解説、ダウンロードリンク先は下記 URL を参照してください。

rec_radiko_live.sh
https://github.com/kyoshiaki/yplayer/blob/master/tools/README.md

下記 URL で公開します。

簡易 radiko.jp プレミアム対応 Radiko 録音スクリプト rec_radiko2.sh
http://kyoshiaki.sakura.ne.jp/osx/Sample/rec_radiko2.zip
同時録音に対応した簡易 radiko.jp プレミアム対応 Radiko 録音スクリプト rec_radiko2.sh
http://kyoshiaki.sakura.ne.jp/osx/Sample/rec_radiko2_1.zip
タイムフリーの仕様変更に対応した
同時録音に対応した簡易 radiko.jp プレミアム対応 Radiko 録音スクリプト rec_radiko2.sh
http://kyoshiaki.sakura.ne.jp/osx/Sample/rec_radiko2_2.zip

同時録音版の詳しい詳細は、下記 URL

Radiko 録音スクリプト rec_radiko2.sh を同時録音に対応。Raspberry Pi に Samba を
インストールして iPhoneMacRaspberry Pi にアクセス。
http://kyoshiaki.hatenablog.com/entries/2014/07/30

を参照してください。

簡易 radiko.jp プレミアム対応 Radiko 録音スクリプト rec_radiko2.sh では、Login チェックと Logout 処理も追加してみました。Raspberry Pi の sh (dash) は、シェル関数に対応していません。それで bash で動作するように指定しています。Logout 処理がプログラム的に正しいのかあまり自信がありません。本来は、GitHub でフォークして公開すべきなのですが、GitHub を利用したことがないのでブログで公開しています。GitHub で公開するほどのプログラムもないし、git の使い方も精通していないのが現状です。

また、rec_radiko2.sh の 105 行目から 118 行目のコメント# をは外すと

jq
http://stedolan.github.io/jq/

jq を使用してエリアーフリー、有料会員のチェックを行なうことができます。最初は無効になっています。

Raspberry PiUbuntu 13.10、OS X Mavericks で動作確認をしています。

1) OS X Mavericks の場合

OS X 10.9 MavericksRadiko 録音する方法。 - KOYAMA Yoshiaki のブログ
http://kyoshiaki.hatenablog.com/entry/2014/02/23/183535

基本的に上記 URL の rec_radiko.sh を rec_radiko2.sh に置き換えて読んでください。
上記 URL で説明し忘れましたが、

Homebrew — MacPortsは酒でも飲みたくなるでしょ?じゃあHomebrewを使おう!
http://brew.sh/index_ja.html

Homebrew をインストールする前に App Store を使って Xcode をダウンロードし、ターミナル上で

~$ xcode-select --install
~$ sudo xcodebuild -license

上記コマンドを使い、コマンドラインツールをインストールする必要があります。一度 Xcode を起動すると sudo xcodebuild -license は必要ないかもしれません。

jq
http://stedolan.github.io/jq/

コマンド jq のインストールは、ターミナル上で

~ $ brew install jq

を実行してください。

rec_radiko2.sh の引数については、最後に書いてある Raspberry Pi の説明を参考にしてください。

2) Ubuntu 13.10 の場合

簡易 radiko.jp プレミアム版録音スクリプト rec_radiko2.sh を実行できるように必要なプログラムをインストールする必要があります。

Terminal 上で

$ sudo apt-get update
$ sudo apt-get install rtmpdump swftools libxml2-utils ffmpeg libavcodec-extra-53 

上記 コマンドを実行してインストールしてください。

その後、

簡易 radiko.jp プレミアム対応 Radiko 録音スクリプト rec_radiko2.sh
http://kyoshiaki.sakura.ne.jp/osx/Sample/rec_radiko2.zip
同時録音に対応した簡易 radiko.jp プレミアム対応 Radiko 録音スクリプト rec_radiko2.sh
http://kyoshiaki.sakura.ne.jp/osx/Sample/rec_radiko2_1.zip
タイムフリーの仕様変更に対応した
同時録音に対応した簡易 radiko.jp プレミアム対応 Radiko 録音スクリプト rec_radiko2.sh
http://kyoshiaki.sakura.ne.jp/osx/Sample/rec_radiko2_2.zip

上記 URL から rec_radiko2.sh をダウンロードし、

OS X 10.9 MavericksRadiko 録音する方法。 - KOYAMA Yoshiaki のブログ
http://kyoshiaki.hatenablog.com/entry/2014/02/23/183535

上記 URL の crontab -e 設定を参考にしてください。

Rhythmbox で MP3 形式ファイルを再生できるように

$ sudo apt-get install ubuntu-restricted-extras

を実行してください。また、python がインストールされていない場合は

$ sudo apt-get install python

上記コマンドでインストールしてください。

rec_radiko2.sh の引数については、次に書いてある Raspberry Pi の説明を参考にしてください。

3) Raspberry Pi の場合

Raspberry Pi を設定するには、Mac のターミナルから ssh を使う必要があります。ssh の設定、基本的な使い方は

Raspberry Pi の入手方法と基本設定 - KOYAMA Yoshiaki のブログ
http://kyoshiaki.hatenablog.com/entry/2014/04/20/182455

上記 URL を参考にしてください。

上記 URLで説明してある通り Raspberry Pi の IP アドレスを確認する必要があります。 Raspberry PiHDMI ケーブルでテレビに接続し、USB端子にキーボード、マウスを繋ぎ、SDカードを挿入します。また LAN ケーブルか USB 無線 LAN アダプタを接続してください。最後に電源を入れます。

Usename: pi
パスワード: raspberry

でログインし、コマンド ifconfig -a を実行します。

$ ifconfig -a
wlan0     Link encap:Ethernet  HWaddr **:**:**:**:**:**
inet addr:192.168.xx.xx  Bcast:192.168.xx.255  Mask:255.255.255.0

USB 無線 LAN アダプタの場合、wlan0 の inet addr:192.168.xx.xx が目的の IP アドレス 192.168.xx.xx です。
LAN ケーブルの場合、en0 の inet addr:192.168.xx.xx が目的の IP アドレス 192.168.xx.xx です。

まず、簡易 radiko.jp プレミアム対応 Radiko 録音スクリプト rec_radiko2.sh を実行できるように必要なプログラムをインストールする必要があります。Mac のターミナルで ssh を使って、Raspberry Pi にログインし

~ $ ssh pi@192.168.xx.xx
pi@192.168.xx.xx's password:
pi@raspberrypi ~ $ sudo apt-get update
pi@raspberrypi ~ $ sudo apt-get install rtmpdump swftools libxml2-utils ffmpeg

上記コマンドを使ってインストールしてください。

pi@raspberrypi ~ $ exit
logout
Connection to 192.168.1.14 closed.
~ $ 

一度、コマンド exit で Raspberry Pi をログアウトします。

次に、

簡易 radiko.jp プレミアム対応 Radiko 録音スクリプト rec_radiko2.sh
http://kyoshiaki.sakura.ne.jp/osx/Sample/rec_radiko2.zip
同時録音に対応した簡易 radiko.jp プレミアム対応 Radiko 録音スクリプト rec_radiko2.sh
http://kyoshiaki.sakura.ne.jp/osx/Sample/rec_radiko2_1.zip
タイムフリーの仕様変更に対応した
同時録音に対応した簡易 radiko.jp プレミアム対応 Radiko 録音スクリプト rec_radiko2.sh
http://kyoshiaki.sakura.ne.jp/osx/Sample/rec_radiko2_2.zip

Mac で上記 URL から rec_radiko2.zip をダウンロードします。Finder 上でダブルクリックして展開します。展開されて作成されたフォルダ rec_radiko2 をデスクトップに移動します。

Mac のターミナルで、次のコマンド

~ $ cd Desktop/rec_radiko2/
~/Desktop/rec_radiko2 $ scp rec_radiko2.sh pi@192.168.xx.xx:/home/pi
~/Desktop/rec_radiko2 $ scp delete.py pi@192.168.xx.xx:/home/pi
~/Desktop/rec_radiko2 $ 

scp を使って rec_radiko2.sh、delete.py ファイルを Raspberry Pi の /home/pi ディレクトリにコピーします。

rec_radiko2.sh の引数は

rec_radiko2.sh <channel_name_id> <minutes> <mail address> <password> [outputdir] [prefix]

です。

引数の詳細は

channel_name_id: 放送局の station id
minutes: 何分録音するか
mail address: radiko.jp プレミアムにログインするメールアドレス
password: radiko.jp プレミアムにログインするパスワード
outputdir: 出力するディレクトリ
[prefix]: 保存ファイル名の先頭文字。指定されない場合 channel_name_id
が使われます。
例)
pi@raspberrypi ~ $ ./rec_radiko2.sh TBS 1 mail password
TBS を 1分間録音してカレントディレクトリに名前の先頭が TBS のファイル
を MP3 形式で保存します。
pi@raspberrypi ~ $ ./rec_radiko2.sh TBS 120 mail pasword radio
TBSラジオを 120分録音してカレントディレクトリの radio ディレクトリに
名前の先頭が TBS のファイルを MP3 形式で保存します。

です。

放送局の station id は

簡易 radiko.jp プレミアム対応 Radiko 録音スクリプト rec_radiko2.sh
http://kyoshiaki.sakura.ne.jp/osx/Sample/rec_radiko2.zip
同時録音に対応した簡易 radiko.jp プレミアム対応 Radiko 録音スクリプト rec_radiko2.sh
http://kyoshiaki.sakura.ne.jp/osx/Sample/rec_radiko2_1.zip
タイムフリーの仕様変更に対応した
同時録音に対応した簡易 radiko.jp プレミアム対応 Radiko 録音スクリプト rec_radiko2.sh
http://kyoshiaki.sakura.ne.jp/osx/Sample/rec_radiko2_2.zip

に含まれる radiko_curl_area.sh を使ってダウンロードされる XML ファイルで確認できます。

まず、最初に Mac のターミナル上で

~/Desktop/rec_radiko2 $ ./radiko_curl_area.sh

を実行してください。

地域別の放送局情報 XML都道府県別に JP1.xml ~ JP47.xml という名前のファイルでダウンロードされます。

ISO 3166-2:JP - Wikipedia
https://ja.wikipedia.org/wiki/ISO_3166-2:JP

都道府県コードは上記 URL を参照してください。

放送局情報 XMLファイルの

JP13.xml: 東京
JP27.xml: 大阪

です。

===== JP13.xml =====
<?xml version="1.0" encoding="UTF-8" ?>
<stations area_id="JP13" area_name="TOKYO JAPAN">
<station>
<id>TBS</id>
<name>TBSラジオ</name>
.
.
.
</station>
<station>
<id>QRR</id>
<name>文化放送</name>
<ascii_name>JOQR  BUNKA HOSO</ascii_name>
.
.
.
</station>
</stations>

<stations area_id="JP13" area_name="TOKYO JAPAN">

area_name が都道府県です。この場合、東京都です。

<station>
</station>

で囲まれた部分が放送局です。

 <station>
<id>TBS</id>
<name>TBSラジオ</name>

で囲まれた部分が channel_name_id: 放送局の station id です。この場合、TBS です。

Mac のターミナル上で下記のように ssh を使って Raspberry Pi にログインし、

~ $ ssh pi@192.168.xx.xx
pi@192.168.xx.xx's password:
.
pi@raspberrypi ~ $ ./rec_radiko2.sh TBS 1 mail password
.
.
=== Logout: radiko.jp ===
Stream mapping:
Stream #0.0 -> #0.0
Press ctrl-c to stop encoding
size=     940kB time=60.12 bitrate= 128.0kbits/s
video:0kB audio:939kB global headers:0kB muxing overhead 0.015906%

スクリプト rec_radiko2.sh が正しく動作するか、rec_radiko2.sh TBS 1 mail password を実行してください。mail、password は、radiko.jp プレミアムにログインする時に使用するメールアドレスとパスワードです。TBS ラジオを1分間録音し MP3 形式ファイルに書き込んでいます。(長時間録音すると MP3 形式に変換するのに時間がかかるので注意してください。)

pi@raspberrypi ~ $ ls
delete.py  public_html          radio           run.sh
Desktop    python_games         rec_radiko2.sh  svnc.sh
pi.conf    radiko_wget_area.sh  rec_radiko.sh   TBS_2014-xx-xx-xx_xx.mp3
pi@raspberrypi ~ $ 

上記のように TBS_2014-xx-xx-xx_xx.mp3 が目的のファイルです。

システム環境設定を開いて ‘共有/リモートログイン’ にチェックを入れてください。上図の右中央部分の ‘リモードログイン: 入’ 文字列の下に

このコンピュータにリモートログインするには、
"ssh username@192.168.yy.yy" と入力してください。

と表示されているはずです。IP アドレス: 192.168.yy.yy、username を確認して下さい。

Raspberry Pi から Mac にコマンド scp を使って

pi@raspberrypi ~ $ scp TBS_2014-xx-xx-xx_xx.mp3 username@192.168.yy.yy:/Users/username

TBS_2014-xx-xx-xx_xx.mp3 ファイルを Macホームフォルダにコピーします。
上記 scp コマンドで IP アドレス 1箇所と username を2箇所間違いなく置き換えてください。

pi@raspberrypi ~ $ scp TBS_2014-xx-xx-xx_xx.mp3 username@192.168.yy.yy:/Users/username
The authenticity of host '192.168.yy.yy (192.168.yy.yy)' can't be established.
RSA key fingerprint is xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.yy.yy' (RSA) to the list of known hosts.
Password:
TBS_2014-xx-xx-xx_xx.mp3                      100%  940KB 939.5KB/s   00:01
pi@raspberrypi ~ $ 

ホストの認証が確立できないので続けて良いか尋ねられますが、yes とタイプし、 Mac にログインする時に使うパスワードを入力してください。これでコピーできるはずです。

ホームフォルダを Finder 上で開き、TBS_2014-xx-xx-xx_xx.mp3 ファイルにカーソルを合わせてしばらくすると再生ボタンが現れるのでクリックしてください。再生されるはずです。

OS X 10.9 MavericksRadiko 録音する方法。 - KOYAMA Yoshiaki のブログ
http://kyoshiaki.hatenablog.com/entry/2014/02/23/183535

上記 URL にも cron の説明があります。私は Raspberry Pi 上で radiko.jp プレミアムを cron を使ってタイマー録音しています。

いちいちコマンド scp を使ってコピーするのは面倒なので、Raspberry Pi に Samba をインストールして Mac の Finder から直接再生したり、iPhone (iPod touch) から

Documents 5 (Free)
カテゴリ: 仕事効率化
無料
Documents 5 – 高速 PDF リーダー、メディアプレーヤー、ダウンロードマネージャ - Readdle
GoodReader for iPhone
カテゴリ: 仕事効率化
¥500
GoodReader for iPhone - Good.iWare Ltd.
GoodReader 4 (GoodReader 最新版)
カテゴリ: 仕事効率化
¥300
GoodReader 4 - Good.iWare Ltd.

上記アプリを使って MP3 ファイルをダウンロードし、再生しています。有料ですが GoodReader for iPhone は30秒早送りもできるので便利です。Raspberry Pi に Samba をインストールする方法と Mac の Finder からアクセスする方法、上記アプリの使用方法は次回説明したいと思います。

Raspberry Pi での cron 設定は、まず Mac のターミナル上でコマンド ssh を実行し Raspberry Pi にログインします。

~ $ ssh pi@192.168.xx.xx
pi@192.168.xx.xx's password:
Linux raspberrypi 3.10.25+ #622 PREEMPT Fri Jan 3 18:41:00 GMT 2014 armv6l
pi@raspberrypi ~ $ crontab -e

上のように crontab -e を実行します。

#
# m h  dom mon dow   command
0 8 * * 0 /home/pi/delete.py -y -d /home/pi/radio 12
0 1 * * 0,5 /home/pi/rec_radiko2.sh LFR 120 mail password /home/pi/radio/night
0 1 * * 2 /home/pi/rec_radiko2.sh TBS 120 mail password /home/pi/radio/junk
0 13 * * 1-5 /home/pi/rec_radiko2.sh TBS 150 mail password /home/pi/radio/tama

エディタ nano が起動します。カーソルキーで一番下に移動し、上記内容を入力してください。画面下に表示されているように CTRL+O を入力するとファイル名が表示されるので Return Key を押して保存します。CTRL+X で終了してください。mail (3箇所)、password (3箇所) は、radiko.jp プレミアムにログインする時に使用するメールアドレスとパスワードです。

この場合、

日曜日、午前8時にスクリプト /home/pi/delete.py -y -d /home/pi/radio 12
を実行します。
ニッポン放送 (LFR) 日曜日と金曜日、午前1時から2時間、'オールナイトニッポン
(オードリー、ナインティナイン)' を録音します。
TBS ラジオ (TBS) 火曜日、午前1時から2時間、'月曜 JUNK 伊集院光 深夜の馬鹿力'
を録音します。
TBS ラジオ (TBS) 月曜日から金曜日まで、午後1時から2時間30分、'たまむすび'
を録音します。

です。

録音した MP3 ファイルを保存する radio ディレクト

pi@raspberrypi ~ $ mkdir radio

を作成し、radio ディレクトリ内に night、junk、tama ディレクトリをそれぞれ

pi@raspberrypi ~ $ cd radio
pi@raspberrypi ~/radio $ mkdir night
pi@raspberrypi ~/radio $ mkdir junk
pi@raspberrypi ~/radio $ mkdir tama
pi@raspberrypi ~/radio $ 

上記のように作成してください。

crontab の日付時刻設定は

#
# m h  dom mon dow   command
# 何分(0-59) 何時(0-23) 何日(1-31) 何月(1-12) 何曜日(0-6) コマンド
0 8 * * 0 /home/pi/delete.py -y -d /home/pi/radio 12
0 1 * * 0,5 /home/pi/rec_radiko2.sh LFR 120 mail password /home/pi/radio/night
0 1 * * 2 /home/pi/rec_radiko2.sh TBS 120 mail password /home/pi/radio/junk
0 13 * * 1-5 /home/pi/rec_radiko2.sh TBS 150 mail password /home/pi/radio/tama
数字は、時刻、日付、曜日を表し、
* は、毎月、毎日、毎時、毎分です。
曜日は
0: 日曜日
1: 月曜日
2: 火曜日
3: 水曜日
4: 木曜日
5: 金曜日
6: 土曜日

です。

0 1 * * 0,5 /home/pi/rec_radiko2.sh LFR 120 mail password /home/pi/radio/night

0,5 は、複数の曜日を指定しています。日曜日と金曜日を表しています。

0 13 * * 1-5 /home/pi/rec_radiko2.sh TBS 150 mail password /home/pi/radio/tama

1-5 は、複数の曜日を指定しています。月曜日から金曜日を表しています。

上の例は月曜日から金曜日の午後1時にコマンド

/home/pi/rec_radiko2.sh TBS 150 mail password /home/pi/radio/tama

を実行します

簡易 radiko.jp プレミアム対応 Radiko 録音スクリプト rec_radiko2.sh
http://kyoshiaki.sakura.ne.jp/osx/Sample/rec_radiko2.zip
同時録音に対応した簡易 radiko.jp プレミアム対応 Radiko 録音スクリプト rec_radiko2.sh
http://kyoshiaki.sakura.ne.jp/osx/Sample/rec_radiko2_1.zip
タイムフリーの仕様変更に対応した
同時録音に対応した簡易 radiko.jp プレミアム対応 Radiko 録音スクリプト rec_radiko2.sh
http://kyoshiaki.sakura.ne.jp/osx/Sample/rec_radiko2_2.zip

に含まれる delete.py は、次の

pi@raspberrypi ~ $ ./delete.py -d radio 12

コマンドをターミナル上で実行すると radio フォルダの中の日付が最新 12 個以外の削除されるファイルを表示します。

pi@raspberrypi ~ $ ./delete.py -y -d radio 12

上のように -y を引数と指定すると ( -y を指定する場合、十分注意してください。) radio フォルダ内の最新 12 個以外のファイルを削除します。radio フォルダの中にフォルダがある場合、そのフォルダ内も最新 12 個のファイル以外を削除します。

pi@raspberrypi ~ $ ./delete.py -a -d radio

radio フォルダのすべてのファイルを表示します。

0 8 * * 0 /home/pi/delete.py -y -d /home/pi/radio 12
0 1 * * 0,5 /home/pi/rec_radiko2.sh LFR 120 mail password /home/pi/radio/night
0 1 * * 2 /home/pi/rec_radiko2.sh TBS 120 mail password /home/pi/radio/junk
0 13 * * 1-5 /home/pi/rec_radiko2.sh TBS 150 mail password /home/pi/radio/tama

上のように crontab -e で設定すると毎週日曜日の午前8時に radio フォルダ内のファイルを最新 12 個以外削除します。最新 12 個のファイルだけ残るので、ディスク容量を気にする必要がありません。SD カードの容量に合わせて個数を設定してください。2 時間録音した MP3 形式ファイルのサイズは 109.8 MB です。

ディスク容量の確認は、コマンド df -h を使います。

pi@raspberrypi ~ $ df -h
Filesystem      Size  Used Avail Use% Mounted on
rootfs           13G  9.1G  3.3G  74% /
/dev/root        13G  9.1G  3.3G  74% /
devtmpfs        180M     0  180M   0% /dev
tmpfs            38M  744K   37M   2% /run
tmpfs           5.0M     0  5.0M   0% /run/lock
tmpfs            75M     0   75M   0% /run/shm
/dev/mmcblk0p5   60M   19M   41M  32% /boot

上の例は、私の16 GB SD カードの状態です。crontab -e の設定は、上記例とは違います。

ssh を終了するには

pi@raspberrypi ~ $ exit
logout
Connection to 192.168.xx.xx closed.

上記のように exit を実行してください。

OS X 10.9 Mavericks で Radiko 録音する方法。

簡易 radiko.jp プレミアム対応 Radiko 録音スクリプト rec_radiko2.sh 公開。
http://kyoshiaki.hatenablog.com/entry/2014/05/04/184748

上記 URL も参考にしてください。

まず最初に OS X 10.9 Mavericks で動作するように修正した

2ch Script version 0.4
http://kyoshiaki.sakura.ne.jp/osx/index.html

を上記URLで公開します。フリーウェアなので、良かったら気軽にダウンロードして下さい。

最近、マンネリ気味なので新しいことに挑戦してみようと海外のサイト

Raspberry Pi(ラズベリーパイ)
http://jp.rs-online.com/web/generalDisplay.html?id=raspberrypi&cm_mmc=JP-PPC-0411-_-google-_-4_EEM_RaspberryPi_3Mar2012-_-raspberry%20pi_Broad

から Raspberry Pi を直接購入してみました。詳しい内容はまた次回に紹介したいと思います。現在、Radiko 録音装置として使っています。

Raspberry Pi 到着まで、12日かかりました。その間に Raspberry Pi の情報をウェブ上で収集していたのですが、Radiko の録音ツールとして利用している

ピコピコ日記: RaspberryPiでRadikoを録音する
http://shinyamatsuyama.blogspot.jp/2013/06/raspberrypiradiko.html

上記サイトを発見しました。Raspberry Pi が到着するまで暇なので OS X で試してみることにしました。ただし、Radiko を録音するスクリプト

簡易Radiko録音スクリプト
https://gist.github.com/matchy2/3956266

を使うことにしました。

まず、簡易Radiko録音スクリプトを実行できるように必要なプログラムをインストールする必要があります、

プログラムのインストールに

Homebrew — MacPortsは酒でも飲みたくなるでしょ?じゃあHomebrewを使おう!
http://brew.sh/index_ja.html

を利用することにしました。ターミナル上で次のコマンド

~ $ brew update
~ $ brew install wget rtmpdump swftools libxml2 ffmpeg

を使って必要なプログラムをインストールします。

次に

簡易Radiko録音スクリプト
https://gist.github.com/matchy2/3956266

上記 URL の左部分 ‘Download Gist’ ボタンをクリックしてダウンロードします。

ダウンロードされた gistxxxxxxx.tar.gz ファイルを Finder 上でダブルクリックして展開します。作成されたフォルダの中のファイル rec_radiko.sh をホームフォルダに移動します。 rec_radiko.sh ファイルを移動したら、作成されたフォルダはゴミ箱に捨ててください。

ターミナル上でファイル rec_radiko.sh に実行属性をつけます。

~ $ chmod +x rec_radiko.sh 

次に

radiko.jp
http://radiko.jp/

Safari でアクセスして地域と放送局を確認して下さい。(Radiko は IP アドレスを基準に地域を判定します。)

私が

radikoの番組表XML :宗子時空
http://www.dcc-jpl.com/diary/2011/06/13/radiko-xml/

を参考にしたエリア情報取得シェルスクリプト radiko_curl_area.sh、radiko_wget_area.sh と指定したフォルダ内の最新のファイル最大数を設定する Python スクリプト delete.py (delete.py は危険なプログラムです。むやみに実行しないでください。) を下記 URL

radiko_utility.zip
http://kyoshiaki.sakura.ne.jp/osx/Download/radiko_utility.zip

で公開します。上の URL からダウンロードしたファイル radiko_utility.zip を Finder 上で展開し、ファイル radiko_curl_area.sh、radiko_wget_area.sh、 delete.py をそれぞれホームフォルダに移動してください。作成されたフォルダはゴミ箱に捨ててください。

~ $ ./radiko_curl_area.sh 

上記コマンドをターミナル上で実行してください。地域別の放送局情報 XML都道府県別に JP1.xml ~ JP47.xml という名前のファイルでダウンロードされます。

ここで

radiko.jp
http://radiko.jp/

にアクセスした時に表示される地域がどの XML のファイルか確認します。

例えば、放送局の地域が東京ならコマンド grep で “TBSラジオ” で検索します。

~ $ grep -e "TBSラジオ" *.xml
JP10.xml:    <name>TBSラジオ</name>
JP11.xml:    <name>TBSラジオ</name>
JP12.xml:    <name>TBSラジオ</name>
JP13.xml:    <name>TBSラジオ</name>
JP14.xml:    <name>TBSラジオ</name>
JP8.xml:    <name>TBSラジオ</name>
JP9.xml:    <name>TBSラジオ</name>
~ $

JP8.xml ~ JP14.xml まで絞り込めました。

Finder 上で JP13.xml ファイルをダブルクリックすると Xcode が立ち上がります。

================ JP13.xml =======================
<?xml version="1.0" encoding="UTF-8" ?>
<stations area_id="JP13" area_name="TOKYO JAPAN">
<station>
<id>TBS</id>
<name>TBSラジオ</name>
<ascii_name>TBS RADIO</ascii_name>
.
.
</station>
<station>
<id>QRR</id>
<name>文化放送</name>
<ascii_name>JOQR  BUNKA HOSO</ascii_name>
<href>http://www.joqr.co.jp/</href>    <name>TBSラジオ</name>
.
.
================ JP13.xml =======================

2行目の area_name=”TOKYO JAPAN” より、JP13.xml が東京の放送局情報 XMLだとわかります。

rec_radiko.sh の引数は

rec_radiko.sh <channel_name_id> <minutes> <outputdir> [prefix]

です。引数の詳細は

channel_name_id: 放送局の station id
minutes: 何分録音するか
outputdir: 出力するディレクトリ
[prefix]: 保存ファイル名の先頭文字。指定されない場合 channel_name_id
が使われます。
例)
~ $ ./rec_radiko.sh TBS 1
TBS を 1分間録音してカレントディレクトリに名前の先頭が TBS のファイル
を MP3 形式で保存します。
~ $ ./rec_radiko.sh TBS 120 radio
TBSラジオを 120分録音してカレントディレクトリの radio ディレクトリに
名前の先頭が TBS のファイルを MP3 形式で保存します。

です。

自分の地域の放送局を確認するには、放送局情報 XML ファイル、東京の場合は JP13.xml

<station></station>

で囲まれた部分がそれぞれの放送局の情報です。例えば

 <station>
<id>TBS</id>
<name>TBSラジオ</name>
<ascii_name>TBS RADIO</ascii_name>

の部分

<id>TBS</id>

TBSラジオの channel_name_id です。

<station>
<id>QRR</id>
<name>文化放送</name>
<ascii_name>JOQR  BUNKA HOSO</ascii_name>

文化放送の場合は channel_name_id は QRR です。

~ $ ./rec_radiko.sh QRR 120 radio 

文化放送を 120分録音して radio ディレクトリに名前の先頭が QRR のファイルを MP3 形式で保存します。

実際に正しく動作するか、自分の地域の放送局 station_name_id で1分間録音を試してみてください。(ここでは文化放送を指定しています。)

~ $ ./rec_radiko.sh QRR 1 

カレントディレクトリ(この場合、ホームフォルダ) に、ファイル QRR_2014-XX-XX-XX_XX.mp3 が作成されているはずです。

Finder 上で ファイル QRR_2014-XX-XX-XX_XX.mp3 をダブルクリックすると iTunes に登録されてしまうので ‘/アプリケーション’ フォルダの QuickTime Player にドラッグ・ドロップして再生してください。

これで Radiko の録音に成功しました。

ただし、

perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
LC_ALL = (unset),
LANG = "ja_JP.utf8"

という警告が表示されます。問題はないのですが、いやなら .bashrc、.profile ファイルに

export LC_ALL=en_US.UTF-8
export LANG=ja_JP.utf8

を追加してください。

export LC_ALL=C

だと Ruby などで

invalid byte sequence in US-ASCII (ArgumentError)

上記のようなエラーが出ます。注意してください。

後は、cron を使って指定した時間に録音するようにします。次のコマンドを使って

~ $ sudo launchctl unload /System/Library/LaunchDaemons/com.vix.cron.plist
~ $ sudo launchctl load /System/Library/LaunchDaemons/com.vix.cron.plist

cron を起動してください。

次に crontab -e を使用して時間を設定します。

crontab -e を実行するとテキストエディタ vim が起動します。

まず最初に簡単な vim の説明をしたいと思います。vim には、4つのモード (ノーマルモード、コマンドモード、ビジュアルモード、挿入モード) があります。

ノーマルモード: 最初の状態
コマンドモード: ノーマルモードで : キーを押す
ビジュアルモード: ノーマルモードで v キーを押す
挿入モード: ノーマルモードで i キーを押す。
コマンドモード、ビジュアルモード、挿入モードで ESC キーを押すとノーマルモードに戻る。
位置の移動: カーソルキー
文字の入力: 挿入モードで、キーをタイプすると入力できます。delete キーで削除できます。
文字の削除: ノーマルモードで x キーを押すと一文字削除できます。
コピー: ノーマルモードでコピーしたい最初の位置に移動、その後ビジュアルモードに変更、
右カーソルキーで範囲を指定し、y キーを押すとコピーできます。
ペースト: ノーマルモードでペーストしたい位置にカーソルキーで移動し、p キーを押す。
ファイルを保存して終了: ノーマルモードで : w q の順に3つのキーを押して Return
キーを押す。

簡単な vim の説明は、これで終わりです。詳しい説明は

Vimの使い方
http://www15.ocn.ne.jp/~tusr/vim/vim_text0.html

を参考にしてください。

それではコマンド crontab -e を実行します。

~ $ crontab -e

vim が起動します。

PATH=/usr/bin:/bin:/usr/local/bin:/opt/local/bin:opt/local/sbin
0 1 * * 0,2-6 /Users/xxxxxx/rec_radiko.sh LFR 120 /Users/xxxxxx/radio

と入力して保存し、vim を終了してください。コマンド crontab -e を終了したら、入力されたデータが正しいかチェックされ結果がターミナル上に英語で表示されます。

PATH を忘れずに指定してください。
録音した MP3 ファイルを保存する radio ディレクトリを次のコマンド

~ $ mkdir radio

で作成してください。(Finder 上で作成しても構いません。)

0 1 * * 0,2-6 /Users/xxxxxx/rec_radiko.sh LFR 120 /Users/xxxxxx/radio

の xxxxxx の部分はターミナル上で pwd コマンドで

~ $ pwd
/Users/xxxxxx

確認して置き換えてください。

crontab の日付時刻設定は

# m h  dom mon dow  command
# 何分(0-59) 何時(0-23) 何日(1-31) 何月(1-12) 何曜日(0-6) コマンド
0 1 * * 0,2-6 /Users/xxxxxx/rec_radiko.sh LFR 120 /Users/xxxxxx/radio
数字は、時刻、日付、曜日を表し、
* は、毎月、毎日、毎時、毎分です。
曜日は
0: 日曜日
1: 月曜日
2: 火曜日
3: 水曜日
4: 木曜日
5: 金曜日
6: 土曜日

です。

0 1 * * 0,2-6 /Users/xxxxxx/rec_radiko.sh LFR 120 /Users/xxxxxx/radio

0,2-6 は、複数の曜日を指定しています。日曜日,火曜日〜土曜日を表しています。

上の例は日曜日と火曜日から土曜日の午前1時にコマンド

/Users/xxxxxx/rec_radiko.sh LFR 120 /Users/xxxxxx/radio

を実行します。

すなわち、ニッポン放送で日曜日と火曜日から土曜日の午前1時に2時間 (120 分) オールナイトニッポンを録音します。

radiko_utility.zip
http://kyoshiaki.sakura.ne.jp/osx/Download/radiko_utility.zip

に含まれる delete.py は、次の

~ $ ./delete.py -d radio 10

コマンドをターミナル上で実行すると radio フォルダの中の日付が最新 10 個以外の削除されるファイルを表示します。

~ $ ./delete.py -y -d radio 10

上のように -y を引数と指定すると ( -y を指定する場合、十分注意してください。) radio フォルダ内の最新 10 個以外のファイルを削除します。radio フォルダの中にフォルダがある場合、そのフォルダ内も最新10 個のファイル以外削除します。

~ $ ./delete.py -a -d radio

radio フォルダのすべてのファイルを表示します。

PATH=/usr/bin:/bin:/usr/local/bin:/opt/local/bin:opt/local/sbin
0 1 * * 0,2-6 /Users/xxxxxx/rec_radiko.sh LFR 120 /Users/xxxxxx/radio
0 10 * * 0 /Users/xxxxxx/delete.py -y /Users/xxxxxx/radio 10

上のように crontab -e で設定すると毎週日曜日の午前10時に radio フォルダ内のファイルを最新 10 個以外削除します。そのためディスク容量を気にする必要がありません。本来、Raspberry Pi 用に作成したものです。

後、失敗した録音ファイルは

~ $ open /tmp

で確認して下さい。

You have mail.
~ $ 

cron で指定したコマンドが実行されると上記のようにメールが届きます。
ターミナル上で

~ $ cd /var/mail
/var/mail $ ls
xxxxxx

上記コマンドを実行するとユーザー名: xxxxxx のファイルが確認できます。このファイルがメールの実体です。

/var/mail $ cat xxxxxx

上記コマンドで中身が見れます。削除するには

/var/mail $ sudo rm xxxxxx

を実行してください。

自作アプリの OS X 10.9 Mavericks 対応。Sprite Kit を使ったアプリケーション Neko version 1.0 公開。

久しぶりのブログ更新です。Retina ディスプレイ対応の iMac を待っていたのですが、当分なさそうなので、

15インチ MacBook Pro Retina ディスプレイモデル
製品番号: Z0PU
ハードウェア
2.3GHzクアッドコアIntel Core i7(Turbo Boost使用時最大3.5GHz)
16GB 1,600MHz DDR3L SDRAM
512GBフラッシュストレージ(PCIeベース)
バックライトキーボード (JIS) + 製品マニュアル(日本語)

上記、15インチ MacBook Pro Retina を購入しました。ディスプレイが眩しすぎて、目が痛いです。輝度を調整したり、アプリを App Store で購入してみたのですが、慣れるしかないようです。

また、OS も OS X 10.9 Mavericks になったので、私が普段利用している自作アプリを対応させました。 個人的にビルドし直したり、公開していないものもありますが!

  • 動作に問題がない自作アプリ
YKCalendar
StripToString
HatenaDiaryAssistance
PocketLauncher
YKClock
DateMaker
IndexView2
ConvertPTC
Search2chBBS
Wordbook2
YKBookmarks
iYKRSSMac
YKeyes
Sakura

  • 2chScriptMenu

ruby のバージョンが

~ $ ruby --version
ruby 2.0.0p247 (2013-06-27 revision 41674) [universal.x86_64-darwin13]

に変更になったので、正しく動作しません。それでソースの一部を修正しました。現在、問題なく動作しています。

  • PCG-LinkMac

Apple 純正の FTDI ドライバとメーカーの FTDI ドライバが衝突して USB・RS232C シリアルポート変換ケーブルを抜くとカーネルパニックが起きます。
対処方法は、下に別記載してあります。

  • AnimalCrossingDesign

Retina で開くと画像が正しく表示されません。Finder 上で AnimalCrossingDesign.app を右クリック( CTRL + 左クリック ) でメニューを表示し、’情報を見る’ を選択、’低解像度で開く’ に✔️を入れてください。これで再起動すれば、正しく表示されます。

以上の通りです。使っている人もいないと思うので、最新版をそれぞれ公開すべきか悩んでいます。

PCG-LinkMac 自体は、何の問題もなく動作します。ところが USB・RS232C シリアルポート変換ケーブルを抜くとカーネルパニックが起きます
Apple 純正の FTDI ドライバとメーカーの FTDI ドライバが衝突しているのが原因のようです。
それでメーカー製 FTDI ドライバをターミナル上で次のコマンドを使って削除してください。

~ $ cd /System/Library/Extensions/
/System/Library/Extensions $ sudo rm -R FTDIUSBSerialDriver.kext
Password:
/System/Library/Extensions $ sudo touch .
/System/Library/Extensions $

Apple 純正 FTDI ドライバ AppleUSBFTDI.kext は、/System/Library/Extensions/IOUSBFamily.kext/Contents/PlugIns フォルダにあります。

~ $ cd /System/library/Extensions/IOUSBFamily.kext/Contents/Plugins/
/System/library/Extensions/IOUSBFamily.kext/Contents/PlugIns $ ls
AppleUSBCDC.kext		AppleUSBMergeNub.kext
AppleUSBCDCACMControl.kext	AppleUSBOHCI.kext
AppleUSBCDCACMData.kext		AppleUSBOpticalMouse.kext
AppleUSBCDCDMM.kext		AppleUSBUHCI.kext
AppleUSBCDCECMControl.kext	AppleUSBVideoSupport.kext
AppleUSBCDCECMData.kext		AppleUSBXHCI.kext
AppleUSBCDCEEM.kext		IOUSBCompositeDriver.kext
AppleUSBCDCWCM.kext		IOUSBHIDDriver.kext
AppleUSBEHCI.kext		IOUSBHIDDriverSafeBoot.kext
AppleUSBFTDI.kext		IOUSBLib.bundle
AppleUSBHub.kext		IOUSBUserClient.kext
/System/library/Extensions/IOUSBFamily.kext/Contents/PlugIns $ 

後、コマンドラインツールをインストールするには、ターミナル上で

~$ xcode-select --install
~$ sudo xcodebuild -license

を実行するとインストールできます。

Java のインストールは Java 6 のアプリを起動すると Java 6 パッケージをインストールするか尋ねてきます。また Java 7 アプリを起動すると Java 7 パッケージをインストールすることができます。

以前から試してみたかった Sprite Kit に挑戦してみました。衝突処理を物理演算として処理するのには驚きました。

最初に

Sprite Kit Programming Guide: About Sprite Kit
https://developer.apple.com/library/mac/documentation/GraphicsAnimation/Conceptual/SpriteKit_PG/Introduction/Introduction.html#//apple_ref/doc/uid/TP40013043

の Jumping into Sprite Kit

Sprite Kit Programming Guide: Jumping into Sprite Kit
https://developer.apple.com/library/mac/documentation/GraphicsAnimation/Conceptual/SpriteKit_PG/GettingStarted/GettingStarted.html#//apple_ref/doc/uid/TP40013043-CH2-SW1
▼Jumping into Sprite Kit

を試して基本を理解しました。

サンプル3つ

code:Explained Adventure: Introduction
https://developer.apple.com/library/mac/documentation/GraphicsAnimation/Conceptual/CodeExplainedAdventure/AdventureArchitecture/AdventureArchitecture.html#//apple_ref/doc/uid/TP40013140
SpriteKit Physics Collisions
https://developer.apple.com/library/mac/samplecode/SpriteKit_Physics_Collisions/Introduction/Intro.html#//apple_ref/doc/uid/DTS40013390
Sprite Tour
https://developer.apple.com/library/mac/samplecode/Sprite_Tour/Introduction/Intro.html#//apple_ref/doc/uid/DTS40013389

も参考になります。特に

code:Explained Adventure: Introduction
https://developer.apple.com/library/mac/documentation/GraphicsAnimation/Conceptual/CodeExplainedAdventure/AdventureArchitecture/AdventureArchitecture.html#//apple_ref/doc/uid/TP40013140

は、本格的なアドベンチャーゲームです。ソースの解説も上記 URL にあります。

Xcode での Particle Emitter 作成方法は

Particle Emitter Editor Guide: About the Particle Emitter Editor
https://developer.apple.com/library/ios/documentation/IDEs/Conceptual/xcode_guide-particle_emitter/Introduction/Introduction.html

が参考になります。

SKEffectNode、CIFilter の使い方は

Sprite Kit Programming Guide: Working with Other Node Types
https://developer.apple.com/library/ios/documentation/GraphicsAnimation/Conceptual/SpriteKit_PG/OtherNodeClasses/OtherNodeClasses.html#//apple_ref/doc/uid/TP40013043-CH10-SW20
▼Working with Other Node Types
▼Effect Nodes Apply Special Effects to Their Descendants
Core Image Filter Reference
https://developer.apple.com/library/mac/documentation/GraphicsImaging/Reference/CoreImageFilterReference/Reference/reference.html

が参考になります。CIFilter を NSLog で直接表示すると

- (CIFilter *)spotLightFilter
{
CIFilter *filter = [CIFilter filterWithName:@"CISpotLight"]; // 3
[filter setDefaults];
NSLog(@"%@", [filter attributes]);
[filter setValue:[NSNumber numberWithFloat:10.00] forKey:@"inputBrightness"];
[filter setValue:[CIVector vectorWithX:150 Y:150 Z:300] forKey:@"inputLightPosition"];
//    [filter setValue:[CIVector vectorWithX:0 Y:0 Z:0] forKey:@"inputLightPointsAt"];
return filter;
}

2013-12-08 21:18:50.725 SpriteKitGuide[14458:303] {
CIAttributeDescription = "Applies a directional spotlight effect to an image.";
CIAttributeFilterCategories =     (
CICategoryStylize,
CICategoryVideo,
CICategoryStillImage,
CICategoryBuiltIn
);
CIAttributeFilterDisplayName = "Spot Light";
CIAttributeFilterName = CISpotLight;
CIAttributeReferenceDocumentation = "http://developer.apple.com/cgi-bin/apple_ref.cgi?apple_ref=//apple_ref/doc/filter/ci/CISpotLight";
inputBrightness =     {
CIAttributeClass = NSNumber;
CIAttributeDefault = 3;
CIAttributeDescription = "The brightness of the spotlight.";
CIAttributeDisplayName = Brightness;
CIAttributeIdentity = 1;
CIAttributeMin = 0;
CIAttributeSliderMax = 10;
CIAttributeSliderMin = 0;
CIAttributeType = CIAttributeTypeDistance;
CIUIParameterSet = CIUISetBasic;
};
.
.
.
inputImage =     {
CIAttributeClass = CIImage;
CIAttributeDescription = "The image to use as an input image. For filters that also use a background image, this is the foreground image.";
CIAttributeDisplayName = Image;
CIUIParameterSet = CIUISetBasic;
};
inputLightPointsAt =     {
CIAttributeClass = CIVector;
CIAttributeDefault = "[200 200 0]";
CIAttributeDescription = "The x and y position that the spotlight points at.";
CIAttributeDisplayName = "Light Points At";
CIAttributeType = CIAttributeTypePosition3;
CIUIParameterSet = CIUISetBasic;
};
inputLightPosition =     {
CIAttributeClass = CIVector;
CIAttributeDefault = "[400 600 150]";
CIAttributeDescription = "The x and y position of the spotlight.";
CIAttributeDisplayName = "Light Position";
CIAttributeType = CIAttributeTypePosition3;
CIUIParameterSet = CIUISetBasic;
};
outputImage =     {
CIAttributeClass = CIImage;
};
}

と詳しい解説が見れます。

SpriteKit を学んだ集大成として自作アプリ Neko を作成してみました。実行画面は

です。

Neko を下記 URL で公開します。ソースは要望があれば公開します。

Sprite Kit を使ったアプリケーション。
Neko version 1.0
http://kyoshiaki.sakura.ne.jp/osx/Sample/Neko.zip

注意) “Neko は開発元が未確認のため開けません” と表示される場合、Finder 上で Neko を右クリック (CTRL + 左クリック) し、表示されたメニューから ’開く’ を選択してください。ダイアログが表示されるので、’開く’ ボタンをクリックすれば、アプリケーションが実行できるはずです。