From 03c6f99d22682ab6c9869ffdae387b4dcb655be0 Mon Sep 17 00:00:00 2001 From: MisteryMonster <40703811+MisteryMonster@users.noreply.github.com> Date: Tue, 28 Apr 2020 15:50:30 +0800 Subject: [PATCH] feat: add blur studio (#4566) --- docs/design.md | 6 +++ docs/en/design.md | 6 +++ lib/router.js | 3 ++ lib/routes/blur-studio/index.js | 81 +++++++++++++++++++++++++++++++++ 4 files changed, 96 insertions(+) create mode 100755 lib/routes/blur-studio/index.js diff --git a/docs/design.md b/docs/design.md index 5c0d0ba073..ef1a32e3b1 100755 --- a/docs/design.md +++ b/docs/design.md @@ -4,6 +4,12 @@ pageClass: routes # 设计 +## Blur Studio + +### Works + + + ## Blow Studio ### 主页 diff --git a/docs/en/design.md b/docs/en/design.md index 5da0d0b856..37b95895c6 100755 --- a/docs/en/design.md +++ b/docs/en/design.md @@ -4,6 +4,12 @@ pageClass: routes # Design +## Blur Studio + +### Works + + + ## Blow Studio ### Home diff --git a/lib/router.js b/lib/router.js index 649c22581e..4d981475a8 100755 --- a/lib/router.js +++ b/lib/router.js @@ -2574,6 +2574,9 @@ router.get('/zhuixinfan/list', require('./routes/zhuixinfan/list')); // scoresaber router.get('/scoresaber/user/:id', require('./routes/scoresaber/user')); +// blur-studio +router.get('/blur-studio', require('./routes/blur-studio/index')); + // Sun-Creature router.get('/sun-creature', require('./routes/sun-creature/index')); diff --git a/lib/routes/blur-studio/index.js b/lib/routes/blur-studio/index.js new file mode 100755 index 0000000000..0744bbec41 --- /dev/null +++ b/lib/routes/blur-studio/index.js @@ -0,0 +1,81 @@ +const got = require('@/utils/got'); +const cheerio = require('cheerio'); + +module.exports = async (ctx) => { + const response = await got({ + method: 'get', + url: `http://blur.com`, + }); + const data = response.data; + const $ = cheerio.load(data); // 使用 cheerio 加载返回的 HTML + const list = $('.page-title a').get(); + const articledata = await Promise.all( + list.map(async (item) => { + const link = $(item).attr('href'); + const cache = await ctx.cache.get(link); + if (cache) { + return Promise.resolve(JSON.parse(cache)); + } + const response2 = await got({ + method: 'get', + url: link, + }); + + const articleHtml = response2.data; + const $2 = cheerio.load(articleHtml); + const imglist = $2('.gridded img').get(); + const videolist = $2('.gridded iframe').get(); + const img = imglist.map((item) => ({ + img: $2(item).attr('src'), + })); + const video = videolist.map((item) => ({ + video: $2(item).attr('src'), + })); + const single = { + mainvideo: $2('div.project-title').attr('data-video'), + describe: $2('p').text(), + title: $2('h1.page-title').text(), + client: $2('div.client').text(), + images: img, + video: video, + link: link, + }; + ctx.cache.set(link, JSON.stringify(single)); + return Promise.resolve(single); + }) + ); + + ctx.state.data = { + title: 'Blur Studio', + link: 'http://blur.com', + description: $('description').text(), + item: list.map((item, index) => { + const Num = /[0-9]+/; + let content = ''; + const videostyle = `width="640" height="360"`; + const imgstyle = `style="max-width: 650px; height: auto; object-fit: contain; flex: 0 0 auto;"`; + content += `Client:${articledata[index].client}
${articledata[index].describe}`; + if (Num.test(articledata[index].mainvideo)) { + content += `
`; + } else { + content += `
`; + } + if (articledata[index].images) { + for (let p = 0; p < articledata[index].images.length; p++) { + content += `
`; + } + } + if (articledata[index].video) { + for (let v = 0; v < articledata[index].video.length; v++) { + content += `
`; + } + } + + return { + title: `${articledata[index].title}`, + description: `${content}`, + link: `${articledata[index].link}`, + }; + }), + }; +};