feat(route): add 四月网 (#14560)

This commit is contained in:
Ethan Shen
2024-02-26 00:44:48 +08:00
committed by GitHub
parent 4d4f316a86
commit 4cfb669805
6 changed files with 225 additions and 0 deletions
+82
View File
@@ -0,0 +1,82 @@
const got = require('@/utils/got');
const cheerio = require('cheerio');
const timezone = require('@/utils/timezone');
const { parseDate } = require('@/utils/parse-date');
const { art } = require('@/utils/render');
const path = require('path');
module.exports = async (ctx) => {
const { id = 'news', category = 'china' } = ctx.params;
const limit = ctx.query.limit ? Number.parseInt(ctx.query.limit, 10) : 30;
const rootUrl = `http://${id}.m4.cn`;
const currentUrl = new URL(category ? `/${category.replace(/\/$/, '')}/` : '/', rootUrl).href;
const { data: response } = await got(currentUrl);
const $ = cheerio.load(response);
let items = $('div.articleitem0 div.aheader0')
.slice(0, limit)
.toArray()
.map((item) => {
item = $(item);
const a = item.find('a').first();
return {
title: a.text(),
link: a.prop('href'),
description: art(path.join(__dirname, 'templates/description.art'), {
images: [
{
src: item.parent().find('div.aimg0 a img').prop('src'),
alt: a.text(),
},
],
}),
category: item
.find('a.aclass')
.toArray()
.map((c) => $(c).text().replaceAll('[]', '').trim()),
pubDate: timezone(parseDate(item.find('span.atime').text()), +8),
};
});
items = await Promise.all(
items.map((item) =>
ctx.cache.tryGet(item.link, async () => {
const { data: detailResponse } = await got(item.link);
const content = cheerio.load(detailResponse);
item.title = content('h1').first().text();
item.description = art(path.join(__dirname, 'templates/description.art'), {
intro: content('div.aintro1, p.cont-summary').text(),
description: content('div.content0, div.cont-detail').html(),
});
item.category = content('span.dd0 a, a[rel="category"]')
.toArray()
.map((c) => content(c).text())
.slice(1);
item.pubDate = timezone(parseDate(content('span.atime1, span.post-time').text()), +8);
return item;
})
)
);
const image = $('a.logo0_b img').prop('src');
ctx.state.data = {
item: items,
title: $('title').text(),
link: currentUrl,
description: $('meta[name="description"]').prop('content'),
language: 'zh',
image,
subtitle: $('meta[name="keywords"]').prop('content'),
author: $('meta[name="author"]').prop('content'),
allowEmpty: true,
};
};
+4
View File
@@ -0,0 +1,4 @@
module.exports = {
'/mil/:category?': ['nczitzk'],
'/news/:category?': ['nczitzk'],
};
+87
View File
@@ -0,0 +1,87 @@
module.exports = {
'm4.cn': {
_name: '四月网',
news: [
{
title: '要闻 - 国内新闻',
docs: 'https://docs.rsshub.app/routes/new-media#si-yue-wang-yao-wen',
source: ['/china/'],
target: '/m4/news/china',
},
{
title: '要闻 - 国际新闻',
docs: 'https://docs.rsshub.app/routes/new-media#si-yue-wang-yao-wen',
source: ['/world/'],
target: '/m4/news/world',
},
{
title: '要闻 - 民生',
docs: 'https://docs.rsshub.app/routes/new-media#si-yue-wang-yao-wen',
source: ['/livelihood/'],
target: '/m4/news/livelihood',
},
{
title: '要闻 - 社会',
docs: 'https://docs.rsshub.app/routes/new-media#si-yue-wang-yao-wen',
source: ['/society/'],
target: '/m4/news/society',
},
{
title: '要闻 - 财经',
docs: 'https://docs.rsshub.app/routes/new-media#si-yue-wang-yao-wen',
source: ['/finance/'],
target: '/m4/news/finance',
},
{
title: '要闻 - 科技',
docs: 'https://docs.rsshub.app/routes/new-media#si-yue-wang-yao-wen',
source: ['/tech/'],
target: '/m4/news/tech',
},
],
mil: [
{
title: '军事 - 中国军情',
docs: 'https://docs.rsshub.app/routes/new-media#si-yue-wang-jun-shi',
source: ['/china/'],
target: '/m4/mil/china',
},
{
title: '军事 - 国际军情',
docs: 'https://docs.rsshub.app/routes/new-media#si-yue-wang-jun-shi',
source: ['/world/'],
target: '/m4/mil/world',
},
{
title: '军事 - 军事评论',
docs: 'https://docs.rsshub.app/routes/new-media#si-yue-wang-jun-shi',
source: ['/views/'],
target: '/m4/mil/views',
},
{
title: '军事 - 军事历史',
docs: 'https://docs.rsshub.app/routes/new-media#si-yue-wang-jun-shi',
source: ['/history/'],
target: '/m4/mil/history',
},
{
title: '军事 - 军迷说',
docs: 'https://docs.rsshub.app/routes/new-media#si-yue-wang-jun-shi',
source: ['/talk/'],
target: '/m4/mil/talk',
},
{
title: '军事 - 图说军事',
docs: 'https://docs.rsshub.app/routes/new-media#si-yue-wang-jun-shi',
source: ['/photo/'],
target: '/m4/mil/photo',
},
{
title: '军事 - 武器库',
docs: 'https://docs.rsshub.app/routes/new-media#si-yue-wang-jun-shi',
source: ['/arms/'],
target: '/m4/mil/arms',
},
],
},
};
+3
View File
@@ -0,0 +1,3 @@
module.exports = (router) => {
router.get('/:id?/:category*', require('./'));
};
+21
View File
@@ -0,0 +1,21 @@
{{ if images }}
{{ each images image }}
{{ if image?.src }}
<figure>
<img
{{ if image.alt }}
alt="{{ image.alt }}"
{{ /if }}
src="{{ image.src }}">
</figure>
{{ /if }}
{{ /each }}
{{ /if }}
{{ if intro }}
<blockquote>{{ intro }}</blockquote>
{{ /if }}
{{ if description }}
{{@ description }}
{{ /if }}