この記事は、Go (その3) Advent Calendar 2016 の12日目の記事です。
radigo
radikoの録音用のツールをGoで書きました。
https://github.com/yyoshiki41/radigo
Record radiko 📻
radikoのAPIのライブラリも書きました。
https://github.com/yyoshiki41/go-radiko
The unofficial radiko.jp APIs Client Library for Go.
※ 現在(2016年12月)、radikoが公式でAPI公開を行っているわけではありません。
radiko とは
radiko.jp で、インターネットでラジオが聞けるやつです。
今年(2016年)の10月より、タイムフリーという機能がスタートして、
過去1週間分の放送を遡って聴けるようになりました。
radigo では、
- リアルタイムプログラムの録音
- タイムフリープログラムの録音
- エリアフリー(ラジコプレミアム会員用の機能)での録音
に対応しています。
READMEにも書いてますが、簡単な使い方だけ。
機能
Installation
$ go get github.com/yyoshiki41/radigo/cmd/radigo/...
Usage
$ radigo help
usage: radigo [--version] [--help] <command> [<args>]
Available commands are:
area Get available station ids
browse Browse radiko.jp
browse-live Browse radiko.jp live
rec Record a radiko program
rec-live Record a live program
Commands
■ area
現在の地域で聴けるラジオ局の一覧。
$ radigo area
Area ID: JP13
+------------------+----------------+
| NAME | STATION ID |
+------------------+----------------+
| TBSラジオ | TBS |
| ニッポン放送 | LFR |
| InterFM897 | INT |
| TOKYO FM | FMT |
| J-WAVE | FMJ |
| bayfm78 | BAYFM78 |
| NACK5 | NACK5 |
| FMヨコハマ | YFM |
+------------------+----------------+
■ rec
タイムフリー機能を使っての録音。
ラジオ局のIDと時間を指定すると、aacファイルで出力されます。
(他に、mp3もオプションで指定できます。)
$ radigo rec -id=LFR -s=20161126010000
Now downloading..
+------------+---------------------------------+
| STATION ID | TITLE |
+------------+---------------------------------+
| LFR | オードリーのオールナイトニッポン |
+------------+---------------------------------+
Completed!
/tmp/radigo/output/20161126010000-LFR.aac
■ rec-live
リアルタイムで録音。
ラジオ局のIDと録音時間を指定すると、録音が開始されます。
$ radigo rec-live -id=LFR -t=3600
Now downloading..
+------------+---------------+
| STATION ID | DURATION(SEC) |
+------------+---------------+
| LFR | 3600 |
+------------+---------------+
Completed!
/tmp/radigo/output/20161205083547-LFR.aac
■ browse / browse-live
ブラウザでradiko.jpのページを開きます。
ブラウザにURLを入れてクリックして遷移しなくて良いので、
ヘビーリスナーにはちょっと嬉しい機能です。
# リアルタイムのページが開く
$ radigo browse-live -id=LFR
# タイムフリーのページが開く
$ radigo browse -id=LFR -s=20161126010000
■ オプション
エリアフリー機能を使いたい場合、
環境変数でラジコプレミアムのmail/passwordを指定すると使えます。
RADIKO_MAIL
RADIKO_PASSWORD
実装
あまりGo自体の詳細には触れませんが、、
radikoのクライアントライブラリは、上で書いた自作のもの。
https://github.com/yyoshiki41/go-radiko
大方のAPIはサポートしています。
(Authのリクエスト方式や配信プロトコルを地道にトレースしました。)
CLIライブラリには、mitchellh/cli を使いました。
ファイル出力自体は、外部コマンド(ffmpegやrtmpdump)を os/exec
で呼ぶだけなので、さほど難しくありません。
パイプ処理だけ少し戸惑いましたが、stack overflowを参考にしました。
How to pipe several commands in Go?
感想
便利に使ってます。
機能追加の要望やプルリクは、いつでもお待ちしております!
また、個人的な視聴の範囲を超える利用はご遠慮ください m(_ _)m