LoginSignup
141
98

More than 5 years have passed since last update.

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

Last updated at Posted at 2016-12-11

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

141
98
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
141
98