diff --git a/lib/routes/europechinese/latest.ts b/lib/routes/europechinese/latest.ts new file mode 100644 index 00000000000000..abb8df4a8520bb --- /dev/null +++ b/lib/routes/europechinese/latest.ts @@ -0,0 +1,66 @@ +import { Route } from '@/types'; +import { load } from 'cheerio'; +import cache from '@/utils/cache'; +import got from '@/utils/got'; + +export const route: Route = { + path: '/latest', + categories: ['new-media'], + example: '/europechinese/latest', + parameters: {}, + features: { + requireConfig: false, + requirePuppeteer: false, + antiCrawler: false, + supportBT: false, + supportPodcast: false, + supportScihub: false, + }, + radar: [ + { + source: ['europechinese.blogspot.com'], + }, + ], + name: '最新', + maintainers: ['emdoe'], + handler, + url: 'europechinese.blogspot.com/', +}; + +async function handler() { + const url = `https://europechinese.blogspot.com/`; + const { data: response } = await got(url); + const $ = load(response); + const list = $('h3.post-title'); + + const out = await Promise.all( + list.map((_, item) => { + const title = $(item).find('a').text(); + const link = $(item).find('a').attr('href'); + + return cache.tryGet(link, async () => { + const { data: response } = await got(link); + const $ = load(response); + $('div.widget-content').remove(); + $('div.byline').remove(); + $('div.post-sidebar').remove(); + const time = $('time.published').attr('datetime'); + const text = $('div.post-body-container').html(); + + return { + title, + link, + guid: link, + description: text, + pubDate: time, + }; + }); + }) + ); + + return { + title: `歐洲動態(國際)| 最新`, + link: url, + item: out, + }; +} diff --git a/lib/routes/europechinese/namespace.ts b/lib/routes/europechinese/namespace.ts new file mode 100644 index 00000000000000..9c639fb2dd2c7a --- /dev/null +++ b/lib/routes/europechinese/namespace.ts @@ -0,0 +1,6 @@ +import type { Namespace } from '@/types'; + +export const namespace: Namespace = { + name: '歐洲動態(國際)', + url: 'europechinese.blogspot.com', +};