diff --git a/lib/router.js b/lib/router.js old mode 100644 new mode 100755 index 29d440f8c..81863d0db --- a/lib/router.js +++ b/lib/router.js @@ -2555,4 +2555,6 @@ router.get('/51voa/:channel', require('./routes/51voa/channel')); // zhuixinfan router.get('/zhuixinfan/list', require('./routes/zhuixinfan/list')); +//unit-image +router.get('/unit-image', require('./routes/unit-image/films')); module.exports = router; diff --git a/lib/routes/unit-image/films.js b/lib/routes/unit-image/films.js new file mode 100755 index 000000000..ef309c7b4 --- /dev/null +++ b/lib/routes/unit-image/films.js @@ -0,0 +1,140 @@ +const got = require('@/utils/got'); + +module.exports = async (ctx) => { + const response = await got({ + method: 'get', + url: `https://www.unit-image.fr/data/en/wp-json/unitimage/v1/films`, + }); + const data = response.data.slice(0, 5); + const list = data.content.posts; + const articledata = await Promise.all( + list.map(async (item) => { + const url = `https://www.unit-image.fr/data/en/wp-json/unitimage/v1${item.href}`; // 获取所有文章URL + const cache = await ctx.cache.get(url); // 这里是不是单单缓存 URL? + if (cache) { + return Promise.resolve(JSON.phrase(cache)); // 如果有 URL 的缓存,则返回 JSON.phrase 的数据 + } + + const response2 = await got({ + method: 'get', + url, + }); + // data2为每文章数据 + const data2 = response2.data; + + const infosdata = data2.infos || []; // 文章数据返回为data + const slideshowdata = data2.caseStudy.slideshow || []; + const storyboarddata = data2.caseStudy.storyboard || []; + const bhtsdata = data2.behindTheScene[0] || {}; + const compare0 = data2.caseStudy.compare[0] || {}; + const compare1 = data2.caseStudy.compare[1] || {}; + const infos = infosdata.map((item) => ({ + infolabel: item.label, // 项目信息 + infovalue: item.value, + })); + const images = slideshowdata.map((item) => ({ + image: item.img, // 图片组 + })); + const storyboard = storyboarddata.map((item) => ({ + storyboard0: item.items[0].img, // 故事板上 + storyboard1: item.items[1].img, // 故事板下 + })); + const video = { + // 主视频 + mp4: data2.video.mp4.url, + youtube: data2.video.youtube, + vimeo: data2.video.vimeo, + }; + const compare = { + // 对比视频 感谢@piggy_usera 教我用 ["值"] 选择带有横杠的值!但是不能一开始就const不知道为什么。 + compare0: compare0['video-mp4'], + compare1: compare1['video-mp4'], + }; + const bhts = { + // Behind The Scene + mp4: bhtsdata['video-mp4'], + youtube: bhtsdata['youtube-id'], + vimeo: bhtsdata['vimeo-id'], + }; + + const single = { + infos, + images, + storyboard, + video, + compare, + bhts, + }; + ctx.cache.set(url, JSON.stringify(single)); // 设定缓存为序列化文章数据 + return Promise.resolve(single); // 返回 articledata 为序列化文章数据。 + }) + ); + + ctx.state.data = { + // 源标题 + title: `Unit Image Films`, + // 源链接 + link: `https://www.unit-image.fr/films`, + // 源说明 + description: `Unit Images Films`, + // 遍历此前获取的数据 + item: list.map((item, index) => { + let content = ''; + const videostyle = `width="640" height="360"`; + const imgstyle = `style="max-width: 650px; height: auto; object-fit: contain; flex: 0 0 auto;"`; + + // 运用index数组ID来匹配文章ID!参考来自instagram! + // 项目信息 + if (articledata[index].infos) { + for (let i = 0; i < articledata[index].infos.length; i++) { + content += `${articledata[index].infos[i].infolabel}:${articledata[index].infos[i].infovalue}
`; + } + } + // 不同源主视频 + if (articledata[index].video.mp4) { + content += `
`; + } else if (articledata[index].video.vimeo) { + content += `
`; + } else if (articledata[index].video.youtube) { + content += `
`; + } + // 不同源幕后视频 + + if (articledata[index].bhts.mp4) { + content += `Behind The Scene:

`; + } else if (articledata[index].bhts.vimeo) { + content += `Behind The Scene:

`; + } else if (articledata[index].bhts.youtube) { + content += `Behind The Scene:

`; + } + + // 项目图片 + if (articledata[index].images) { + for (let p = 0; p < articledata[index].images.length; p++) { + content += `
`; + } + } + // 故事板 + if (articledata[index].storyboard.length > 0) { + let storyboard = ''; + for (let s = 0; s < articledata[index].storyboard.length; s++) { + storyboard += ``; + } + content += `${storyboard}
Storyboard

`; + } + + // 对比视频 + if (articledata[index].compare.compare0) { + content += `Compare:


`; + } + return { + title: `${item.title}`, + description: `${content}`, + link: `https://www.unit-image.fr${item.href}`, + pubDate: `${item.preview.mp4.date}`, + }; + }), + }; +}; +// 数据返回样式:http://www.unit-image.fr/data/en/wp-json/unitimage/v1/film/baldurs-gate-3-intro +// 非常感谢@xunco @johnson_Flex @lemonplusplus @yeFoenix @piggy_user