123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 |
- import request from "request-promise-native";
- import { Response } from "request";
- import { IAggregator, INewsItem } from "./aggregator";
- import { getRepository } from "typeorm";
- import { AggroNewsItem } from "@shared/db/entity/AggroNewsItem";
- import cheerio from "cheerio";
- import { logger } from "src/logging";
- const updatePage = "http://com3d2.jp/update/";
- const changeLogPattern = /\[\s*([^\s\]]+)\s*\]\s*((・.*)\s+)+/gim;
- const FEED_NAME = "com3d2-jp-updates";
- function getVersionNumber(verStr: string) {
- let verPart = verStr.replace(/[.\s]/g, "");
- if(verPart.length < 4)
- verPart += "0";
- return +verPart;
- }
- async function aggregate() {
- const repo = getRepository(AggroNewsItem);
-
- let lastPost = await repo.findOne({
- select: [ "newsId" ],
- where: { feedName: FEED_NAME },
- order: { newsId: "DESC" }
- });
- if(!lastPost)
- lastPost = repo.create({
- newsId: 0
- });
-
- try {
- const mainPageRes = await request(updatePage, {resolveWithFullResponse: true}) as Response;
- if(mainPageRes.statusCode != 200)
- return;
-
- const rootNode = cheerio.load(mainPageRes.body);
- const readme = rootNode("div.readme");
- if(!readme) {
- logger.error("[COM3D2 JP UPDATE] Failed to find listing!");
- return [];
- }
- const latestVersionChangelog = changeLogPattern.exec(readme.text());
- if(!latestVersionChangelog)
- return [];
- const version = getVersionNumber(latestVersionChangelog[1]);
- const text = latestVersionChangelog[0];
- if(version <= lastPost.newsId)
- return [];
-
- return [{
- feedId: FEED_NAME,
- newsId: version,
- link: updatePage,
- title: latestVersionChangelog[1],
- author: "COM3D2 UPDATE",
- contents: text,
- embedColor: 0xcccccc,
- needsTranslation: true
- }] as INewsItem[];
- } catch(err) {
- logger.error("Failed to parse com3d2 update site", err);
- return [];
- }
- }
- export default {
- aggregate: aggregate
- } as IAggregator;
|