BACK
2009-02-23

百を出すのに6時間

マイブームのニコマスPリストにニコニコ大百科へのリンクを付けました。
どう見ても数十分で終わる内容なのですが、様々なハマりの末、ようやく完了。
しかも結果的には完了だけど手法的には敗北。
結局「百」を出すのに6時間もかかってしまった…死あるのみ。

最初はオーソドックスに大百科のAPIを調べて、バッチを組んだのですが、
記事の有無チェックに1秒/1タグほどかかったので、
もっと早い方法はないか…と思ってしまったのがハマりの始まり。

本家はどうやってるのかグーグル先生で調べたところ、
どうやらJavaScriptで毎回確認しているらしい。JSなので早速ファイルを取得。
中はクラス形式で書かれており、JSでは初めての体験に色々と難航したものの、
NicoPediaクラスが関連していることがわかり、
Newして結果をAlertで確認するところまではいけた…のですが。

Alertを外すとundefinedになるlol

これは忌まわしき記憶的に、同期が取れてない現象!?
早速調べてみると、やはりexecuteのところが非同期で書かれている。
それはまあいいのですが、これは終了状態はどうやって取得したらいいんだろう@@;
なんだかぱっと見みあたらない。
Javaだとリターンを明示的に取ると大体同期するのですが、その手も通用せず。

むしろ他で呼ばれているところを見ると、非同期処理の中でやりたいことをやるような感じ。
早速まねして実行してみるが、処理中から外の変数に値を格納できず苦戦。
インスタンス生成元の変数だけでなく、グローバル変数にすら格納できない。
このメソッドを拡張して引数増やせばいいのかもしれないけど、
JSでExtendってどうやればいいのだろうか。

しおしお…(気力)

もう寝てる間に終わればいいや、ということで、
最初に作ったバッチをEDENさんで動かしたところ、
1タグ1秒でトータル数時間かかるはずの処理が、5分ほどで終了する(爆
ああ、もしかして、テストしたときは、混雑してただけだったのかもしれない、ね。

…寝るか。


BACK