mirror of
https://github.com/DIYgod/RSSHub.git
synced 2026-10-18 14:29:01 +08:00
c7e0a099b7
* Fix eshop us * Update lib/routes/nintendo/eshop_us.js * refactor: migrate to v2
171 lines
6.4 KiB
JavaScript
171 lines
6.4 KiB
JavaScript
const got = require('@/utils/got');
|
|
const cheerio = require('cheerio');
|
|
const { JSDOM } = require('jsdom');
|
|
const { parseDate } = require('@/utils/parse-date');
|
|
const { art } = require('@/utils/render');
|
|
const path = require('path');
|
|
const dayjs = require('dayjs');
|
|
const localizedFormat = require('dayjs/plugin/localizedFormat');
|
|
require('dayjs/locale/zh-cn');
|
|
dayjs.extend(localizedFormat);
|
|
|
|
function nuxtReader(data) {
|
|
let nuxt = {};
|
|
try {
|
|
const dom = new JSDOM(data, {
|
|
runScripts: 'dangerously',
|
|
});
|
|
nuxt = dom.window.__NUXT__.data[0];
|
|
} catch (e) {
|
|
throw new Error('Nuxt 框架信息提取失败,请报告这个问题');
|
|
}
|
|
|
|
return nuxt;
|
|
}
|
|
|
|
function generateImageLink(link) {
|
|
return `<img src="${link}"><br/>`;
|
|
}
|
|
|
|
async function load(link) {
|
|
const response = await got(link);
|
|
|
|
const data = response.data;
|
|
|
|
const $ = cheerio.load(data); // 使用 cheerio 加载返回的 HTML
|
|
const description = $('.description').html();
|
|
|
|
return {
|
|
content: description,
|
|
};
|
|
}
|
|
|
|
async function loadNews(link) {
|
|
const response = await got(link);
|
|
|
|
const data = response.data;
|
|
|
|
const $ = cheerio.load(data);
|
|
let description = $('.detail-body-container').html();
|
|
const date = $('.topics-articleHead__date').text();
|
|
description = description.replace(/src="\/topics\//g, 'src="https://www.nintendo.com.hk/topics/');
|
|
return {
|
|
content: description,
|
|
pubDate: parseDate(date, 'YYYY.M.D'),
|
|
};
|
|
}
|
|
|
|
const ProcessItem = (list, caches) =>
|
|
Promise.all(
|
|
list.map(async (item) => {
|
|
const other = await caches.tryGet(item.link, () => load(item.link));
|
|
return { ...item, ...other };
|
|
})
|
|
);
|
|
|
|
const ProcessNews = (list, caches) =>
|
|
Promise.all(
|
|
list.map(async (item) => {
|
|
const other = await caches.tryGet(item.url, () => loadNews('https://www.nintendo.com.hk' + item.url));
|
|
return { ...item, ...other };
|
|
})
|
|
);
|
|
|
|
/*
|
|
Software Item Example
|
|
{
|
|
"nsUid": "70010000027088",
|
|
"gameProductCode": "HAC-P-ADALB",
|
|
"name": "新 超级马力欧兄弟U 豪华版",
|
|
"price": "299",
|
|
"currency": "CNY",
|
|
"images": ["//switch-cn.gtgres.com/global-images/c247f0e0-1654-11ea-9b40-236e671bca9e.png", "//switch-cn.gtgres.com/global-images/c62e52d0-1654-11ea-9b40-236e671bca9e.jpg", "//switch-cn.gtgres.com/global-images/c8ec6160-1654-11ea-9b40-236e671bca9e.jpg", "//switch-cn.gtgres.com/global-images/cb84e690-1654-11ea-9b40-236e671bca9e.jpg", "//switch-cn.gtgres.com/global-images/cdc1b730-1654-11ea-9b40-236e671bca9e.jpg", "//switch-cn.gtgres.com/global-images/cfd57c00-1654-11ea-9b40-236e671bca9e.jpg", "//switch-cn.gtgres.com/global-images/d1fe4f70-1654-11ea-9b40-236e671bca9e.jpg"],
|
|
"movies": [],
|
|
"purchaseUrls": [{
|
|
"key": "JD",
|
|
"url": "https://item.jd.com/100010400326.html"
|
|
}, {
|
|
"key": "TM",
|
|
"url": "https://detail.tmall.com/item.htm?id=608916438547"
|
|
}],
|
|
"descriptionTitle": "2D超级马力欧全新体验,同享欢乐时光",
|
|
"descriptionContent": "《新 超级马力欧兄弟U 豪华版》是2D超级马力欧横版卷轴动作游戏。\\n\\n游戏包括《新 超级路易吉U》和《新 超级马力欧兄弟U》共164个关卡,马力欧一行需要前往被酷霸王占领的桃花公主城堡,利用多种新奇的能力强化,与可靠有趣的伙伴,在丰富多彩的世界中展开冒险。在《新 超级路易吉U》中,关卡难度更高,限时更短,角色跳跃能力更强但也更易打滑,非常适合喜欢挑战的玩家。\\n\\n游戏中有“马力欧”、“路易吉”、“奇诺比奥”、“偷天兔”和“奇诺比珂”5个角色供你选择,其中“奇诺比珂”与“偷天兔”拥有非常适合新手的特殊能力,即使不擅长动作游戏,也可以轻松游玩。\\n\\n除了故事模式外,游戏还提供课题模式、加倍模式和金币对战多种丰富的玩法。游戏支持最多4人一起游玩,快与伙伴分享Joy-Con™,一起趣玩吧!",
|
|
"sizeNum": "2.1",
|
|
"sizeUnit": "GB",
|
|
"playMode": ["tv", "tabletop", "handheld"],
|
|
"normalPlayersNum": {
|
|
"min": 1,
|
|
"max": 4
|
|
},
|
|
"localPlayersNum": {
|
|
"min": 0,
|
|
"max": 0
|
|
},
|
|
"internatPlayersNum": {
|
|
"min": 0,
|
|
"max": 0
|
|
},
|
|
"handleSupport": "Nintendo Switch专业手柄",
|
|
"platform": "Nintendo Switch",
|
|
"developer": "Nintendo",
|
|
"publisher": "任天堂",
|
|
"genre": ["动作", "冒险", "家庭", "多人"],
|
|
"releaseDatetime": 1575907200000,
|
|
"supportLanguages": ["简体中文"],
|
|
"colors": {
|
|
"words": "3c3c3c",
|
|
"entrance": "e60012",
|
|
"background": "e8ebef"
|
|
},
|
|
"copyright": {
|
|
"publishCompany": "上海电子出版有限公司",
|
|
"operateCompany": "深圳市腾讯计算机系统有限公司",
|
|
"copyrightNotice": "© 2012-2019 Nintendo",
|
|
"isbn": "978-7-498-06914-6",
|
|
"gapp": "国新出审[2019]2990号",
|
|
"copyrightNumber": "电出字09-2019-031"
|
|
}
|
|
}
|
|
*/
|
|
const ProcessItemChina = (list, cache) =>
|
|
Promise.all(
|
|
list.map(async (item) => {
|
|
if (!item.link.startsWith('https://www.nintendoswitch.com.cn/software/')) {
|
|
return item;
|
|
}
|
|
const n = await cache.tryGet(item.link, async () => nuxtReader((await got(item.link)).data));
|
|
const software = n.data;
|
|
return {
|
|
...item,
|
|
category: [...software.supportLanguages, ...software.genre, ...software.playMode],
|
|
description: art(path.join(__dirname, 'templates/eshop_cn.art'), {
|
|
item,
|
|
software,
|
|
releaseDatetime: dayjs(software.releaseDatetime).locale('zh-cn').format('lll'),
|
|
}),
|
|
};
|
|
})
|
|
);
|
|
|
|
const ProcessNewsChina = (list, cache) =>
|
|
Promise.all(
|
|
list.map(async (item) => {
|
|
const n = await cache.tryGet(item.link, async () => nuxtReader((await got(item.link)).data));
|
|
return {
|
|
...item,
|
|
description: item.description + n.newsData.content,
|
|
category: n.newsData.category,
|
|
pubDate: parseDate(n.newsData.releaseTime, 'x'),
|
|
};
|
|
})
|
|
);
|
|
|
|
module.exports = {
|
|
ProcessItem,
|
|
ProcessNews,
|
|
ProcessNewsChina,
|
|
ProcessItemChina,
|
|
nuxtReader,
|
|
generateImageLink,
|
|
};
|