利用者:Triglav/Triwiki/Teian.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 syUrl = "https://ja-two.iwiki.icu/w/api.php";
var syTitle = "";
var sySet = "Teian";
//テンプレート名、1:実体or0:転送テンプレート、除去可能月数
var tbKey = new Array("加筆,1,3", "加筆依頼,0,3", "Expand,0,3", "修正,1,3", "修正2,1,3", "統合提案,1,6", "統合,0,6", "Merge,0,6", "Mergefrom,1,6", "統合先,0,6", "Mergeto,1,6", "統合元,0,6", "分割提案,1,6", "分割,0,6", "一部転記,1,6", "改名提案,1,6", "改名,0,6");
//検索文を生成
var rgexpText = "\\{\\{([ \\t]*Template[ \\t]*:[ \\t]*)?[ \\t]*(";
for (var x in tbKey) {
rgexpText += tbKey[x].split(",")[0] + "|";
}
rgexpText = rgexpText.replace(/\|$/, "") + ")[ \\t]*(\\}\\}|\\|[\\s\\S]*?\\}\\})[ \\t]*\\n*";
var rgexp = new RegExp(rgexpText, "i");
//ログファイル、出力ファイル名(フルパス)
var syLog = new ActiveXObject("WScript.Shell").CurrentDirectory + "\\" + WScript.scriptName.replace(/\.js$/,"_log.htm");
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" +
"//+--------------------------------------------------\n" +
"//+ ja.Wikipedia Bot「提案系タグ除去」\n" +
"//+--------------------------------------------------\n";
var tmSetings =
"#setings --------------------------------------------\n" +
"mode=A\n" +
"summary=bot: 「依頼・提案テンプレート」期限切れ除去。[[Wikipedia:依頼と提案]]\n" +
"minor=1\n";
//タグ除去の対象となる記事名とタグ内容
var tbPage = new Array();
var tbText = new Array();
//本日の通算月数
var syDate = new Date();
//var syDate = "2014/06/01";
var teMonths = new Date(syDate).getYear() * 12 + new Date(syDate).getMonth();
//WScript.Echo("設定年月:" + syDate + " 通算月数:" + teMonths);
//ログファイル初期化unicode指定
var FS0 = WScript.CreateObject("Scripting.FileSystemObject").CreateTextFile(syLog,1,1);
FS0.Write("<html><br />\n提案系テンプレートメンテナンス " + new Date() + "<br />\n対象テンプレートデータ抽出<br />\n" + "<br />\n<br />\n");
//IEの準備
if (syMonitor == 1) {
var IE0 = new IEaccess();
IE0.navi("about:blank");
}
var RE0 = new WikipediaAPI();
RE0.url = syUrl;
if (RE0.rtn == 0) {
//調査対象テンプレートのループ
var tbTitle = new Array();
var tbNamespace = new Array();
var m = 0;
var teText = "";
var n = 0;
for (var i in tbKey) {
//転送テンプレートは処理しない
if (tbKey[i].split(",")[1] != 1) {
continue;
}
//テンプレート呼び出し元を取得
RE0.path ="action=query&list=embeddedin&eilimit=500&eititle=Template:" + RE0.encode(tbKey[i].split(",")[0]);
FS0.Write(iewrite("■" + tbKey[i].split(",")[0] + "<br />\n", 1));
iewrite(RE0.access(), 1);
//呼出し元ごとのループ
j = 0;
tbTitle = RE0.pickup2(RE0.log, "title=").slice(0);
tbNamespace = RE0.pickup2(RE0.log, "ns=").slice(0);
for (var j in tbTitle) {
FS0.Write(iewrite("□" + tbTitle[j] + "<br />\n", 1));
//ページテキストの取得
RE0.title = tbTitle[j];
iewrite(RE0.read(), 0);
//使用テンプレートを検出
m = 0;
while (rgexp.test(RE0.text.substr(m))) {
teText = RegExp.lastMatch;
FS0.Write(iewrite(teText + "' " + m + " ", 1));
m += RegExp.lastIndex;
//除去判定
var teResult = data_chk(tbKey[i].split(",")[0], tbTitle[j], tbNamespace[j], teText);
switch (teResult) {
case "":
break;
case "対象":
teText = teText.replace(/,/g,"\\,");
teText = teText.replace(/\n/g,"\\n");
//対象を格納
n = 0;
while (n in tbPage) {
if (tbPage[n] == RE0.title) {
break;
}
n++;
}
teResult = "<font color=green>対象項目</font>";
if (n > tbPage.length - 1) {
tbPage[n] = RE0.title;
tbText[n] = "";
}
else {
teResult += "[d]"
}
tbText[n] += "a;" + teText + ",\n";
break;
case "調査外":
teResult = "<font color=orange>調査外</font>";
break;
default:
teResult = "<font color=red>エラー:" + teResult + "</font>";
break;
}
//リスト開始の出力
FS0.Write(iewrite(teResult + "<br />\n", 1));
}
}
FS0.Write(iewrite("<br />\n", 1));
}
}
//replaceファイルのまとめ出力unicode指定
var FS1 = WScript.CreateObject("Scripting.FileSystemObject").CreateTextFile(syFile,1,1);
FS1.Write(tmHeader);
i = 0;
while (i in tbPage) {
FS1.Write(tmSetings + tbText[i] + "#pages\n" + tbPage[i] + "\n\n");
i++;
}
//フッタの出力とクローズ
FS0.Write(iewrite("<br />\n<br />\n" + new Date(), 1));
FS0.Write(" end<br />\n</html>\n");
FS0.Close();
FS1.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);
}
}
}
//除去対象判定
function data_chk(intemp, inname, innamespace, intext) {
//判定テキスト(""対象外、"対象"、"調査外"、以外:エラー)
var outtext = "";
//調査外名前空間を除外(除外対象 Wikipedia:,Wikipedia‐ノート:,Portal:,Portal‐ノート:,利用者:,利用者‐会話:,Template:,Template‐ノート:,MediaWiki:,MediaWiki‐ノート:,ノート:)
if (":4:5:100:101:2:3:10:11:8:9:1:".indexOf(":" + innamespace + ":") != -1) {
outtext = "調査外";
return(outtext);
}
//テンプレート種別判定
for (var y in tbKey) {
//検索文を生成
var rgexp2 = new RegExp("\\{\\{([ \\t]*Template[ \\t]*:[ \\t]*)?[ \\t]*" + tbKey[y].split(",")[0] + "[ \\t]*(\\}\\}|\\|[\\s\\S]*?\\}\\})", "i");
if (rgexp2.test(intext)) {
// iewrite(tbKey[y].split(",")[0] + " ", 1);
break;
}
}
if (y >= tbKey.length) {
outtext = "検査テンプレート外";
return(outtext);
}
//date引数存在判定
if (!intext.match(/\|[ \t]*date[ \t]*=[ \t]*(\d\d\d\d).(\d+)/i)) {
outtext = "date設定";
return(outtext);
}
//貼付月数算出と未来月判定
var months = (RegExp.$1 - 0) * 12 + (RegExp.$2 - 0) - 1;
// iewrite(months + "=" + teMonths + " ", 1);
if (months > teMonths) {
outtext = "未来月";
return(outtext);
}
//経過月数判定
if (months + (tbKey[y].split(",")[2] - 0) < teMonths) {
outtext = "対象";
}
return(outtext);
}