目的
インターネットラジオステーション<音泉>に掲載されるコンテンツを定期的に自動取得し保存する事を目的とします。
経緯
<音泉>のコンテンツは最新の物のみ無料で、過去分を取得しようとすると有料になってしまいます。
ファイル自体はサーバに残っているのですが、無料公開終了後に取得しようとすると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 とします。
スクリプト内でコンテンツ格納場所を定義しています。変更する場合は適宜書き換えてください。
#!/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. 実行属性の付与
実行可能なように属性を付与します。
chmod 755 /hoge/onsen.sh
1.3. crontabの登録
定時自動実行されるようcrontabへ登録します。
この例では毎時5分に実行します。
5 * * * * /hoge/onsen.sh 2>&1 >> /hoge/onsen.log
2. 動作確認
初めて実行する場合、1時間程度かかる場合もあります。
スクリプトの実行が終了したことを確認してから行いましょう。
2.1. ログファイルの確認
エラーが発生していないかログファイルを確認します。
cat /hoge/onsen.log
返り値なし
基本的に何も出力されなければ成功しています。
この他、cron実行結果は電子メイルで届きますからそちらも確認しましょう。
2.2. 取得されたファイルの確認
コンテンツ格納ディレクトリの内容を確認します。
ls -l /hoge/radio/
-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 へ一部変更になっています。
このため同一コンテンツが二重ダウンロードされますがこれは仕様です。
現在は両サーバの内容に差異がないことを確認するため変更していません。適宜削除してください。