June 10, 2018

GoのMirakurunクライアントパッケージを公開しました

GoMirakurunのWeb APIを利用するためのクライアントパッケージ go-mirakurunを公開しました。

import "ykzts.com/x/mirakurun"

このようにインポートパス「ykzts.com/x/mirakurun」をimportすることによって使えるようになっています。実体はGitHubにありますが、将来的になんらかの事情でGitHubを利用するのを止めたときのためにインポートパスをGitHubと紐付かないものにしています。

Mirakurunとは

Mirakurunはれいささんが公開されているRESTfulなWeb APIを備えたデジタルテレビ放送のチューナーサーバーです。MirakurunにはNode.jsから利用することのできるクライアントライブラリーが付属していて柔軟な利用が可能になっています。

go-mirakurunはTypeScriptで書かれたクライアントライブラリーをGoに移植したものになっています。Node.js向けではあるものの元から型の宣言がなされているため、大きな苦労をすることなく移植できました。

使い方

任意のプログラムID (変数 pId) に紐付く特定の番組を録画する場合はClient.GetProgramStreamを使います。contextパッケージを使って実行中のキャンセルやタイムアウトができるようになっています。

filename := fmt.Sprintf("/tmp/stream-%d.ts", pId)

file, err := os.Create(filename)
if err != nil {
    log.Fatal(err)
}

c := mirakurun.NewClient()

ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
defer cancel()

stream, _, err := c.GetProgramStream(ctx, pId, true)
if err != nil {
    log.Fatal(err)
}
defer stream.Close()

fmt.Println("output: ", filename)
io.Copy(file, stream)

Goに付属しているパッケージを参考にして、できる限りGoらしく実装したつもりです。ですがわたしがGoを書くようになってからまだ日が浅いのでおかしな点があるかもしれません。もしなにかご指摘やご要望がございましたらIssueの作成をしていただければと存じます。

APIは基本的にTypeScriptで書かれたオリジナルのものを踏襲しています。詳しくはGoDocにあるExamplesを参照してください。