読者です 読者をやめる 読者になる 読者になる

その手の平は尻もつかめるさ

ギジュツ的な事をメーンで書く予定です

NHK番組表APIを触る為のPerlクライアント作った

perl

去る2014年1月27日にNHK番組表APIが公開され,これが中々良い感じだったので,PerlからそのAPIを触れるクライアントであるWWW::NHKProgram::APIを書きました.

https://metacpan.org/release/WWW-NHKProgram-API
https://github.com/moznion/WWW-NHKProgram-API


このモジュールを使うと,NHK番組表APIが提供している

  • 地域,サービス (いわゆるチャンネル),日付の指定による該当する条件の番組リストの取得
  • 地域,番組のジャンル,日付の指定による該当する条件の番組リストの取得
  • 番組IDの指定による該当する番組情報の取得
  • 地域,サービスの指定による,現在放送中の番組情報の取得

の機能を利用することが可能となります.APIの詳細に関しては以下を参照してください.
http://api-portal.nhk.or.jp/ja
http://api-portal.nhk.or.jp/doc-request


例えば以下のように書くと2014年1月1日のNHK総合1 *1 の東京リージョンの番組表を取得出来ます.

use strict;
use warnings;
use WWW::NHKProgram::API;

my $client = WWW::NHKProgram::API->new(
    api_key => '__YOUR_API_KEY_',
);

my $program_list = $client->list({
    area    => 130,
    service => 'g1',
    date    => '2014-01-01',
});

あるいはuse utf8;していれば (2014-02-05 23:44 追記: use utf8いちいち強制するのめんどいから無くても大丈夫にしました) もう少し人間にわかりやすく書くことも可能です;

use strict;
use warnings;
use WWW::NHKProgram::API;

my $client = WWW::NHKProgram::API->new(
    api_key => '__YOUR_API_KEY_',
);

my $program_list = $client->list({
    area    => '東京',
    service => 'NHK総合1',
    date    => '2014-01-01',
});

(と書いたもののAPIの仕様上,取得可能な情報は当日の情報及び翌日の情報のみのようです.それ以外の日付を指定してリクエストを投げると400が返ってきます)


で,以下のように書くと,観たい番組の放送時間が近づくと教えてくれるtwitter botもどきが作れたりします.

use strict;
use warnings;
use utf8;
use Net::Twitter::Lite::WithAPIv1_1;
use WWW::NHKProgram::API;

my $nt = Net::Twitter::Lite::WithAPIv1_1->new(
   consumer_key        => $consumer_key,
   consumer_secret     => $consumer_secret,
   access_token        => $token,
   access_token_secret => $token_secret,
   ssl => 1,
);

my $client = WWW::NHKProgram::API->new(
    api_key => '__YOUR_NHK_PROGRAM_API_KEY__',
);

my $program_now = $client->now_on_air({
    area    => '東京',
    service => 'NHK総合1',
});

my $wanna_watch = "妄想ニホン料理";
if ($program_now->{present}->{title} =~ /$wanna_watch/) {
    $nt->update($wanna_watch . 'はじまったよ!');
}
elsif ($program_now->{following}->{title} =~ /$wanna_watch/) {
    $nt->update($wanna_watch . 'そろそろやるっぽい!');
}

これで妄想ニホン料理を見逃す心配が無くなる!!!!


NHKの番組表API本当に良くて,設計はシンプルだし必要な番組の情報もほとんど取れるし,その上テレビだけではなくラジオ番組の情報まで取れるしで非常に便利です.
番組表情報と番組情報取得のAPIの上限数が少ない (300requests/1day) かなーとか思ったけれど,1日分の番組表のデータをバカスカ取る機会は少ないだろうし,「現在放送している番組の情報」を取得するためのAPIは上限1500requests/1dayとかなり余裕があったので全然問題無い感じでした.

いやー,ぶっちゃけXMLとかじゃなくてJSONで返ってくるのが本当に嬉しい! あと取得に失敗してるのに200を返してくるとかそういう意味不明な仕様じゃないだけでもう嬉しい!!!! 最高だ!!!!!


ぜひご活用下さい.

*1:どうやらNHKの放送の名称は全角英数字が正式な様子.なのでこのモジュールでもそれに則っています