jsoupを使用した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から
以下のような出力を得ることができる
torne録画予約状況閲覧アプリのテーブル設計
テーブルの種類
直近で作成する必要があるテーブルとしては以下が考えられる
- 番組マスタ
- 予約情報マスタ
- 番組情報取得キュー
番組マスタの内容
番組マスタには以下の情報を含める
- 番組名
- 放送局名
- 登録日時
- 更新日時
- version
プライマリキー候補は番組名と放送局名の複合キー 複数の放送局で同一の海外ドラマなどを放送するケースがあるが、複合キーを使用すれば、一意になる 再放送の場合も番組名+[再]などといった名前になるので大丈夫
予約情報マスタの内容
予約情報マスタには以下の内容を含める
- Gコード (主キー)
- 放送日時
- 放送時間(番組の尺)
- 番組名
- 放送局名
- 登録日時
- 更新日時
- version
番組情報取得キューの内容
番組情報取得キューには、Gガイドを使用している番組表サイトから情報を取得するのに必要な情報を格納する
- 番組名
- 放送局名
- 放送日時
予備案
放送局マスタも作成したほうがいいかも
torne録画予約状況閲覧アプリ
アプリで実現したいこと
アプリで実現したいことは以下
- torneを起動しなくても、録画予約の状況が分かるようにしたい
上記を実現するために必要な処理は以下
- torneで録画予約を実行したときに、なんらかの方法で予約した番組を外部のDBなどに保存する
解決手段
- torneのツイッター連携機能を利用する
torneはツイッターアカウントを登録しておくことで、録画予約実行時に任意の内容でツイートをすることができる。 (デフォルトテンプレートあり)
StreamingAPIを使用し、このアカウントの発言を追い続け、torneからのtweetだと分かるtweetを拾ったら、録画予約情報としてDBに格納するという流れ
下図のようなイメージとなる
別の問題
torneでは、録画取消をしたときにtweetをすることができないため、録画取消をDBに反映することができない。
なんらかの方法を考える必要がある。
また、繰り返し録画予約をしたときと単一の録画予約をしたときで、デフォルトのtweet内容は変わらないため、DBの状況に反映することができない。
繰り返しであることが分かるなんらかの情報をtweetに含める必要がある。