사용자:Senouis/프론트엔드 스크립트: 두 판 사이의 차이
둘러보기로 이동
검색으로 이동
잔글편집 요약 없음 |
잔글편집 요약 없음 |
||
(같은 사용자의 중간 판 13개는 보이지 않습니다) | |||
4번째 줄: | 4번째 줄: | ||
let sqlList = []; | let sqlList = []; | ||
let finalresult = ""; | |||
let dbname=""; | let dbname=""; | ||
9번째 줄: | 11번째 줄: | ||
async function extractRatings(result){ | async function extractRatings(result){ | ||
let resultingArray = []; | let resultingArray = []; | ||
for (const value of result.query. | for (const value of Object.values(result.query.pages)){ | ||
try { | try { | ||
const fetchResult = await fetch('https://dev.libertygame.work/index.php?action=raw&title=토론:' + value.title); | const fetchResult = await fetch('https://dev.libertygame.work/index.php?action=raw&title=토론:' + value.title); | ||
30번째 줄: | 32번째 줄: | ||
} else if (result[i] === "=== 보통 (Normal) ==="){ | } else if (result[i] === "=== 보통 (Normal) ==="){ | ||
point=3; | point=3; | ||
} else if (result[i] === "=== 후지다 (Bad) ==="){ | } else if (result[i] === "=== 후지다 (Bad) ===" || result[i] === "=== 후지다 (Bad. ㄱ-) ==="){ | ||
point=2; | point=2; | ||
} else if (result[i] === "=== 국회의원 같다 (Disgusting) ==="){ | } else if (result[i] === "=== 국회의원 같다 (Disgusting) ===" || result[i] === "=== 국회의원 같다 (disgusting. ㅡ_ㅡ) ==="){ | ||
point=1; | point=1; | ||
} else if (result[i][1] === "=" && result[i][2] !== "=" && point === 1){ | } else if (result[i][1] === "=" && result[i][2] !== "=" && point === 1){ | ||
39번째 줄: | 41번째 줄: | ||
continue; | continue; | ||
} else if (point <= 5) { | } else if (point <= 5) { | ||
splitedline = result[i].split( | splitedline = result[i].split('#'); | ||
if (splitedline.length | if (splitedline.length !== 2) continue; // 서명 시각의 :와 맨 처음 # 외의 다른 # 혹은 :이 들어가면 2단계 이상의 문자열로 간주 | ||
else if (splitedline[1] === "" || splitedline[1] === " ") continue; // 빈 평가 | else if (splitedline[1] === "" || splitedline[1] === " ") continue; // 빈 평가 | ||
elem[point.toString()] += 1; | elem[point.toString()] += 1; | ||
56번째 줄: | 58번째 줄: | ||
for (let point of Object.keys(e[1])) { | for (let point of Object.keys(e[1])) { | ||
for (let c = 0 ; c < e[1][point]; c++){ | 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});`; | |||
const query = `INSERT INTO ${ | |||
sqlList.push(query); | sqlList.push(query); | ||
} | } | ||
63번째 줄: | 64번째 줄: | ||
} | } | ||
} | } | ||
finalResult = sqlList.join("\n"); | |||
} | } | ||
69번째 줄: | 71번째 줄: | ||
api.get({ | api.get({ | ||
action: "query", | action: "query", | ||
generator: "categorymembers", | |||
gcmtitle: "분류:리버티게임", | |||
gcmtype: "page", | |||
gcmnamespace: 0, | |||
gcmlimit: 500, | |||
prop: "info", | |||
inprop: "talkid" | |||
}).then((result) => { | }).then((result) => { | ||
console.log(extractRatings(result)); | console.log(extractRatings(result)); | ||
}); | }); | ||
} | } |
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));
});
}