＜音泉＞のコンテンツを自動録音(保存)する。

目的
========

<A HREF=http://www.onsen.ag/ target=_blank>インターネットラジオステーション＜音泉＞</A>に掲載されるコンテンツを定期的に自動取得し保存する事を目的とします。

経緯
========

＜音泉＞のコンテンツは最新の物のみ無料で、過去分を取得しようとすると有料になってしまいます。
ファイル自体はサーバに残っているのですが、無料公開終了後に取得しようとするとURLを推測しにくい仕組みになっているため、機械処理により公開期間中に自動保存する方が合理的であると考えこれを製作します。
（総当たりによる取得は可能なものの、試行回数は最大約1477万回であり試行することは不毛である。）

取得の仕組み
========

公開されているコンテンツの一覧が
http://www.onsen.ag/app/programs.xml
に含まれています。
この中にあるURL一覧を抽出し、既取得済URLと比較することで取得すべきコンテンツ一覧を生成、取得します。


0. 準備
=======

0.1. 前提環境
---------------------

bashのスクリプトにより実現しています。
cronによりbashスクリプトを自動実行可能なマシンを準備してください。

0.2. 必要なコマンド
---------------------

現行のunix系OSならほぼ標準で入っていると思いますが、以下のコマンドを使用します。

- curl
- wget
- fgrep
- sed
- sort

0.3. ファイル・ディレクトリ配置
---------------------

以下の配置を例にこの記事は書かれています。
利用環境に応じて適宜書き換えてください。

|ディレクトリ|説明|
|:---------------|:---------------|
|/hoge/|スクリプト及び作業ファイル格納ディレクトリ|
|/hoge/radio/|コンテンツ格納ディレクトリ|

|ファイル名|説明|
|:---------------|:---------------|
|/hoge/onsen.sh|自動取得スクリプト|
|/hoge/onsen.log|ログファイル（自動生成されます）|
|/hoge/onsenget.old|取得済みURL格納ファイル（自動生成されます）|
|/hoge/onsen[1-6]|作業ファイル（実行終了後削除されます）|
|/hoge/onsenget.sh|作業ファイル（実行終了後削除されます）|


1. 構築
=======

1.1. 自動取得スクリプトの作成
---------------

下記の内容を記述したスクリプトファイルを作成します。
ここでは /hoge/onsen.sh とします。
スクリプト内でコンテンツ格納場所を定義しています。変更する場合は適宜書き換えてください。

```bash:スクリプト:
#!/bin/bash
cd /hoge/
rm -f ./onsen1
curl http://www.onsen.ag/app/programs.xml -s -o ./onsen1
fgrep http ./onsen1 > ./onsen2
sed s/.\*http/wget\ -q\ http/ < ./onsen2 > ./onsen3
sed s/\<.\*// < ./onsen3 > ./onsen4
sort -u ./onsen4 > ./onsen5
touch ./onsenget.old
sort -u ./onsenget.old > ./onsen6
fgrep -v -x -f <(fgrep -f ./onsen5 -x ./onsen6) ./onsen5 > ./onsenget.sh
mkdir -p ./radio
cd ./radio/
bash ../onsenget.sh
cd ../
cat ./onsen6 ./onsenget.sh > ./onsenget.old
rm -f ./onsen[1-6] ./onsenget.sh
```

1.2. 実行属性の付与
-----------------

実行可能なように属性を付与します。

```bash:コマンド:
      chmod 755 /hoge/onsen.sh
```


1.3. crontabの登録
-----------------

定時自動実行されるようcrontabへ登録します。
この例では毎時5分に実行します。

```text:結果(例):
5 * * * * /hoge/onsen.sh 2>&1 >> /hoge/onsen.log
```

2. 動作確認
=======

初めて実行する場合、１時間程度かかる場合もあります。
スクリプトの実行が終了したことを確認してから行いましょう。

2.1. ログファイルの確認
---------------

エラーが発生していないかログファイルを確認します。

```bash:コマンド:
cat /hoge/onsen.log
```
```text:結果(例):
      返り値なし
```

基本的に何も出力されなければ成功しています。
この他、cron実行結果は電子メイルで届きますからそちらも確認しましょう。


2.2. 取得されたファイルの確認
---------------

コンテンツ格納ディレクトリの内容を確認します。

```bash:コマンド:
ls -l /hoge/radio/
```
```text:結果(例):
    -rw-r--r-- 1 hoge hage   12125803 Nov 18 12:37 wug161118nF6h.mp3
    -rw-r--r-- 1 hoge hage   14599076 Nov 25 12:04 wug161125Ld5t.mp3
    -rw-r--r-- 1 hoge hage   14031697 Dec  2 12:17 wug161202nG5l.mp3
    -rw-r--r-- 1 hoge hage   12749920 Dec  9 12:33 wug161209lA3c.mp3
    -rw-r--r-- 1 hoge hage   13101006 Dec 16 11:49 wug161216kF7c.mp3
    -rw-r--r-- 1 hoge hage   12762302 Dec 23 11:37 wug161223Al6f.mp3
    -rw-r--r-- 1 hoge hage   14580109 Dec 30 15:52 wug161230Uy6n.mp3
    -rw-r--r-- 1 hoge hage   13047560 Jan  6 11:09 wug170106jV9a.mp3
    -rw-r--r-- 1 hoge hage   14181087 Jan  7 16:10 youjo170107SwNH.mp3
    -rw-r--r-- 1 hoge hage  222973644 Dec 24 15:29 youkoso161224Bi6a.mp4
    -rw-r--r-- 1 hoge hage  225329917 Dec 31 15:34 youkoso161231qZ79.mp4
    -rw-r--r-- 1 hoge hage  227525128 Jan  7 16:10 youkoso170107SwNH.mp4
    -rw-r--r-- 1 hoge hage   13697390 Dec 26 12:09 yp_radio3161226bX0t.mp3
    -rw-r--r-- 1 hoge hage   12334266 Jan  9 13:15 yp_radio3170109zTXf.mp3
    -rw-r--r-- 1 hoge hage   16299813 Oct 24 12:43 yuyuyu2161024h6Vd.mp3
    -rw-r--r-- 1 hoge hage  252353032 Dec  9 15:22 zenbu161209lA3c.mp4
    -rw-r--r-- 1 hoge hage  250546103 Dec 23 16:48 zenbu161223Al6f.mp4
```

このようにコンテンツであるmp3やmp4ファイルが存在すれば成功です。



任務完了
=======

お疲れ様でした。
あとは適宜活用してください。

=======

2017/2/19追記: アイホン・アンドロイド向けの配信にCDNを使用し始めたようです。
配信サーバが onsen.b-ch.com から onsen-dl.sslcs.cdngc.net へ一部変更になっています。
このため同一コンテンツが二重ダウンロードされますがこれは仕様です。
現在は両サーバの内容に差異がないことを確認するため変更していません。適宜削除してください。