Help us understand the problem. What is going on with this article?

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

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした