40歳からのキャリアチェンジ

20代はエンジニア・PM、30代はWeb系エンジニア向けのキャリアアドバイザー。40代の今はフリーランスで開発含めて色々やってます。技術ネタとしてはRuby/RailsとJavaScript関連あたり

NHK 番組表 API を触る為のTitaniumMobile版クライアントをちょっと作ってみた

NHK 番組表 API を触る為の Ruby クライアント作ったというエントリを見てて気になったので、Titanium Mobileで同じようなことが実現できなかなぁと思ってちょっとチャレンジしてみました。NHK番組表 APIのラッパー的なものを作りつつ、それを使ってこんな感じでサンプルアプリにしました

f:id:h5y1m141:20140209084046p:plain

ソースはひとまずGitHubに載せました

使ってる外部ライブラリ

個人的に定番ライブラリとなりつつある Underscore.jsと、Moment.jsが必要になります。

サンプルアプリ利用時の注意点

NHK 番組表 API を利用する際には、API Keyを取得する必要があります。詳しいことは本家サイトをご覧ください。

API Key取得したら、Resources/model以下にconfig.jsonというファイルを以下の様な構造で作ります

{
    "apikey":"NHK APIを利用するためのキーを入力",

}

ラッパー部分のソースコード解説

簡単にソースコードの解説をしておきます。

NHK 番組表 API との対応関係

NHK 番組表 API には

  • 地域、サービス、日付を指定することで、該当する条件の番組リストを取得することができるProgram List API

  • 地域、ジャンル、日付を指定することで、該当する条件の番組リストを取得することができるProgram Genre API

  • 番組IDを指定することで、該当する番組の詳細情報を取得することができるProgram Info API

-地域、サービスを指定することで、現在提供している番組を取得することができるNow On Air API

の4つがあります。

ラッパー的なものとして、model/nhk を作ってますが、それぞれに該当するメソッドが以下になります。

  • list()
  • genre()
  • info()
  • now()

Ruby版のクライアントの方では、エリアの指定やサービスの指定の際に、ID名での指定も出来るような実装になってるみたいですが、私の方は手抜きしてるので、エリア名(例:東京)やサービス名(例:NHK総合1)での指定しかできません。

おおまなか処理の流れ

list() を例にしておおまなか処理の流れを解説します.

それぞれのAPI にアクセスするために必要なパラメータを組み立てるのですが、引数のエリアとサービス名をそれぞれ該当するIDを検索した上で、該当IDを保持しておきます。

  • エリア名からエリアIDを検索してるのが_parseArea(area)
  • サービス名からサービスIDを検索してるのが_parseService(service)
  • 日付処理は_parseDate(date) なのですが、NHK番組表 APIは、日付指定をYYYY-MM-DD形式にしないといけないため、このあたりはmoment.jsの力を借りて楽をしてます

パラメータを組み立てたらTi.Network.HTTPClient()を使って該当のURLにアクセスします。今回ちょっと手抜きをしてるので、Responseのステータスコードチェックや、ネットワークの接続状況など細かい処理を入れてないので、アプリとしてリリースするならこの辺りは要修正ですね。

あとはこんな感じで利用できます。

NHKProgram = require("model/nhk")
config = Titanium.Filesystem.getFile(Titanium.Filesystem.resourcesDirectory, "model/config.json")
file = config.read().toString()
config = JSON.parse(file)
client = new NHKProgram(config)

client.now('東京',"NHK総合1",(result) ->
  Ti.API.info result)

ひとまずclient.now()だけしか確認してないので、明日、もう少しアップデートしたものをご紹介できればと思います