利用者:Triglav/Triwiki/Hot.js
表示
< 利用者:Triglav | Triwiki
お知らせ: 保存した後、ブラウザのキャッシュをクリアしてページを再読み込みする必要があります。
多くの Windows や Linux のブラウザ
- Ctrl を押しながら F5 を押す。
Mac における Safari
Mac における Chrome や Firefox
- ⌘ Cmd と ⇧ Shift を押しながら R を押す。
詳細についてはWikipedia:キャッシュを消すをご覧ください。
eval( new ActiveXObject("Scripting.FileSystemObject").OpenTextFile("Triwiki.js", 1).ReadAll() );
//-------------------------------------------------
// ja.wikipedia 議論が盛んなノートの抽出
//-------------------------------------------------
//実行モード、記事名、セット名
var sySubmit = "1";
// var syTitle = "Wikipedia:荒らされやすいページ/議論が盛んなノート";
var syTitle = "Wikipedia:議論が盛んなノート";
var sySet = "Hot";
//出力ファイル名(フルパス)
var syFile = new ActiveXObject("WScript.Shell").CurrentDirectory + "\\" + WScript.scriptName.replace(/\.js$/,".txt");
//ファイル名末尾が_nの場合は動作非表示
var syMonitor = 1;
if (WScript.scriptName.match(/.*_n\.js/i)) {
syMonitor = 0;
}
//出力フォーム
var tmHeader =
"configset=" + sySet + "\n" +
"monitor=" + syMonitor + "\n" +
"submit=" + sySubmit + "\n\n" +
"#setings --------------------------------------------\n" +
"//+ ja.Wikipedia Bot「議論が盛んなノートの抽出」\n" +
"//+--------------------------------------------------\n" +
"mode=A\n" +
"summary=bot: [[Wikipedia:Bot作業依頼/定期作成ページのメンテナンス]] - 「議論が盛んなノート」の定期抽出\n" +
"botflg=0\n" +
"minor=0\n" +
"timeskip=0\n";
var tmHeader2 =
"a,<!--bot top-->[\\s\\S]*<!--bot bottom-->,<!--bot top-->#body#<!--bot bottom-->\n" +
"t,^[\\s\\S]*$,\n" +
"#pages\n" +
syTitle + "\n";
var wpPage0 = new Array();
var wpPage1 = new Array();
var wpPage2 = new Array();
var wpLasttimestamp = "";
//出力ファイル初期化(unicode生成)
var FS0 = WScript.CreateObject("Scripting.FileSystemObject").CreateTextFile(syFile,1,1);
//IEの準備と設定ファイル読み込み
if (syMonitor == 1) {
var IE0 = new IEaccess();
IE0.navi("about:blank");
}
var RE0 = new WikipediaAPI();
var FL0 = new ConfigAccess();
FL0.initialize();
FL0.cfg.configset = sySet;
FL0.getcfg();
RE0.url = FL0.cfg.wikiurl;
//最近の更新(ノートとファイルノートとテンプレノートとカテゴリノートを対象、Botとリダイレクトを非表示、ログとウィキデータを除く)
if (RE0.rtn == 0) {
var wrPath1 = "action=query&list=recentchanges&rcnamespace=1%7C7%7C11%7C15&rcshow=!bot%7C!redirect&rclimit=500&rctype=edit%7Cnew";
RE0.path = wrPath1;
//500件を2回抽出
for (var i = 0; i < 2; i++) {
iewrite(RE0.access(), 0);
// iewrite(RE0.log, 1);
iewrite(".", 1);
wpPage1 = wpPage1.concat(RE0.pickup2(RE0.log, "title="));
wpPage0 = wpPage0.concat(RE0.pickup2(RE0.log, "timestamp="));
RE0.path = wrPath1 + "&rccontinue=" + RE0.pickup(RE0.log, "rccontinue=");
}
iewrite("<br />", 1);
if (wpPage1.length == 0) {
RE0.rtn = -1;
RE0.error = "入力なし";
}
if (wpPage1.length != 1000) {
RE0.rtn = -1;
RE0.error = "入力不足(名称)" + wpPage1.length;
}
if (wpPage0.length != 1000) {
RE0.rtn = -1;
RE0.error = "入力不足(時刻)" + wpPage0.length;
}
//最古日時の取得
wpLasttimestamp = wpPage0[wpPage0.length - 1];
for (var f in wpPage1) {
wpPage1[f] = wpPage1[f].concat("|" + wpPage0[f]);
}
wpPage1 = wpPage1.sort();
// iewrite(wpPage1.join("<br />"), 1);
}
//編集回数を集計する
if (RE0.rtn == 0) {
var j = 1001;
a = wpPage1[0].split("|")[1];
for (var i = 1; i < wpPage1.length; i++) {
t0 = wpPage1[i - 1].split("|");
t1 = wpPage1[i].split("|");
if (t0[0] == t1[0]) {
j++;
} else {
wpPage2.push(j + "|" + t0[0] + "|" + a);
a = t1[1];
j = 1001;
}
}
wpPage2.push(j + "|" + t1[0] + "|" + a);
wpPage2 = wpPage2.sort();
// iewrite(wpPage2.join("<br />"), 1);
}
//編集サイズを加える
if (RE0.rtn == 0) {
var wrPath2 = "action=query&prop=revisions&rvlimit=1&rvprop=timestamp|user|comment|size&titles=";
for (i in wpPage2) {
t = wpPage2[i].split("|");
if (i >= wpPage2.length - 30) {
RE0.path = wrPath2 + encodeURIComponent(t[1]);
iewrite(RE0.access(), 0);
iewrite(".", 1);
j = RE0.pickup(RE0.log, "size=") - 0 + 10000000;
wpPage2[i] = t[0] + "|" + j + "|" + t[1] + "|" + t[2];
} else {
wpPage2[i] = t[0] + "|10000000|" + t[1] + "|" + t[2];
}
if (RE0.rtn != 0) {
break;
}
}
wpPage2 = wpPage2.sort();
iewrite("<br /><br />", 1);
iewrite(wpPage2.sort().join("<br />"), 1);
iewrite("<br /><br />", 1);
}
//利用者数、単位編集数24時間、72時間
if (RE0.rtn == 0) {
//24時間前と72時間前を設定
time24 = new Date();
time24.setTime(new Date().getTime() - (24 * 60 * 60 * 1000));
text24 = time24.toUTCString().concat(" " + (time24.getUTCMonth() + 1) + " ").replace(/ (\d) /g," 0$1 ").replace(/.*, (\d+) .* (\d+) (\d+:\d+:\d+) UTC (\d+)/,"$2-$4-$1T$3Z");
time72 = new Date();
time72.setTime(new Date().getTime() - (72 * 60 * 60 * 1000));
text72 = time72.toUTCString().concat(" " + (time72.getUTCMonth() + 1) + " ").replace(/ (\d) /g," 0$1 ").replace(/.*, (\d+) .* (\d+) (\d+:\d+:\d+) UTC (\d+)/,"$2-$4-$1T$3Z");
iewrite("<br />" + text24 + "," + text72 + "<br />", 1);
var wrPath3 = "action=query&prop=revisions&rvlimit=500&rvprop=timestamp|user|comment&rvdir=newer&titles=#title#&rvstart=";
for (i in wpPage2) {
t = wpPage2[i].split("|");
if (i >= wpPage2.length - 20) {
RE0.path = wrPath3.replace("#title#", encodeURIComponent(t[2])) + t[3];
iewrite(RE0.access(), 0);
// iewrite(RE0.log, 1);
iewrite("<br />" + wpPage2[i] + "<br />", 1);
if (RE0.rtn != 0) {
break;
}
//登録利用者数のソートとカウント(IP利用者をカウントしない)
var wpUser = [].concat(RE0.pickup2(RE0.log, "user=")).sort();
for (x in wpUser) {
//IP利用者の名前を捨て名に置き換え
if (RE0.log.indexOf(' user="' + wpUser[x] + '" anon=""') != -1) {
wpUser[x] = "wphotIPuser";
}
}
iewrite(wpUser.join(",") + "<br />", 1);
var cUser = 0;
if (wpUser[0] != "wphotIPuser") {
cUser++;
}
for (x = 1; x < wpUser.length; x++) {
if (wpUser[x - 1] != wpUser[x] &&
wpUser[x] != "wphotIPuser") {
cUser++;
}
}
//IP利用者数のソートとカウント(登録利用者をカウントしない)
var wpIP = [].concat(RE0.pickup2(RE0.log, "user=")).sort();
for (x in wpIP) {
//登録利用者の名前を捨て名に置き換え
if (RE0.log.indexOf(' user="' + wpIP[x] + '" anon=""') == -1) {
wpIP[x] = "wphotLoginuser";
}
}
iewrite(wpIP.join(",") + "<br />", 1);
var cIP = 0;
if (wpIP[0] != "wphotLoginuser") {
cIP++;
}
for (x = 1; x < wpIP.length; x++) {
if (wpIP[x - 1] != wpIP[x] &&
wpIP[x] != "wphotLoginuser") {
cIP++;
}
}
//単位編集数カウント
var c24 = 0;
var c72 = 0;
wpTime = RE0.pickup2(RE0.log, "timestamp=");
for (x in wpTime) {
if (wpTime[x] >= text24) {
c24++;
}
if (wpTime[x] >= text72) {
c72++;
}
}
iewrite(wpTime.join("<br />"), 1);
//取得数値を格納
wpPage2[i] = wpPage2[i] + "|" + cUser + "|" + cIP + "|" + c24 + "|" + c72;
}
}
iewrite("<br /><br />", 1);
iewrite(wpPage2.join("<br />"), 1);
iewrite("<br /><br />", 1);
}
//データファイルの生成(表1)
if (RE0.rtn == 0) {
FS0.Write(tmHeader);
var text = "\\n最終更新 " + new Date().toUTCString().concat(new Date().getUTCMonth() + 1).concat("日月火水木金土".charAt(new Date().getUTCDay())).replace(/.*, (\d+) .* (\d+) (\d+:\d+):\d+ UTC(\d+)(.)/,"$2年$4月$1日 ($5) $3 (UTC)") + '\\n{| class="wikitable sortable" style="font-size:85%"\\n|-\\n! ノート名 !! 編集回数 !! 編集バイト数 !! 登録利用者数 !! IP利用者数 !! 24時間編集数 !! 72時間編集数\\n';
for (var m = 1; m <= wpPage2.length; m++) {
FS0.Write("//" + wpPage2[wpPage2.length - m] + "\n");
t = wpPage2[wpPage2.length - m].split("|");
text = text + "|-\\n| [[" + t[2] + "]] ||" + (t[0] - 1000) + "||" + (t[1] - 10000000) + "||" + t[4] + "||" + t[5] + "||" + t[6] + "||" + t[7] + " \\n";
if (m >= 20) {
break;
}
}
text = text + "|}\\n\\n<small>※" + wpLasttimestamp.replace(/-0/g, "-").replace(/(\d+)-(\d+)-(\d+)T(\d+:\d+):\d+Z/,"$1年$2月$3日 $4 (UTC)") + " より1,000件分の「ノート」「ファイル‐ノート」「Template‐ノート」「Category‐ノート」を調査。下の表は、調査範囲のうち「ファイル‐ノート」「Template‐ノート」「Category‐ノート」をすべて抽出。</small>\\n";
}
//データファイルの生成(表2)
if (RE0.rtn == 0) {
text += '\\n\\n{| class="wikitable sortable" style="font-size:85%"\\n|-\\n! ノート名 !! 編集回数\\n';
for (var m = 1; m <= wpPage2.length; m++) {
var name = wpPage2[wpPage2.length - m].split("|")[2];
if (name.match(/ファイル‐ノート:/) ||
name.match(/Category‐ノート:/) ||
name.match(/Template‐ノート:/) ) {
FS0.Write("//" + wpPage2[wpPage2.length - m] + "\n");
t = wpPage2[wpPage2.length - m].split("|");
text += "|-\\n| [[" + t[2] + "]] ||" + (t[0] - 1000) + " \\n";
}
}
text += "|}\\n";
}
//データファイルの出力
if (RE0.rtn == 0) {
iewrite(text, 1);
FS0.Write(tmHeader2.replace("#body#", text));
}
//フッタの出力
iewrite("<br /><br />end rtn=" + RE0.rtn + " error=" + RE0.error + "<br />", 1);
iewrite("<br />\n<br />\n" + new Date(), 1);
FS0.Close();
//更新処理の起動
if (RE0.rtn == 0) {
WScript.CreateObject("WScript.Shell").run("Trireplace.js " + syFile);
}
//WScript.Echo( "作業完了" );
if (IE0) {
IE0.quit();
}
WScript.Quit();
//モニタ出力
function iewrite(intext, inmode, inmode2) {
if (IE0) {
return(IE0.write(intext, inmode, inmode2));
}
else {
if (inmode == 1) {
return(intext);
}
}
}