const html = require("node-html-parser"); const axios = require("axios"); const db = require("../../db.js"); const urlPattern = /diary\.php\?no=(\d+)/i; const kissDiaryRoot = "http://www.kisskiss.tv/kiss"; async function aggregate() { let lastDiary = db.get("latestKissDiaryEntry").value(); try { let mainPageRes = await axios.get(`${kissDiaryRoot}/diary.php`); if(mainPageRes.status != 200) return []; let rootNode = html.parse(mainPageRes.data, { pre: true, script: false, style: false }); let diaryEntries = rootNode.querySelectorAll("div.blog_frame_middle ul.disc li a"); if(!diaryEntries) { console.log("[KISS DIARY] Failed to find listing!"); } let result = []; let latestEntry = lastDiary; for(let a of diaryEntries) { let matches = urlPattern.exec(a.rawAttributes.href); if(!matches) continue; let id = +matches[1]; if(id <= lastDiary) continue; if(id > latestEntry) latestEntry = id; let diaryLink = `${kissDiaryRoot}/${a.rawAttributes.href}`; let res = await axios.get(diaryLink); if(res.status != 200) continue; let node = html.parse(res.data, { pre: true, script: false, style: false }); let title = node.querySelector("table.blog_frame_top tr td a"); let contents = node.querySelector("div.blog_frame_middle"); let bottomFrame = contents.querySelector("div.blog_data"); if(bottomFrame) contents.childNodes[0].removeChild(bottomFrame); result.push({ id: `kisskisstv-diary-${id}`, link: diaryLink, title: title.text, author: "KISS BLOG", contents: contents.innerHTML, embedColor: 0xf4c100 }); } db.set("latestKissDiaryEntry", latestEntry).write(); return result; } catch(err) { return []; } } module.exports = { aggregate: aggregate };