mirror of
https://github.com/DIYgod/RSSHub.git
synced 2025-12-10 15:21:59 +08:00
feat: add Dengekionline(電撃オンライン) (#3269)
This commit is contained in:
@@ -210,3 +210,15 @@ pageClass: routes
|
|||||||
### 最新汉化
|
### 最新汉化
|
||||||
|
|
||||||
<Route author="junfengP" example="/zdfx" path="/zdfx"/>
|
<Route author="junfengP" example="/zdfx" path="/zdfx"/>
|
||||||
|
|
||||||
|
## 電撃オンライン
|
||||||
|
|
||||||
|
### 最新記事
|
||||||
|
|
||||||
|
<Route author="cssxsh" path="/dengekionline/:type?" example="/dengekionline/dps" :paramsDesc="['新闻类别,如下表']">
|
||||||
|
|
||||||
|
| All | PlayStation | Nintendo | Xbox | PC | Girl’sStyle | Arcade Web | App | Anime | Review | Rank |
|
||||||
|
| --- | ----------- | -------- | --------- | --- | ----------- | ---------- | --- | ----- | ------ | ---- |
|
||||||
|
| | dps | nintendo | microsoft | dpc | gstyle | arcade | app | anime | review | rank |
|
||||||
|
|
||||||
|
</Route>
|
||||||
|
|||||||
@@ -1833,6 +1833,9 @@ router.get('/kzfeed/topic/:id', require('./routes/kzfeed/topic'));
|
|||||||
// 腾讯新闻较真查证平台
|
// 腾讯新闻较真查证平台
|
||||||
router.get('/factcheck', require('./routes/tencent/factcheck'));
|
router.get('/factcheck', require('./routes/tencent/factcheck'));
|
||||||
|
|
||||||
|
// 電撃Online
|
||||||
|
router.get('/dengekionline/:type?', require('./routes/dengekionline/new'));
|
||||||
|
|
||||||
// 4Gamers
|
// 4Gamers
|
||||||
router.get('/4gamers/category/:category', require('./routes/4gamers/category'));
|
router.get('/4gamers/category/:category', require('./routes/4gamers/category'));
|
||||||
router.get('/4gamers/tag/:tag', require('./routes/4gamers/tag'));
|
router.get('/4gamers/tag/:tag', require('./routes/4gamers/tag'));
|
||||||
|
|||||||
130
lib/routes/dengekionline/new.js
Normal file
130
lib/routes/dengekionline/new.js
Normal file
@@ -0,0 +1,130 @@
|
|||||||
|
const got = require('@/utils/got');
|
||||||
|
const cheerio = require('cheerio');
|
||||||
|
|
||||||
|
const host = 'https://dengekionline.com';
|
||||||
|
const infos = {
|
||||||
|
'': {
|
||||||
|
category: '電撃総合',
|
||||||
|
patch: '/',
|
||||||
|
},
|
||||||
|
dps: {
|
||||||
|
category: '電撃PlayStation',
|
||||||
|
patch: '/dps/',
|
||||||
|
},
|
||||||
|
nintendo: {
|
||||||
|
category: '電撃Nintendo',
|
||||||
|
patch: '/nintendo/',
|
||||||
|
},
|
||||||
|
microsoft: {
|
||||||
|
category: '電撃Xbox',
|
||||||
|
patch: '/microsoft/',
|
||||||
|
},
|
||||||
|
dpc: {
|
||||||
|
category: '電撃PC',
|
||||||
|
patch: '/dpc/',
|
||||||
|
},
|
||||||
|
gstyle: {
|
||||||
|
category: '電撃Girl’sStyle',
|
||||||
|
patch: '/g-style/',
|
||||||
|
},
|
||||||
|
arcade: {
|
||||||
|
category: '電撃アーケードWeb',
|
||||||
|
patch: '/arcade/',
|
||||||
|
},
|
||||||
|
app: {
|
||||||
|
category: 'アプリまとめ',
|
||||||
|
patch: '/app/',
|
||||||
|
},
|
||||||
|
anime: {
|
||||||
|
category: 'アニメ',
|
||||||
|
patch: '/tags/%E3%82%A2%E3%83%8B%E3%83%A1/',
|
||||||
|
},
|
||||||
|
review: {
|
||||||
|
category: 'レビューまとめ',
|
||||||
|
patch: '/tags/%E3%83%AC%E3%83%93%E3%83%A5%E3%83%BC/',
|
||||||
|
},
|
||||||
|
rank: {
|
||||||
|
category: '販売ランキング',
|
||||||
|
patch: '/tags/%E3%82%BD%E3%83%95%E3%83%88%E8%B2%A9%E5%A3%B2%E3%83%A9%E3%83%B3%E3%82%AD%E3%83%B3%E3%82%B0/',
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
module.exports = async (ctx) => {
|
||||||
|
// 设置参数
|
||||||
|
const info = infos[ctx.params.type || ''];
|
||||||
|
if (info === undefined) {
|
||||||
|
throw Error('不存在的类型');
|
||||||
|
}
|
||||||
|
const patch = info.patch;
|
||||||
|
const category = info.category;
|
||||||
|
const title = `電撃オンライン - ${category}`;
|
||||||
|
// 网页请求获取新闻列表
|
||||||
|
const response = await got(patch, {
|
||||||
|
method: 'get',
|
||||||
|
baseUrl: host,
|
||||||
|
});
|
||||||
|
const data = response.data;
|
||||||
|
const link = response.link;
|
||||||
|
// 过滤处理新闻列表数据
|
||||||
|
const $ = cheerio.load(data);
|
||||||
|
const list = $('ul.gNews_list').find('a');
|
||||||
|
const description = $('meta[name="description"]').attr('content');
|
||||||
|
// 整理信息
|
||||||
|
const item = await Promise.all(
|
||||||
|
list
|
||||||
|
.map(async (index, element) => {
|
||||||
|
const liArr = $(element).find('li');
|
||||||
|
const date = $(element)
|
||||||
|
.find('time')
|
||||||
|
.attr('datetime');
|
||||||
|
|
||||||
|
const newLink = $(element).attr('href');
|
||||||
|
const category = liArr.map((index, li) => $(li).text()).get();
|
||||||
|
// 日本时区为东9区
|
||||||
|
const pubDate = new Date(`${date} GMT+0900`).toUTCString();
|
||||||
|
// 获取作者等
|
||||||
|
const newInfo = await ctx.cache.tryGet(newLink, async () => {
|
||||||
|
// console.log(newLink);
|
||||||
|
const result = await got(newLink, {
|
||||||
|
method: 'get',
|
||||||
|
baseUrl: host,
|
||||||
|
});
|
||||||
|
const $ = cheerio.load(result.data);
|
||||||
|
const title = $('.gEntry_title').text();
|
||||||
|
const description = $('.gEntry_body')
|
||||||
|
.find('p')
|
||||||
|
.html();
|
||||||
|
const author = $('.gEntry_athorList')
|
||||||
|
.find('dd')
|
||||||
|
.text();
|
||||||
|
const info = {
|
||||||
|
title: title,
|
||||||
|
description: description,
|
||||||
|
author: author,
|
||||||
|
url: result.url,
|
||||||
|
};
|
||||||
|
return info;
|
||||||
|
});
|
||||||
|
|
||||||
|
const single = {
|
||||||
|
title: newInfo.title,
|
||||||
|
link: newInfo.url,
|
||||||
|
category: category,
|
||||||
|
description: newInfo.description,
|
||||||
|
author: newInfo.author,
|
||||||
|
guid: newInfo.url,
|
||||||
|
pubDate: pubDate,
|
||||||
|
};
|
||||||
|
return Promise.resolve(single);
|
||||||
|
})
|
||||||
|
.get()
|
||||||
|
);
|
||||||
|
// 设置rss
|
||||||
|
ctx.state.data = {
|
||||||
|
title: title,
|
||||||
|
description: description,
|
||||||
|
link: link,
|
||||||
|
language: 'ja-jp',
|
||||||
|
item: item,
|
||||||
|
};
|
||||||
|
};
|
||||||
Reference in New Issue
Block a user