rsshub
Version:
Make RSS Great Again!
311 lines (310 loc) • 9.22 kB
JavaScript
import { t as parseDate } from "./parse-date-3kcy2Eau.mjs";
import { t as cache_default } from "./cache-C1Y-9qDV.mjs";
import { t as got_default } from "./got-DUpa1V3-.mjs";
import { load } from "cheerio";
//#region lib/routes/embassy/supported-list.ts
var supported_list_default = {
ca: {
country: "ca",
countryCN: "加拿大",
link: "https://ca.china-embassy.gov.cn/zytz/",
list: "ul.news-content > li.item > a",
title: "#News_Body_Title",
description: ".view-content .view_default",
pubDate: "div.date",
consulates: { montreal: {
cityCN: "蒙特利尔",
link: "https://montreal.china-consulate.gov.cn/zjfw/zytz_1/",
list: "div.Text_Center > ul > li > a",
title: "#News_Body_Title",
description: "#News_Body_Txt_A",
pubDate: "#News_Body_Time"
} }
},
de: {
country: "de",
countryCN: "德国",
link: "https://de.china-embassy.gov.cn/chn/lsfw/jqtz/",
list: ".article-list a",
title: ".article-title",
description: ".article-content",
pubDate: ".publish-date",
consulates: { munich: {
cityCN: "慕尼黑",
link: "https://munich.china-consulate.gov.cn/zytz/",
list: "ul.list li a",
title: "#News_Body_Title",
description: "#News_Body_Txt_A",
pubDate: "#News_Body_Time"
} }
},
fr: {
country: "fr",
countryCN: "法国",
link: "https://fr.china-embassy.gov.cn/zgzfg/zgsg/lsqwc/zytz/",
list: "td.title > a",
title: "td.bigtitle",
description: ".TRS_UEDITOR",
pubDate: "td.time",
consulates: {
marseille: {
cityCN: "马赛",
link: "https://marseille.china-consulate.gov.cn/chn/lsfwgg/",
list: ".newslist a",
title: "#News_Body_Title",
description: "#News_Body_Txt_A",
pubDate: "#News_Body_Time"
},
strasbourg: {
cityCN: "斯特拉斯堡",
link: "https://strasbourg.china-consulate.gov.cn/lsfw/",
list: "div.do-section > ul > li > a.news-link",
title: ".view-title",
description: ".view-content .content",
pubDate: ".view-date"
},
lyon: {
cityCN: "里昂",
link: "https://lyon.china-consulate.gov.cn/lsfw/zytz/",
list: "ul.news-list > li.news-item > a.item-link",
title: ".view-title",
description: ".view-content .view_default",
pubDate: ".view-date"
}
}
},
jp: {
country: "jp",
countryCN: "日本",
link: "https://jp.china-embassy.gov.cn/lsfw_0/lsbtz_138411/",
list: "a.news-link",
title: "h2.title",
description: ".view-content .view_default",
pubDate: "div.view-date",
consulates: {
nagasaki: {
cityCN: "长崎",
link: "https://nagasaki.china-consulate.gov.cn/chn/tzgg/",
list: ".newsList a",
title: "#News_Body_Title",
description: "#News_Body_Txt_A",
pubDate: "#News_Body_Time"
},
osaka: {
cityCN: "大阪",
link: "https://osaka.china-consulate.gov.cn/lsfw/ZYTZ/",
list: "td.title > a",
title: "td.bigtitle",
description: ".TRS_UEDITOR",
pubDate: "td[height=\"19\"]"
},
fukuoka: {
cityCN: "福冈",
link: "https://fukuoka.china-consulate.gov.cn/chn/tztg/",
list: "#docMore > tbody > tr > td:nth-child(2) > table > tbody > tr:nth-child(2) > td > table:nth-child(2) > tbody a",
title: "#article > tbody > tr:nth-child(1) > td > table > tbody > tr:nth-child(1) > td",
description: "#article > tbody > tr:nth-child(3) > td",
pubDate: "#article > tbody > tr:nth-child(2) > td"
},
nagoya: {
cityCN: "名古屋",
link: "https://nagoya.china-consulate.gov.cn/chn/gzgg/",
list: "#docMore > div.mbox.fl > div > div.cbox_ul > ul a",
title: "#News_Body_Title",
description: "#News_Body_Txt_A",
pubDate: "#News_Body_Time"
},
sapporo: {
cityCN: "札幌",
link: "https://sapporo.china-consulate.gov.cn/chn/tzbg/",
list: "td[width=\"585\"] a",
title: "td.bigtitle",
description: ".TRS_UEDITOR",
pubDate: "td.time"
},
niigata: {
cityCN: "新潟",
link: "https://niigata.china-consulate.gov.cn/wybs/tztg_123188/",
list: "div.b-top > ul.news > li > a",
title: "#News_Body_Title",
description: "#News_Body_Txt_A",
pubDate: "#News_Body_Time"
}
}
},
kr: {
country: "kr",
countryCN: "韩国",
link: "https://kr.china-embassy.gov.cn/lstz/",
list: "div.news-wrapper > ul.news-list > li.news-item > a.news-link",
title: ".view-title",
description: ".view-content .view_default",
pubDate: "div.view-date",
consulates: {
busan: {
cityCN: "釜山",
link: "https://busan.china-consulate.gov.cn/chn/lsfw/tzgg101/",
list: "td.title > a",
title: "td.bigtitle",
description: ".TRS_UEDITOR",
pubDate: "td[height=\"19\"]"
},
jeju: {
cityCN: "济州",
link: "https://jeju.china-consulate.gov.cn/chn/ggl/",
list: "#docMore > tbody > tr > td:nth-child(3) > div > ul:nth-child(5) a",
title: "#News_Body_Title",
description: "#News_Body_Txt_A",
pubDate: "#News_Body_Time"
},
gwangju: {
cityCN: "光州",
link: "https://gwangju.china-consulate.gov.cn/chn/lsfwx/zytz/",
list: "#docNum a",
title: "td.bigtitle",
description: ".TRS_UEDITOR",
pubDate: "td font[color=\"666666\"]"
}
}
},
my: {
country: "my",
countryCN: "马来西亚",
link: "https://my.china-embassy.gov.cn/chn/zytz/",
list: "div[class=nbox_ul] > ul a",
title: "#News_Body_Title",
description: "#News_Body_Txt_A",
pubDate: "#News_Body_Time"
},
sg: {
country: "sg",
countryCN: "新加坡",
link: "https://sg.china-embassy.gov.cn/lsfw_0/zytz/",
list: "div.news-list a[target=_blank]",
title: "#News_Body_Title",
description: ".view-content .content",
pubDate: "div.view-date"
},
uk: {
country: "uk",
countryCN: "英国",
link: "https://gb.china-embassy.gov.cn/lsfw_137163/zytz_137164/",
list: "ul.news-card:not(.chnllist) a[href$=\".htm\"]",
title: "#News_Body_Title",
description: "#News_Body_Txt_A",
pubDate: "div.txt2",
consulates: {
belfast: {
cityCN: "贝尔法斯特",
link: "https://belfast.china-consulate.gov.cn/lsfw/zytz/",
list: "ul.news-list > li > a.news-link",
title: ".view-title",
description: ".view-content .view_default",
pubDate: ".view-date"
},
edinburgh: {
cityCN: "爱丁堡",
link: "https://edinburgh.china-consulate.gov.cn/zytz/",
list: "div.section ul > li > a.news-link",
title: ".view-title",
description: ".view-content .content",
pubDate: ".view-date"
},
manchester: {
cityCN: "曼彻斯特",
link: "https://manchester.china-consulate.gov.cn/zytz/",
list: "div.nbox_ul > ul > li > a",
title: "#News_Body_Title",
description: "#News_Body_Txt_A",
pubDate: "#News_Body_Time"
}
}
},
us: {
country: "us",
countryCN: "美国",
link: "https://us.china-embassy.gov.cn/zytz/",
list: ".list-content ul li a",
title: "div.title",
description: ".view-content .TRS_UEDITOR",
pubDate: "div.date",
consulates: {
chicago: {
cityCN: "芝加哥",
link: "https://chicago.china-consulate.gov.cn/zytz_0/",
list: "ul > li.aside-newsitem > a.news-link",
title: ".view-title",
description: ".view-content .view_default",
pubDate: ".view-date"
},
newyork: {
cityCN: "纽约",
link: "https://newyork.china-consulate.gov.cn/tzgg/",
list: "ul.news-list > li > a.news-link",
title: ".view-title",
description: ".view-content .TRS_UEDITOR",
pubDate: ".view-date"
},
sanfrancisco: {
cityCN: "旧金山",
link: "https://sanfrancisco.china-consulate.gov.cn/chn/zytz/",
list: "div#docMore a",
title: "#News_Body_Title",
description: "#article > .News_Body_Txt_A",
pubDate: "#News_Body_Time"
}
}
}
};
//#endregion
//#region lib/routes/embassy/index.ts
const route = {
path: "/:country/:city?",
categories: ["government"],
example: "/embassy/us/chicago",
parameters: {
country: "国家短代码, 见支持国家列表",
city: "城市, 对应国家列表下的`领事馆城市列表`,不填则为大使馆"
},
name: "使领馆重要通知",
maintainers: ["HenryQW"],
handler
};
async function handler(ctx) {
const country = ctx.req.param("country");
const city = ctx.req.param("city") ?? void 0;
let config = supported_list_default[country.toLowerCase()];
let desc;
if (city === void 0) desc = `中国驻${config.countryCN}大使馆 -- 重要通知`;
else {
config = config.consulates[city.toLowerCase()];
desc = `中国驻${config.cityCN}领事馆 -- 重要通知`;
}
const link = config.link;
const hostname = new URL(link).hostname;
const res = await got_default(link);
const $ = load(res.data);
const list = [];
$(config.list).slice(0, 10).each((i, e) => {
const temp = new URL($(e).attr("href"), link);
if (temp.hostname === hostname) list.push(temp);
});
const out = await Promise.all(list.map((link) => cache_default.tryGet(link.href, async () => {
const response = await got_default(link);
const $ = load(response.data);
return {
title: $(config.title).text(),
link,
description: $(config.description).html(),
pubDate: parseDate($(config.pubDate).text().replace("(", "").replace(")", ""))
};
})));
return {
title: desc,
description: desc,
link,
item: out
};
}
//#endregion
export { route };