ちょっと間が空いてしまいましたが、何もしていないわけではありません。(^^;
アルゴリズムはざっとこんな感じでいいでしょう。
- DARTSLIVE のカードデータのページからスタッツを拾ってくる
- スタッツからレートを計算する
- 表示
1. ですが、セッション管理の関係で直接カードデータのページを開くことはできません。
まずトップページからカードデータのページの URL を拾ってきて、その後カードデータのページからデータを拾ってくることにします。
簡単に「拾ってくる」とか書いてますが、まったく JAVA 素人な俺には手探りなわけで(笑)。
ググった結果、「どうやら javax.swing.text.html.parser.ParserDelegator ってのを使うとできるみたい!」と考えPC上のサンプルをこさえたら動いたんですよ、一応。
ところがさらに調べると Android だと javax.swing.text.html.parser.ParserDelegator は使えないっぽいんですね。
「参照ライブラリに追加すりゃ動くんじゃないの?」と思ってやってみると、散々固まった挙句にビルドに失敗します。(^^;
「あら困った」と思いさらにググると、どうやら TagSoup ってのが使えるらしい。
これまた使い方が良くわからないわけですが、このへんとかこのへんとかを参考に適当に書いてみたら動いちゃいました。(^^;
本当はきちんとデータ構造を見て値を拾うべきなんでしょうが、面倒なので(ぉぃ)単純に「x行目は名前」「y行目はレーティング」といった感じで決め打ちで拾っています。
ま、元々のページが XHTML じゃないし綺麗な HTML でもないので許してもらいましょう。(^^;
2. のレートの計算ですが、まず01とクリケのスタッツからそれぞれのレートを計算します。
このへんを見て式を立てます。
01のレート y の計算式はこうなります(スタッツを x とします)。
y = (x - 30) / 5 (x < 95)
y = (x - 4) / 7 (x >= 95)
クリケのレート y の計算式はこうなります(スタッツを x とします)。
y = (x - 0.9) * 5 (x < 3.5)
y = (x - 0.25) * 4 (x >= 3.5)
で、これらのレートに直近30ゲーム内の割合を掛けて加算すると最新のレートの出来上がり。
...なのですが、「直近30ゲーム内の割合」なんてカードデータのページにはもちろん出ていません。
DARTSLIVE のサーバをクラックでもすれば取ってこれるかもしれませんが、俺はいい子なのでそんなことはできません(笑)。
また、計算しようにも、例えば今日のゲーム数が30を超えたりすれば計算のしようがありません。
ここはいさぎよく「今日の割合は前日までの割合と同じ」と誤魔化す割り切ることにしました。
普通にやってればそんなにバラつかないでしょ?(^^;
前日までの割合は前日のスタッツ&レートから計算できるのでそれを使います。
というところまで踏まえてとりあえずPC上で動かすサンプルをこさえました。
いちおう動いてるっぽい。
あとは Android に移植すればよいわけですが、眠いので寝ます。(^^;
PC用サンプルを上げておきます。
ソース中「ほげ」になってるところをカードのトップページ(スマートフォン用)の URL に書き換えてから実行してください。
なお、なにぶんにも素人が書いたコードですので「何これ?プ」という部分があるかと思いますが、笑ってスルーしていただければ幸いです。
直していただければもっと幸いです(笑)。
最近のコメント