2015-01-24 22:00 追記
利用させてもらっていた API が廃止されたようで、nowtv は現在データを取得できず使用することができません。 とりあえず gem の公開と Github でのソースの公開、そして本記事の公開は続けておきますが、コマンド自体は何もできないことをご留意ください。
以下は nowtv 公開時点での記事です。
現在放送中の番組を確認できるコマンドラインツール nowtv を作った。ご利用ください。
背景
今テレビで何放送しているかな、というのを確認するのに一々ブラウザ立ちあげて番組表サイトにアクセスするのが面倒だった。コンソール上でサクッと確認したかったので作ってみた。
インストール
RubyGems で配布しているので gem install nowtv
使い方
nowtv
を呼ぶと、現在放送しているテレビ番組一覧を表示する。デフォルトでは東京都の番組表。
$ nowtv
NHK総合: 仕事ハッケン伝 [16:05 -> 16:55]
NHK Eテレ: 第68回国民体育大会~スポーツ祭東京2013~ [16:00 -> 17:00]
日本テレビ: 特選ぶらり途中下車の旅 [15:55 -> 16:53]
テレビ朝日: 相棒セレクション [15:57 -> 16:53]
TBSテレビ: Nスタ [15:50 -> 19:00]
テレビ東京: L4YOU! [16:00 -> 16:52]
フジテレビ: 踊る大捜査線 [15:50 -> 16:50]
TOKYO MX: スマイルプリキュア! [16:30 -> 17:00]
放送大学テレビ: 高齢者の生活保障第1回 [16:00 -> 16:45]
東京都以外の都道府県に住んでるなら、~/.nowtv
に地域コードか都道府県名を書いておくことで nowtv
で表示する都道府県を設定できる。地域コードはこれ参照してください。
nowtv osaka
とか nowtv 愛知
とかすると、その都道府県で今何を放送しているか確認できる。出先で便利。
$ nowtv osaka
NHK総合: 仕事ハッケン伝 [16:05 -> 16:55]
NHK Eテレ: 第68回国民体育大会~スポーツ祭東京2013~ [16:00 -> 17:00]
MBSテレビ: ちちんぷいぷい [14:55 -> 17:50]
ABCテレビ: 相棒season7 [15:55 -> 16:50]
関西テレビ: CHANGE [15:53 -> 16:48]
読売テレビ: かんさい情報ネットten. 1部 [15:50 -> 17:53]
テレビ大阪: L4YOU! [16:00 -> 16:52]
$ nowtv 愛知
NHK総合: 仕事ハッケン伝 [16:05 -> 16:55]
NHK Eテレ: 第68回国民体育大会~スポーツ祭東京2013~ [16:00 -> 17:00]
東海テレビ: リーガル・ハイ [15:54 -> 16:49]
中京テレビ: キャッチ! [15:50 -> 17:53]
CBCテレビ: 水戸黄門 [15:56 -> 16:50]
メ~テレ: 科捜研の女12 [15:49 -> 16:49]
テレビ愛知: L4YOU! [16:00 -> 16:52]
注意すべきなのは、現在放送中の番組しか表示できないことである。過去や未来の番組表は表示できない点ご了承ください。
内部実装
番組一覧を取得できる JSONP API を見つけたので、それの結果をパースして色々している。
テレビ番組表を取得できる API、意外とどこも提供してないらしくググっても見つからなかった。どっかの番組表サイトをスクレイピングするのも考えたけど、番組表の HTML 構造ってけっこう複雑で、情報抽出が面倒そうだった。
そんな中、唯一現在放送中の番組を表示できたのが Goo 番組表 で、さらにこの番組表は JavaScript で動的に生成されていた。なので Chrome の inspector でゴニョゴニョすると Ajax で呼んでる JSONP API を見つけることができた。ググッても出てこないあたり外部非公開っぽい。region_code
さえ指定すればちゃんと結果返してくれるっぽかったので、今回これを利用させていただくことにした。
地域コードは完全なローマ字表記じゃない(北海道: hokk、滋賀: siga、沖縄: nawa)ので、都道府県名の漢字入力でも呼べるようにした。あとは、JSON API で取得できる番組名が全角英数全角スペースだったのでそのへん半角に直してる。
テスト書くのに webmock 使ったけど、これみたいに外部 API 呼ぶツール書くのには非常に便利で良かったです。
API の説明書いてて
確認したら、普通の番組表も似たような JSONP API で取れるっぽかった…うーん
ソースコード
(This post was imported from https://dtan4.hatenablog.com/entry/2013/10/02/195528)