「ひとかじりのりんご」

へっぽこエンジニアの備忘録。こちらは旧ブログ。新しい方はこちら→「http://sbkro.github.io」

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&regionId=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 お買い物情報

実行環境