Rubyで放送中のテレビ番組を取得してみた。
WebAPIやJSONについて勉強するために、現在放送中の番組情報を取得するためのスクリプトを作ってみた。
ソースコード
#!/usr/bin/ruby require "net/http" require 'json/pure' url = "www.tvguide.or.jp" json_data = "" # JSON取得 Net::HTTP.version_1_2 Net::HTTP.start(url, 80) { |http| responce = http.get("/TXML301PG.php?type=TVG&dummy=10®ionId=13") json_data = JSON.parse(responce.body) } # JSONパース json_data["ProgramScheduleInfomartion"]["MediaLocation"]["StationLocation"].each { |ch| channel = ch["stationDispName"].to_s start_date = ch["ProgramInformation"]["startDateTime"].to_s.split(" ")[1] end_date = ch["ProgramInformation"]["endDateTime"].to_s.split(" ")[1] title = ch["ProgramInformation"]["programTitle"].to_s print channel + "\t" + start_date + " - " + end_date + " " + title + "\n" }
簡単な解説
- JSONの取得
- URLを指定して、データを取得するためには、Rubyの標準ライブラリ「NET/HTTP」を使うらしい。
- 上記ソースコードの場合、「responce.body」で、URLへリクエストした結果(今回は、JSONデータ)を取得できる。
- JSONのパース
- Ruby1.8系には、JSONパーサがないらしいので、「json_pure」というライブラリをgems経由でインストールしてみた。
- 「JSON.parse」メソッドを使うことで、JSON形式からHashデータへ変換してくれる。後は、Hashから必要なデータを取得するだけ。
- 注意点として、RUBYLIBにjson_pureのパスをインクルードしておくこと。そうしないと動かない。
実行結果
こんな感じに出力されます。
"regionId=13"の「13」を変更すると、東京都以外のテレビ番組も見れるはず。
NHK総合 16:00 - 16:45 それいけ!民謡うた祭り NHK Eテレ 16:15 - 16:20 青山ワンセグ開発 日本テレビ 15:30 - 17:25 ボクシング世界戦 The REAL TBSテレビ 15:00 - 16:54 2011ミズノクラシック女子ゴルフ〜伊勢志摩〜 フジテレビ 16:00 - 17:25 美川はるなの明日行ける秋の修善寺・沼津 テレビ朝日 16:00 - 17:25 あなたは風邪をあまく見ていませんか?最新予防法&撃退法SP! テレビ東京 16:00 - 17:15 AKBvs元アイドル軍爆走グアム島大決戦!! TOKYO MX 16:00 - 16:30 お買い物情報
実行環境
- Ruby 1.8.7
- json_pure 1.6.1