importScriptURI("http://prototype.wikimedia.org/mwe-gadget/mwEmbed/mwEmbed.js?uselang=" + wgUserLanguage);
jQuery(document).ready(function($){mw.ready(function()
{
var day = 28;
// sdログ
var sds =
{
"全般1" : new Array(),
"全般2" : new Array(),
"全般3" : new Array(),
"全般4" : new Array(),
"全般5" : new Array(),
"全般6" : new Array(),
"全般8" : new Array(),
"記事1" : new Array(),
"記事2" : new Array(),
"リダイレクト1-1" : new Array(),
"リダイレクト1-2" : new Array(),
"リダイレクト2-1" : new Array(),
"リダイレクト2-2" : new Array(),
"リダイレクト2-3" : new Array(),
"リダイレクト2-4" : new Array(),
"リダイレクト2-5" : new Array(),
"リダイレクト2-6" : new Array(),
"リダイレクト3-1" : new Array(),
"リダイレクト3-2" : new Array(),
"リダイレクト4" : new Array(),
"リダイレクト5" : new Array(),
"ファイル1-2" : new Array(),
"ファイル1-3" : new Array(),
"ファイル1-4" : new Array(),
"ファイル1-5" : new Array(),
"ファイル3" : new Array(),
"ファイル5" : new Array(),
"ファイル6" : new Array(),
"ファイル7" : new Array(),
"ファイル8" : new Array(),
"カテゴリ1" : new Array(),
"カテゴリ2" : new Array(),
"カテゴリ3" : new Array(),
"カテゴリ4" : new Array(),
"カテゴリ6" : new Array(),
"利用者ページ1" : new Array(),
"利用者ページ2" : new Array(),
"利用者ページ3" : new Array()
};
$.each(sds, function()
{
this.lenarray = new Array();
});
// 現在時刻のタイムスタンプを取得
var nowTimestamp = function()
{
var now = new Date();
var year = now.getUTCFullYear();
var month = now.getUTCMonth() + 1;
var date = now.getUTCDate();
var hours = now.getUTCHours();
var mins = now.getUTCMinutes();
var secs = now.getUTCSeconds();
return year + ((month < 10) ? "-0" : "-") + month + ((date < 10) ? "-0" : "-") + date
+ ((hours < 10) ? "T0" : "T") + hours + ((mins < 10) ? ":0" : ":") + mins + ((secs < 10) ? ":0" : ":") +secs + "Z";
}();
var now = Date.parse(nowTimestamp);
var days = day * 24 * 60 * 60 * 1000;
var limit = 100;
// 100件取得するメソッド
var get100 = function(lestart, callback)
{
// 100件ずつ削除記録を取得
mw.getJSON({
action: "query",
list: "logevents",
letype: "delete",
leprop: "title|comment|timestamp",
lelimit: limit,
lestart: lestart}, function(result)
{
// 各ログについて
$.each(result.query.logevents, function()
{
// コメントがあれば
if(this.comment)
{
// SD理由を取り出し
var sd = this.comment.match(/\[\[WP:CSD#(全般|記事|リダイレクト|ファイル|カテゴリ|利用者ページ)[0-9-]+\]\]/);
// SDなら
if(sd)
{
// SD基準番号を取り出し
var csd = sd[0].substr(9, sd[0].length - 11);
// 送信引数を生成
var data = {
title: this.title,
ns: this.ns,
timestamp: this.timestamp,
length: 0
}
if(Date.parse(this.timestamp) > now - days)
{
// 項目を追加
sds[csd].push(data);
}
}
}
});
// 続きのタイムスタンプを取得
lestart = result["query-continue"].logevents.lestart;
// 経過を表示
mw.log(lestart);
// 取得期間内なら
if(Date.parse(lestart) > now - days)
{
// さらに100取得
get100(lestart, callback);
}
// 終了したら
else
{
// コールバックを呼び出し
callback();
}
});
}
// 全削除記録
get100(nowTimestamp, function()
{
var allitem = new Array();
for(var csd in sds)
{
$.each(sds[csd], function()
{
allitem.push(this);
});
}
var maxLength = 0;
var getdelrev = function(i, callback)
{
// 削除記録を参照して
mw.getJSON({
action: "query",
list: "deletedrevs",
titles: allitem[i].title,
drdir: "newer",
drlimit: 100,
drprop: "len"
}, function(result)
{
mw.log(i + "/" + allitem.length);
allitem[i].length = result.query.deletedrevs[0].revisions[0].len - 0;
maxLength = (allitem[i].length > maxLength) ? allitem[i].length : maxLength;
if(i < allitem.length - 1)
{
getdelrev(i+1, callback);
}
else
{
callback();
}
});
}
getdelrev(0, function()
{
// 表を作成
var csdns = "== 最近" + day + "日間に対する解析 ==\n"
+ "{| class=\"wikitable sortable\" style=\"font-size: 75%\"\n"
+ "|+ 初版のサイズ\n"
+ "! 基準番号"
+ "!! {{ns2|0}} !! {{ns2|1}}"
+ "!! {{ns2|2}} !! {{ns2|3}}"
+ "!! {{ns2|4}} !! {{ns2|5}}"
+ "!! {{ns2|6}} !! {{ns2|7}}"
+ "!! {{ns2|8}} !! {{ns2|9}}"
+ "!! {{ns2|10}} !! {{ns2|11}}"
+ "!! {{ns2|12}} !! {{ns2|13}}"
+ "!! {{ns2|14}} !! {{ns2|15}}"
+ "!! {{ns2|100}} !! {{ns2|101}}"
+ "!! {{ns2|102}} !! {{ns2|103}}"
+ "!! 合計\n"
+ "|-\n"
// 名前空間ごとの合計
var allPerNamespace =
{
0 : 0,
1 : 0,
2 : 0,
3 : 0,
4 : 0,
5 : 0,
6 : 0,
7 : 0,
8 : 0,
9 : 0,
10 : 0,
11 : 0,
12 : 0,
13 : 0,
14 : 0,
15 : 0,
100 : 0,
101 : 0,
102 : 0,
103 : 0
};
// すべての基準について
for(var csd in sds)
{
//
csdns += "![[WP:CSD#" + csd + "|" + csd + "]]\n|";
var perNamespace =
{
0 : [],
1 : [],
2 : [],
3 : [],
4 : [],
5 : [],
6 : [],
7 : [],
8 : [],
9 : [],
10 : [],
11 : [],
12 : [],
13 : [],
14 : [],
15 : [],
100 : [],
101 : [],
102 : [],
103 : []
};
$.each(sds[csd], function()
{
perNamespace[this.ns].push(this.length);
});
$.each(perNamespace, function(num)
{
csdns += ((this.length == 0) ? "" : this.sort(function(a, b){return a-b}).join("<br />")) + "||";
allPerNamespace[num] += this.length;
});
csdns += sds[csd].length;
csdns += "\n|-\n";
}
csdns += "!合計\n|"
$.each(allPerNamespace, function()
{
csdns += ((this == 0) ? "{{color|gray|" + this + "}}" : this) + "||";
});
csdns += allitem.length + "\n|}";
mw.log("editing...");
var targetPage = "利用者:青子守歌/即時削除に対する統計的解析"
if("利用者:" + wgTitle == targetPage)
{
mw.getToken(targetPage, function(token)
{
if(token)
{
mw.getJSON({
action: "edit",
title: targetPage,
section: 1,
summary: "スクリプトによる更新(最近" + day + "日間に対する解析)",
text: csdns,
token: token}, function(result)
{
mw.log(result);
});
}
});
}
/*mw.parseWikiText(csdns, "", function(result)
{
var $h2 = $("h2");
$h2.next().remove(":not(#mw-normal-catlinks)");
$h2.replaceWith(result);
mw.log("end!");
});*/
});
});
});});