사용자:Senouis/프론트엔드 스크립트: 두 판 사이의 차이

리버티게임(개발), 모두가 만들어가는 자유로운 게임
둘러보기로 이동 검색으로 이동
잔글 (이거, 평가 문단에 유저들이 쓴 의견 포맷이 제각각이라 완벽한 파싱이 불가능에 가까울지도...)
잔글편집 요약 없음
 
(같은 사용자의 중간 판 2개는 보이지 않습니다)
41번째 줄: 41번째 줄:
continue;
continue;
} else if (point <= 5) {
} else if (point <= 5) {
if (result[i][0] === "#"){
splitedline = result[i].split('#');
splitedline = result[i].split("#");
if (splitedline.length !== 2) continue; // 서명 시각의 :와 맨 처음 # 외의 다른 # 혹은 :이 들어가면 2단계 이상의 문자열로 간주
if (splitedline.length !== 2 && (result[i][1] === "#" || result[i][1]=== ":")) continue; // 2단계 이상의 문자열로 간주
else if (splitedline[1] === "" || splitedline[1] === " ") continue; // 빈 평가
else if (splitedline[1] === "" || splitedline[1] === " ") continue; // 빈 평가
elem[point.toString()] += 1;
elem[point.toString()] += 1;
} else if (result[i][0] === ":"){
splitedline = result[i].split(":");
if (splitedline.length !== 2 && (result[i][1] === "#" || result[i][1]=== ":")) continue; // 2단계 이상의 문자열로 간주
else if (splitedline[1] === "" || splitedline[1] === " ") continue; // 빈 평가
elem[point.toString()] += 1;
}
}
}
}
}

2024년 8월 18일 (일) 15:14 기준 최신판

let targetlist = [];

let ratingslist = [];

let sqlList = [];

let finalresult = "";

let dbname="";

async function extractRatings(result){
	let resultingArray = [];
	for (const value of Object.values(result.query.pages)){
		try {
			const fetchResult = await fetch('https://dev.libertygame.work/index.php?action=raw&title=토론:' + value.title);
			const fetchResult_second = await fetchResult.text();
			const fetchResult_final = await ((result)=>{
				result = result.split("\n");
				console.log(result);
				let elem = {"1":0, "2":0, "3":0, "4":0, "5":0};
				let point = 6;
				if (!result.includes("== 이 게임 평가하기 ==") && !result.includes("== 평가 ==")&& !result.includes("== 게임 평가하기 ==")){
					console.log("토론 문서에 평가가 없는 게임이 존재합니다.");
					return;
				}
				for (let i = 0 ; i < result.length; i++){
					console.log(result[i]);
					if (result[i] === "=== 죽여준다 (Awesome!) ==="){
						point=5;
					} else if (result[i] === "=== 기대이상 (Cool~) ==="){
						point=4;
					} else if (result[i] === "=== 보통 (Normal) ==="){
						point=3;
					} else if (result[i] === "=== 후지다 (Bad) ===" || result[i] === "=== 후지다 (Bad. ㄱ-) ==="){
						point=2;
					} else if (result[i] === "=== 국회의원 같다 (Disgusting) ===" || result[i] === "=== 국회의원 같다 (disgusting. ㅡ_ㅡ) ==="){
						point=1;
					} else if (result[i][1] === "=" && result[i][2] !== "=" && point === 1){
						break; // 평가 문단을 벗어남
					} else if (result[i] === "") { // 빈 줄
						continue;
					} else if (point <= 5) {
						splitedline = result[i].split('#');
						if (splitedline.length !== 2) continue; // 서명 시각의 :와 맨 처음 # 외의 다른 # 혹은 :이 들어가면 2단계 이상의 문자열로 간주
						else if (splitedline[1] === "" || splitedline[1] === " ") continue; // 빈 평가
						elem[point.toString()] += 1;
					}
				}
				ratingslist.push([value, elem]);
			})(fetchResult_second);
		} catch (e) {
			console.log(value.title + " 게임의 토론 페이지를 가져오는 데 실패했습니다!");
			continue;
		}
	}
	for (let e of ratingslist){
		if (e[0].ns === 0) {
			for (let point of Object.keys(e[1])) {
				for (let c = 0 ; c < e[1][point]; c++){
					const query = `INSERT INTO ${dbname}.Vote(vote_actor, vote_page_id, vote_value) VALUES (0, ${e[0].talkid}, ${point});`;
					sqlList.push(query);
				}
			}
		}
	}
	finalResult = sqlList.join("\n");
}

function crawlingSectionRatings() {
	let api = new mw.Api();
	api.get({
		action: "query",
		generator: "categorymembers",
		gcmtitle: "분류:리버티게임",
		gcmtype: "page",
		gcmnamespace: 0,
		gcmlimit: 500,
		prop: "info",
		inprop: "talkid"
	}).then((result) => {
		console.log(extractRatings(result));
	});
}