1. Qiita
  2. Items
  3. golang

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

  • 88
    Like
  • 0
    Comment

この記事は、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と時間を指定すると、5分ほどでmp3ファイルが出来上がります。

$ radigo rec -id=LFR -s=20161126010000
Now downloading..
+------------+---------------------------------+
| STATION ID |              TITLE              |
+------------+---------------------------------+
| LFR        |    オードリーのオールナイトニッポン |
+------------+---------------------------------+
Completed!
/tmp/radigo/output/20161126010000-LFR.mp3

■ rec-live

リアルタイムで録音。
ラジオ局のIDと録音時間を指定すると、録音が開始されます。

$ radigo rec-live -id=LFR -t=3600
Now downloading..
+------------+---------------+
| STATION ID | DURATION(SEC) |
+------------+---------------+
| LFR        |          3600 |
+------------+---------------+
Completed!
/tmp/radigo/output/20161205083547-LFR.mp3

■ 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 を使いました。

mp3ファイルの作成自体は、外部コマンド(ffmpegやrtmpdump)を os/exec で呼ぶだけなので、さほど難しくありません。
パイプ処理だけ少し戸惑いましたが、stack overflowを参考にしました。
How to pipe several commands in Go?

感想

便利に使ってます。
機能追加の要望やプルリクは、いつでもお待ちしております!
また、個人的な視聴の範囲を超える利用はご遠慮ください m(_ _)m

Comments Loading...