Go
golang
radiko
radio

radikoの録音ツールをGoで書いた

More than 1 year has passed since last update.

この記事は、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