UNPKG

rsshub

Version:
311 lines (310 loc) 9.22 kB
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 };