- ベストアンサー
プッシュ型情報サービスのデータを取り出すには?
相撲協会の取り組み結果のようなプッシュ型情報サービスのデータを javaで取り出すようにするにはどのようにすればよいのでしょうか? 相撲協会 http://sumo.goo.ne.jp/hon_basho/index.html JavaのSOCKET機能を使って、Webサーバのソースをこちらからの要求で 取得することは以下のリンクのコードを使って出来ました。 http://ash.jp/java/java_http.htm
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
#1です。 見てみましたが、プッシュ型というよりは、擬似プッシュ型みたいですね。 ブラウザを3分おきに自動的にリロードさせて、あたかもリアルタイム通信をしているかのように見せかけているだけなので、技術的にはプル型に近いと思います。 で、結局こっちも同じことをするしかないと思います。 Timerで3分おきにイベントを発生させるなり、Thread.sleep()メソッドを使うなりして、3分おきにページを取得して、一から解析をしなおすということを繰り返す。 それで、ユーザーにデータがリアルタイムに更新されているかのように見せるしかないですね。
その他の回答 (2)
- omni2
- ベストアンサー率53% (33/62)
こんにちわ。 >そのデータを、更新されるタイミングで取り込むプログラムを作りたいのですが、どのようにすればよいのか分かりませんでした。 更新されるタイミングで、というのは無理なような・・気がします。 やはり、そのサイトに一定時間間隔をおいて、データが更新されているかをチェックしにいく、というやり方が一般的なのではないでしょうか?? ぱっと思いつくのはタイマーをつかうやり方ですが、 詳しくありませんので、参考ページを貼り付けておきます。 http://www5b.biglobe.ne.jp/~psoft/lesson/timer.html それと、理解されているとはおもいますが、 他人様のサーバ?ですので、数秒間隔でサーバをたたくと、立派な攻撃になりますので、少なくても数分(お相撲の、1つの取り組みには5分ぐらいかかるとおもいますので、それぐらいのタイミングで)の間をあけて、データの更新をチェックするプログラムを組むようにしたほうがいいとおもいます。
補足
ご回答ありがとうございます。 <他人様のサーバ?ですので、数秒間隔でサーバをたたくと、立派な攻撃になりますので そうなんです。これを避けたいがためにポートに入ってくるデータを直接取り込めないものか、何か良い方法がないかと質問しました。
- PecoPlus
- ベストアンサー率76% (144/188)
こんばんは。 たとえば、そのページの「本日の取り組み結果」のページの解析ってことでいいでしょうか? 結局、正規表現などを使って、地道に解析するコードを書くしかないんじゃないでしょうか? 「本日の取り組み結果」のページでは、データは<!-- BASYO CONTENTS --><!-- /BASYO CONTENTS -->タグの中に書かれているので、この間の文字列を取得する。 一つ目の<table>タグを無視して、二つ目のテーブルタグ内の文字列を取得する。 その中の一つ目の<tr>タグを無視してから、 次の<tr>タグが行司と呼び出し、次が、結果情報。 さらに結果情報内を解析。 とか、やるしかないように思います。 フォーマットが変わると、また、やり直しになりますが、仕方ないように思います。 XMLとかで、データをくれればいいんでしょうが、まあ、しょうがないでしょうねぇ。
補足
前回に続いてのご回答ありがとうございます。 「本日の取り組み結果」のページでは、場所中の取り組み時間中に数分の間隔で次々と勝敗の結果が更新されるようになってます。所謂プッシュ型で、こちらで更新の手間を掛けずとも自動的に画面が更新されます。 そのデータを、更新されるタイミングで取り込むプログラムを作りたいのですが、どのようにすればよいのか分かりませんでした。 何かヒントになるようなコードがあれば助かります。
補足
擬似プッシュ型でしたか。気が付きませんでした。 サーバー攻撃にならないよう、ポートをリスニングして、データを直接取ることが可能ならと思っていたのですが、どうやら難しいようですね。