http://sports.yahoo.co.jp/の右側にある
MLBの試合結果
「ジャイアンツ 1-6 アスレチックス」だけを
抽出してDBに保存したい
抽出したデータを自分のサイトに表示したいのですが
具体的にどうしたらいいのかわかりません。
教えてください。
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 では切り出すことができません。
攻め方としては、ふたつあります。
形式が JSONP なので、前後についている callback の書式を取り除いて、JSON モジュールでパースします。
http://docs.ruby-lang.org/ja/2.1.0/class/JSON.html#M_PARSE
普通に JSONP に従って、callback で処理をします。
現時点のデータをサイトに表示するのが主目的であれば、こちらの方がお手軽です。
サイトが表示されなくても、バックグラウンドでデータを溜めておきたいのだ、ということであれば、(1) の方法しかありません。
JSON[*].event が "mlb" なデータを探し(二番目固定でも、とりあえず拾える)、
JSON[*].document.Date.Scores が対戦成績の配列です。
(2) のパターン(しかも、やっつけ)ですが、jsFiddle で試してみました。
http://jsfiddle.net/a_kuma3/y7U7g/
(1) のパターンでやるにしても、JSON データの構造についての理解の助けになると思います。
あくまでも、技術的には、こうできる、という話で、Yahoo のスコアボードのデータを二次利用して良いのか、という部分については、別途確認した方が良いと思います。
コメント(0件)