kiss_diary.js 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. const html = require("node-html-parser");
  2. const axios = require("axios");
  3. const db = require("../../db.js");
  4. const urlPattern = /diary\.php\?no=(\d+)/i;
  5. const kissDiaryRoot = "http://www.kisskiss.tv/kiss";
  6. async function aggregate() {
  7. let lastDiary = db.get("latestKissDiaryEntry").value();
  8. try {
  9. let mainPageRes = await axios.get(`${kissDiaryRoot}/diary.php`);
  10. if(mainPageRes.status != 200)
  11. return [];
  12. let rootNode = html.parse(mainPageRes.data, {
  13. pre: true,
  14. script: false,
  15. style: false
  16. });
  17. let diaryEntries = rootNode.querySelectorAll("div.blog_frame_middle ul.disc li a");
  18. if(!diaryEntries) {
  19. console.log("[KISS DIARY] Failed to find listing!");
  20. }
  21. let result = [];
  22. let latestEntry = lastDiary;
  23. for(let a of diaryEntries) {
  24. let matches = urlPattern.exec(a.rawAttributes.href);
  25. if(!matches)
  26. continue;
  27. let id = +matches[1];
  28. if(id <= lastDiary)
  29. continue;
  30. if(id > latestEntry)
  31. latestEntry = id;
  32. let diaryLink = `${kissDiaryRoot}/${a.rawAttributes.href}`;
  33. let res = await axios.get(diaryLink);
  34. if(res.status != 200)
  35. continue;
  36. let node = html.parse(res.data, {
  37. pre: true,
  38. script: false,
  39. style: false
  40. });
  41. let title = node.querySelector("table.blog_frame_top tr td a");
  42. let contents = node.querySelector("div.blog_frame_middle");
  43. let bottomFrame = contents.querySelector("div.blog_data");
  44. if(bottomFrame)
  45. contents.childNodes[0].removeChild(bottomFrame);
  46. result.push({
  47. id: `kisskisstv-diary-${id}`,
  48. link: diaryLink,
  49. title: title.text,
  50. author: "KISS BLOG",
  51. contents: contents.innerHTML,
  52. embedColor: 0xf4c100
  53. });
  54. }
  55. db.set("latestKissDiaryEntry", latestEntry).write();
  56. return result;
  57. } catch(err) {
  58. return [];
  59. }
  60. }
  61. module.exports = {
  62. aggregate: aggregate
  63. };