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