記事が長くなったので、目次です。
やりたいこと
Slackに色々なものを通知しています。例えば、録画サーバでエンコードした番組情報とか、録画サーバのCPUやファイルシステムの利用率等を通知しています。
Chinachuで録画予約している内容を通知できたら便利かなと思い、手を動かしてみました。
この記事で書いていること
この記事ではchinachuのAPIから返却されるJSONを扱うまでを書いています。
というのも、slackに通知するまでに技術的に超える課題がありそうなので、今回はJSONを扱えるようにまでと範囲を絞って記事にしました。
参考にした記事
golangでJSONを扱えるようにするには、参考になる記事が数多くあります。その中で、以下の記事を参考にしました。
ChinachuのAPI
予約一覧は以下で取得することができます。
以下を参照すると、「/reserves」を使用すると予約している番組が返却されるとのこと。
試しにブラウザから以下のURLを指定してみます。
http://192.168.1.254:20772/api/reserves.json
そうすると、以下のようにブラウザにAPIからJSONが返却されました。
作ったプログラム
手始めに吐き出されたJSONをファイルにしてみました。そのJSONファイルから必要な情報を編集するプログラムを作りました。
encoding/json
でUnmarshalってやればJSONを扱えるのが便利でした。
苦労したところは、録画の開始時刻の表示でした。UNIXタイムを使用しているのかと思っていたのですが、なぜか桁数が多くて未来日になるのです。とりあえず、1000で割ったらなんとか表示されたのでこれでOKかなと思います。おそらく、仕様としてUNIXタイムに補足情報的なのを付与しているのかなと想像しながら、深くは調べてないです。
また、JSONの構造体については、後でカスタマイズしやすいように、表示等で使用してないデータも予め定義しています。
package main import ( "encoding/json" "fmt" "io/ioutil" "log" "time" ) type Yoyaku struct { ID string `json:"id"` Category string `json:"category"` Title string `json:"title"` FullTitle string `json:"fullTitle"` Detail string `json:"detail"` Start int64 `json:"start"` End int64 `json:"end"` Seconds int `json:"seconds"` Description string `json:"description"` Channel struct { Type string `json:"type"` Channel string `json:"channel"` Name string `json:"name"` ID string `json:"id"` Sid int `json:"sid"` Nid int `json:"nid"` HasLogoData bool `json:"hasLogoData"` N int `json:"n"` } `json:"channel"` } func main() { raw, err := ioutil.ReadFile("./sample.json") if err != nil { log.Fatal(err) } var yoyaku []Yoyaku if err := json.Unmarshal(raw, &yoyaku); err != nil { log.Fatal(err) } // 出力する fmt.Println("*** 録画サーバの予約状況 ***") for _, y := range yoyaku { fmt.Printf("%s(%d分)%s : %s\n", time.Unix((y.Start / 1000), 0).Format("01月02日15:04"), y.Seconds/60 , y.Channel.Name , y.Title) } }
出力結果
プログラムを実行すると、以下のように1週間分の予約番組が表示されます。
1週間の表示は必要なくて、当日分の予約とか、翌日までの予約が表示されればいいので、そのあたりの変更は別のタイミングでやろうと思います。
# go run json.go *** 録画サーバの予約状況 *** 02月15日21:00(50分)NHK総合1・東京 : NHKスペシャル 02月15日22:00(60分)NHKEテレ1東京 : SWITCHインタビュー 達人達(たち) 選 02月15日22:00(54分)日テレ1 : トップナイフ ー天才脳外科医の条件ー 02月15日23:00(30分)日テレ1 : マツコ会議高級ランジェリーにハマる女性たち… 02月15日23:30(30分)NHK総合1・東京 : 【よるドラ】伝説のお母さん 02月16日01:45(25分)テレビ東京1 : ゴッドタン 02月16日07:00(30分)日テレ1 : 所さんの目がテン!寒い日に恋しい入浴剤の健康効果とは 02月16日07:00(30分)フジテレビ : ボクらの時代 02月16日07:30(30分)TBS1 : がっちりマンデー!!★人手不足の今…うまく人を集めてがっちり! 02月16日08:25(27分)NHK総合1・東京 : サラメシ シーズン9 02月16日10:00(75分)フジテレビ : ワイドナショー【アカデミー賞に▽テレ朝・宝くじ企画ヤラセ疑惑】 02月16日13:05(27分)NHK総合1・東京 : サンドのお風呂いただきます 02月16日14:00(55分)フジテレビ : ザ・ノンフィクション もう一度 お父さんに逢いたい ~ホストの僕とフィリピン… 02月16日14:00(60分)TBS1 : 今夜第5話!日曜劇場第4話リピート 02月16日19:58(56分)日テレ1 : 世界の果てまでイッテQ! イモトWT南アフリカ珍獣ツアー&温泉同好会寒中水泳 02月16日21:00(54分)TBS1 : 日曜劇場「テセウスの船」第五話 02月16日21:00(50分)NHK総合1・東京 : NHKスペシャル 02月16日21:54(54分)テレビ東京1 : 有吉ぃぃeeeee!~そうだ!今からお前んチでゲームしない? 02月16日23:00(30分)TBS1 : 情熱大陸 02月16日23:25(30分)日テレ1 : ダウンタウンのガキの使いやあらへんで! 02月17日00:10(25分)NHK総合1・東京 : 映像研には手を出すな! 02月17日18:55(30分)NHKEテレ1東京 : 沼にハマってきいてみた▽生放送でスゴ技連発!KAMIWAZA&uiui先輩参戦 02月17日19:30(72分)NHK総合1・東京 : 鶴瓶の家族に乾杯▽憧れの富士絶景SP!藤井隆と山梨県山中湖村ぶっつけ本番旅! 02月17日21:00(54分)フジテレビ : 絶対零度~未然犯罪潜入捜査~ 02月17日23:00(40分)フジテレビ : 石橋貴明のたいむとんねる 02月17日23:50(30分)NHK総合1・東京 : 有吉のお金発見 突撃!カネオくん 02月18日00:15(30分)テレビ朝日 : しくじり先生 俺みたいになるな!! 02月18日00:20(50分)NHK総合1・東京 : プロフェッショナル 仕事の流儀 02月18日01:10(50分)NHK総合1・東京 : 世界はほしいモノにあふれてる 02月18日02:45(10分)NHK総合1・東京 : チコちゃんに叱られる!チコっとだけスペシャル 02月18日04:00(15分)テレビ東京1 : 家、ついて行ってイイですか?(明け方) 02月18日18:55(30分)NHKEテレ1東京 : 沼にハマってきいてみた 02月18日19:30(27分)NHK総合1・東京 : サラメシ シーズン9 02月18日20:57(63分)TBS1 : マツコの知らない世界 02月18日22:00(57分)TBS1 : 火曜ドラマ「恋はつづくよどこまでも」 02月18日22:00(30分)NHK総合1・東京 : クローズアップ現代+ 02月18日22:30(50分)NHK総合1・東京 : プロフェッショナル 仕事の流儀 02月18日23:15(60分)テレビ朝日 : ロンドンハーツ 第七世代が辛口! 02月18日23:50(45分)NHK総合1・東京 : ブラタモリ 02月19日00:35(50分)NHK総合1・東京 : NHKスペシャル 02月19日00:59(30分)日テレ1 : ラグビー応援TV ONEラグビー 02月19日01:25(50分)NHK総合1・東京 : 【ドラマ10】ハムラアキラ~世界で最も不運な探偵~ 02月19日01:26(30分)テレビ朝日 : フリースタイルダンジョン 02月19日18:55(30分)NHKEテレ1東京 : 沼にハマってきいてみた 選 02月19日21:00(60分)テレビ東京1 : 家、ついて行ってイイですか?~告白!家族の秘密SP~ 02月19日22:00(30分)NHK総合1・東京 : クローズアップ現代+ 02月19日23:50(27分)NHK総合1・東京 : 所さん!大変ですよ 02月20日00:55(50分)NHK総合1・東京 : NHKスペシャル 02月20日04:03(27分)NHK総合1・東京 : サンドのお風呂いただきます 02月20日12:20(25分)NHK総合1・東京 : サラメシ シーズン9 02月20日19:30(27分)NHK総合1・東京 : 所さん!大変ですよ 02月20日22:00(30分)NHK総合1・東京 : クローズアップ現代+ 02月20日22:00(54分)テレビ東京1 : カンブリア宮殿 02月20日22:30(50分)NHK総合1・東京 : 世界はほしいモノにあふれてる▽中欧!幻のアンティークを探す旅 チェコ&ドイツ 02月20日23:15(60分)テレビ朝日 : アメトーーク! 02月20日23:56(59分)TBS1 : ダブルベッド SEVEN DAY LOVER/吉村崇 犬飼貴丈 ケンコバ 02月21日00:55(72分)NHK総合1・東京 : 鶴瓶の家族に乾杯▽憧れの富士絶景SP!藤井隆と山梨県山中湖村ぶっつけ本番旅 02月21日01:00(30分)テレビ東京1 : 木ドラ25 ゆるキャン△ 02月21日19:30(27分)NHK総合1・東京 : 首都圏情報 ネタドリ! 02月21日19:57(45分)NHK総合1・東京 : チコちゃんに叱られる!▽仮面ライダーのバイク▽発酵食品の謎▽香川の手袋 02月21日20:00(55分)tvk1 : 探偵!ナイトスクープ▽計算ができる天才犬&オムライスマスター・ケイコ師匠出現!? 02月21日21:55(57分)フジテレビ : ダウンタウンなう 02月21日22:00(50分)NHK総合1・東京 : 【ドラマ10】ハムラアキラ~世界で最も不運な探偵~ 02月21日23:00(40分)フジテレビ : 全力!脱力タイムズ 02月22日00:00(60分)NHKEテレ1東京 : SWITCHインタビュー 達人達(たち) 02月22日00:20(30分)テレビ朝日 : タモリ倶楽部 02月22日01:10(30分)NHK総合1・東京 : 【よるドラ】伝説のお母さん 02月22日01:40(30分)NHK総合1・東京 : SONGS 02月22日02:10(30分)NHK総合1・東京 : クローズアップ現代+選 02月22日02:20(30分)テレビ朝日 : くりぃむナンチャラ 02月22日02:30(30分)テレビ東京1 : 流派-R since2001 02月22日08:15(45分)NHK総合1・東京 : チコちゃんに叱られる!▽仮面ライダーのバイク▽発酵食品の謎▽香川の手袋 02月22日09:30(135分)TBS1 : 王様のブランチ 02月22日09:30(30分)NHK総合1・東京 : 有吉のお金発見 突撃!カネオくん 02月22日10:55(27分)NHK総合1・東京 : 首都圏情報 ネタドリ! 02月22日11:59(121分)TBS1 : 王様のブランチ 02月22日15:05(50分)NHK総合1・東京 : NHKスペシャル選 ホットスポット最後の楽園 season3 02月22日18:30(30分)日テレ1 : 満天☆青空レストラン 宮川大輔が美味しい食材を求めて日本全国を飛び回る! 02月22日18:30(30分)フジテレビ : もしもツアーズ 02月22日19:30(45分)NHK総合1・東京 : ブラタモリ 02月22日19:54(60分)テレビ東京1 : 出川哲朗の充電させてもらえませんか?四国“お遍路旅”第1弾は香川県!SP完結編 02月22日20:15(30分)NHK総合1・東京 : 有吉のお金発見 突撃!カネオくん 02月22日21:00(50分)NHK総合1・東京 : NHKスペシャル ホットスポット 最後の楽園 season3 02月22日22:00(54分)日テレ1 : トップナイフ ー天才脳外科医の条件ー 02月22日22:00(60分)NHKEテレ1東京 : SWITCHインタビュー 達人達(たち) 02月22日23:00(30分)日テレ1 : マツコ会議 02月22日23:00(30分)NHK総合1・東京 : SONGS 02月22日23:30(30分)NHK総合1・東京 : 【よるドラ】伝説のお母さん
次にやりたいこと
次は直接録画サーバのAPIを叩いて、JSONファイルを取得するように機能を追加していこうと考えています。
Chinachuは認証がいらないので、Linuxコマンドのcurl
を使用すれば良さそう。勉強のためには、APIのクライアントを作った方が勉強になりそうですが、まずは予約情報の通知運用をはじめていこうかなと考えています。