番組情報を表示するWebアプリの作成

SAStrutsを使用した番組情報表示用Webアプリ


Yahoo番組表からスクレイピングしてきた情報を表示するWebアプリを作成した。

アプリのスクショ

上の画像はアプリにアクセスした現在日時から7日分の番組情報を表示しているところ。 現在はダミー表示だが、本来はトルネで録画予約した番組についてYahoo番組表からスクレイピングを行った結果を表示する。

SAStrutsの学習目的で作成したが、Webアプリ側にはもっぱら参照系の機能しかない。。。

jsoupを使用したYahoo番組表のスクレイピング

Yahoo番組表からの番組情報のスクレイピング

Yahoo番組表から以下の画像の赤い枠で囲んでいる部分を番組情報としてスクレイピングしたい。

Yahoo番組表のスクショ

jsoupを使用する

スクレイピングにはjsoupを使用する。 以下のようにCSSセレクタでDOM要素を指定して取得することができるので、jQueryと同じような感覚で使用することができる。

Document doc = Jsoup.connect("スクレイピングしたいページのURL").get();
Elements elements = doc.select("ul.programlist > li");

スクレイピング結果

スクレイピングしてきた情報は以下のようにデータベースに保存する。

テーブル状況のスクショ

TorneTwitterReceiverについて

TorneTwitterReceiverとは?

torne経由でのtweetをStreamingAPIでキャッチした後、所定の処理を実行させるプログラム

TorneTwitterReceiverの処理内容

TorneTwitterReceiverでは以下の処理を実行する

  • 番組名を番組マスタに登録する
  • 番組名、放送日時、放送局名を番組情報取得キューに入れる

実際にTorneからのtweetをキャッチする方法

StreamingAPIのfilterでtorneにセットしてあるアカウントのユーザIDのtweetを引っ掛け、torneのハッシュタグと「を録画予約しました。」というキーワードを含んでいるかチェックする。

現状の実装進捗

Torneからのtweetをキャッチした後、番組名、放送局名、放送日時を取得するところまではできた。

以下のようなtweetから

f:id:stk132:20130701025951p:plain

以下のような出力を得ることができる

f:id:stk132:20130701025952p:plain

torne録画予約状況閲覧アプリのテーブル設計

テーブルの種類

直近で作成する必要があるテーブルとしては以下が考えられる

  • 番組マスタ
  • 予約情報マスタ
  • 番組情報取得キュー

番組マスタの内容

番組マスタには以下の情報を含める

  • 番組名
  • 放送局名
  • 登録日時
  • 更新日時
  • version

プライマリキー候補は番組名と放送局名の複合キー 複数の放送局で同一の海外ドラマなどを放送するケースがあるが、複合キーを使用すれば、一意になる 再放送の場合も番組名+[再]などといった名前になるので大丈夫

予約情報マスタの内容

予約情報マスタには以下の内容を含める

  • Gコード (主キー)
  • 放送日時
  • 放送時間(番組の尺)
  • 番組名
  • 放送局名
  • 登録日時
  • 更新日時
  • version

番組情報取得キューの内容

番組情報取得キューには、Gガイドを使用している番組表サイトから情報を取得するのに必要な情報を格納する

  • 番組名
  • 放送局名
  • 放送日時

予備案

放送局マスタも作成したほうがいいかも

torne録画予約状況閲覧アプリ

アプリで実現したいこと

アプリで実現したいことは以下

  • torneを起動しなくても、録画予約の状況が分かるようにしたい

上記を実現するために必要な処理は以下

  • torneで録画予約を実行したときに、なんらかの方法で予約した番組を外部のDBなどに保存する

解決手段

  • torneのツイッター連携機能を利用する

torneはツイッターアカウントを登録しておくことで、録画予約実行時に任意の内容でツイートをすることができる。 (デフォルトテンプレートあり)

StreamingAPIを使用し、このアカウントの発言を追い続け、torneからのtweetだと分かるtweetを拾ったら、録画予約情報としてDBに格納するという流れ

下図のようなイメージとなる

f:id:stk132:20130701022102p:plain

別の問題

torneでは、録画取消をしたときにtweetをすることができないため、録画取消をDBに反映することができない。

なんらかの方法を考える必要がある。

また、繰り返し録画予約をしたときと単一の録画予約をしたときで、デフォルトのtweet内容は変わらないため、DBの状況に反映することができない。

繰り返しであることが分かるなんらかの情報をtweetに含める必要がある。