人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

ruby on rails のnokogiriを使い方を教えてください。
http://sports.yahoo.co.jp/の右側にある
MLBの試合結果
「ジャイアンツ 1-6 アスレチックス」だけを
抽出してDBに保存したい
抽出したデータを自分のサイトに表示したいのですが
具体的にどうしたらいいのかわかりません。
教えてください。

●質問者: vfr6822
●カテゴリ:ウェブ制作
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● a-kuma3
●300ポイント ベストアンサー

http://sports.yahoo.co.jp/ の右側の「スコアボード」の部分は、静的な HTML ではなく javascript で生成されています。

ページをロードしたときに、スコアボードの部分のデータが、以下のリクエストで動的に取得されています。
http://sports.yahoo.co.jp/scoreboard/?callback=spnaviJsonp
そのレスポンスは JSONP 形式です。

初期表示では、左端のタブが選ばれた状態で、ひとつめの内容だけが HTML として展開され、二番目の MLB タブは、それが最初にクリックされたときに javascript で HTML が動的に生成され、それ以降のタブの切り替えでは、展開された内容の表示を on / off しています。

MLBの試合結果
「ジャイアンツ 1-6 アスレチックス」だけを
抽出してDBに保存したい
抽出したデータを自分のサイトに表示したいのですが
...

javascript で動的に生成される HTML なので、Nokogiri では切り出すことができません。
攻め方としては、ふたつあります。

(1) Ruby で HTTP なリクエストを投げ、返って来た JSONP 形式のデータをパースする

形式が JSONP なので、前後についている callback の書式を取り除いて、JSON モジュールでパースします。
http://docs.ruby-lang.org/ja/2.1.0/class/JSON.html#M_PARSE

(2) 表示するページで、javascript を使って表示する

普通に JSONP に従って、callback で処理をします。
現時点のデータをサイトに表示するのが主目的であれば、こちらの方がお手軽です。
サイトが表示されなくても、バックグラウンドでデータを溜めておきたいのだ、ということであれば、(1) の方法しかありません。


JSON[*].event が "mlb" なデータを探し(二番目固定でも、とりあえず拾える)、
JSON[*].document.Date.Scores が対戦成績の配列です。

(2) のパターン(しかも、やっつけ)ですが、jsFiddle で試してみました。
http://jsfiddle.net/a_kuma3/y7U7g/

(1) のパターンでやるにしても、JSON データの構造についての理解の助けになると思います。



あくまでも、技術的には、こうできる、という話で、Yahoo のスコアボードのデータを二次利用して良いのか、という部分については、別途確認した方が良いと思います。

関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ