コンテンツにスキップ

利用者:Triglav/Triwiki/Hot.js

お知らせ: 保存した後、ブラウザのキャッシュをクリアしてページを再読み込みする必要があります。

多くの WindowsLinux のブラウザ

  • Ctrl を押しながら F5 を押す。

Mac における Safari

  • Shift を押しながら、更新ボタン をクリックする。

Mac における ChromeFirefox

  • 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);
		}
	}
}