AtCoder関連サービス Advent Calendar 2018 24日目です。
Introduction
開始時間だけをキーとすると、開始時間が同じ複数コンテストがばらばらになってしまうし、問題順もうまくソートされない。[startEpochTime, contest.title, problem.title]
をキーとして比較するしかないように思える。
Pull Request
UserScript
以下より試せます。UserScriptだけだとどうしても/atcoder/dist/bundle.jsを読みに行ってしまうようなのですが、documentElementをいじるようにすればうまくいくっぽい。
// ==UserScript==
// @name AtCoder Problems Sorter
// @namespace com.cielavenir
// @description AtCoder Problems Sorter
// @include https://kenkoooo.com/atcoder/*
// @run-at document-start
// @version 0.0.0.1
// ==/UserScript==
(function(){
var src='https://gistcdn.githack.com/cielavenir/8923c3437dd694f882bbe9fe2f9ec3b8/raw/067dbe108490897cd70c8cf6d543913ffb0a1968/bundle.js';
var scr=document.createElement('script');
scr.src=src;
document.documentElement.appendChild(scr);
//document.addEventListener('DOMContentLoaded',function(){
// var scrs=document.getElementsByTagName('script');
// for(var i=0;i<scrs.length;i++)if(scrs[i].src.indexOf('bundle')>=0)scrs[i].src=src;
//});
})();
開発中は、srcにlighttpdなlocalhostを指定してました。bundle.jsはreadmeに書いてあった方法で生成しました。
参考:arc096周辺を表示した図
左:Firefox(UserScript未適用) 右:Google Chrome(UserScript適用済)
左ではコンテストの開始時間が同一のARC/ABCエントリが混ざってしまっていることがわかります。
余談
私、度重なる改善要求のためか、氏からブロックされているのですが、その改善要求の主なものは、今回解決したソートの問題、およびまれにAtCoderの提出を取りこぼすことがあるのの2点です。後者、気にする人は少ないかもしれませんが、ゴルファーである私には死活問題なのですよ…スクレイピングの話だからクライアントサイドで直せませんしね…
190107追記
とりあえずEducational DP ContestのAC者数が全く異なっていて、よくよく見てみたらFA者も一部間違っているということはわかった(本来の一覧)。
取得が重たいからということはわかるんですが、なんとかなるまではブロックを解除してもらいたい気持ちも起こらないですね…