mirror of
https://github.com/DIYgod/RSSHub.git
synced 2026-09-24 23:12:34 +08:00
feat(route): add 四月网 (#14560)
This commit is contained in:
@@ -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,
|
||||
};
|
||||
};
|
||||
@@ -0,0 +1,4 @@
|
||||
module.exports = {
|
||||
'/mil/:category?': ['nczitzk'],
|
||||
'/news/:category?': ['nczitzk'],
|
||||
};
|
||||
@@ -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',
|
||||
},
|
||||
],
|
||||
},
|
||||
};
|
||||
@@ -0,0 +1,3 @@
|
||||
module.exports = (router) => {
|
||||
router.get('/:id?/:category*', require('./'));
|
||||
};
|
||||
@@ -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 }}
|
||||
Reference in New Issue
Block a user