rsshub
Version:
Make RSS Great Again!
139 lines (137 loc) • 6.04 kB
JavaScript
import { n as init_esm_shims, t as __dirname } from "./esm-shims-CzJ_djXG.mjs";
import { t as parseDate } from "./parse-date-BrP7mxXf.mjs";
import { t as cache_default } from "./cache-Bo__VnGm.mjs";
import { r as getSubPath } from "./common-utils-vrWQFAEk.mjs";
import { t as art } from "./render-BQo6B4tL.mjs";
import { t as got_default } from "./got-KxxWdaxq.mjs";
import { t as timezone } from "./timezone-D8cuwzTY.mjs";
import { n as finishArticleItem } from "./wechat-mp-Dq_pp853.mjs";
import { load } from "cheerio";
//#region lib/routes/gov/general/general.ts
init_esm_shims();
const gdgov = async (info, ctx) => {
const path = getSubPath(ctx).split("/").filter((item) => item !== "");
const [site, branch] = path;
const pathstartat = info.pathstartat === void 0 ? 0 : info.pathstartat;
let rootUrl = "http://" + branch + "." + site + ".gov.cn";
for (let index = 0; index < pathstartat; index++) {
const element = path[index + 2];
rootUrl = rootUrl + "/" + element;
}
const defaultPath = info.defaultPath;
let name_element = info.name_element;
const name_match_type = info.name_match_type;
const name_match = info.name_match;
const name_join = info.name_join;
let list_element = info.list_element;
let list_include = info.list_include;
if (list_element === void 0) {
list_element = "a[href*=\"content\"]";
list_include = "site";
}
if (list_include === "site") {
list_element = list_element.split(",").filter((item) => item !== "");
for (let index = 0; index < list_element.length; index++) list_element[index] += "[href*=\"" + rootUrl.slice(7) + "\"]";
list_element = list_element.join(",");
}
let title_element = info.title_element;
let title_match = info.title_match;
const author_element = info.author_element;
const author_match = info.author_match;
const authorisme = info.authorisme;
let description_element = info.description_element;
let pubDate_element = info.pubDate_element;
let pubDate_match = info.pubDate_match;
let pubDate_format = info.pubDate_format;
path.splice(0, 2 + pathstartat);
let pathname = path.join("/");
pathname = pathname === "" ? defaultPath : pathname.endsWith("/") ? pathname : pathname + "/";
const currentUrl = `${rootUrl}/${pathname}`;
let $ = "";
let name = "";
let list = "";
if (pathname.startsWith("gkmlpt")) {
title_element = void 0;
title_match = void 0;
description_element = "div[class=\"article-content\"]";
pubDate_element = void 0;
pubDate_match = void 0;
pubDate_format = void 0;
const res = await got_default(`${rootUrl}/gkmlpt/api/all/0`);
name = authorisme + "政府信息公开平台";
list = res.data.articles.filter((item) => item.url.includes("content"));
} else {
const dataArray = (await got_default(currentUrl)).data;
$ = load(dataArray);
switch (name_match_type) {
case "name":
name = name_element;
break;
case "meta":
name_element = name_element.split(",").filter((item) => item !== "");
for (let index = 0; index < name_element.length; index++) name_element[index] = $("meta[name=\"" + name_element[index].trim() + "\"]").attr("content");
name = name_element.join(name_join);
break;
case "element":
name_element = name_element.split(",").filter((item) => item !== "");
for (let index = 0; index < name_element.length; index++) name_element[index] = $(name_element[index].trim()).text().match(name_match)[1];
name = name_element.join(name_join);
break;
default:
name = $("head title").text();
break;
}
list = $(list_element);
}
const lists = list.map((i, item) => {
let link = "";
if (pathname.startsWith("gkmlpt")) link = i.url;
else {
link = $(item).attr("href");
if (!link.startsWith("http")) link.startsWith("/") ? link = `${rootUrl}${link}` : link = `${rootUrl}/${link}`;
}
return link;
});
const items = await Promise.all(lists.map((link) => {
const idlink = new URL(link);
if (idlink.pathname === "/zcjdpt") return cache_default.tryGet(link, async () => {
const data = (await got_default("https://zcjd.cloud.gd.gov.cn/api/home/article" + idlink.search)).data.data;
for (let index = 0; index < data.jie_du_items.length; index++) data.jie_du_items[index].jd_content = data.jie_du_items[index].jd_content.replaceAll(/((\n {4})|(\n))/g, "</p><p style=\"font-size: 16px;line-height: 32px;text-indent: 2em;\">");
return {
link,
title: data.art_title,
description: art(path.join(__dirname, "templates/zcjdpt-2599868d.art"), data),
pubDate: timezone(parseDate(data.pub_time), 8),
author: /(本|本网|本站)/.test(data.pub_unite) ? authorisme : data.pub_unite
};
});
else if (idlink.host === "mp.weixin.qq.com") return finishArticleItem({ link });
else return cache_default.tryGet(link, async () => {
const { data: res } = await got_default(link);
const content = load(res);
let author = "";
author = author_element === void 0 ? content("meta[name=\"ContentSource\"]").attr("content") : content(author_element).text().trim().match(author_match)[1].trim().replaceAll(/(-*$)/g, "");
let pubDate = "";
pubDate = pubDate_element === void 0 ? content("meta[name=\"PubDate\"]").attr("content") : content(pubDate_element).text().trim().match(pubDate_match)[1].trim().replaceAll(/(-*$)/g, "");
let title = "";
title = title_element === void 0 ? content("meta[name=\"ArticleTitle\"]").attr("content") : content(title_element).text().trim().match(title_match)[1];
const description_content = description_element.split(",").filter((item) => item !== "");
for (let index = 0; index < description_content.length; index++) description_content[index] = content(description_content[index].trim()).html();
const description = description_content.join("");
return {
link,
title,
description,
pubDate: timezone(parseDate(pubDate, pubDate_format), 8),
author: /本|本网|本站/.test(author) ? authorisme : author
};
});
}));
return {
title: name,
link: currentUrl,
item: items
};
};
//#endregion
export { gdgov as t };