diff --git a/lib/v2/creative-comic/book.js b/lib/v2/creative-comic/book.js index a14773b052cad9..66d933aceb62dd 100644 --- a/lib/v2/creative-comic/book.js +++ b/lib/v2/creative-comic/book.js @@ -6,47 +6,53 @@ const { getUuid, getBook, getChapter, getChapters, getImgEncrypted, getImgKey, d module.exports = async (ctx) => { const { id, coverOnly = 'true', quality = '1' } = ctx.params; const uuid = await getUuid(ctx.cache.tryGet); - let { data: book } = await getBook(id, uuid); - let { data: chapters } = await getChapters(id, uuid); - book = book.data; - chapters = chapters.data; + const { + data: { data: book }, + } = await getBook(id, uuid); + const { + data: { data: chapters }, + } = await getChapters(id, uuid); const items = await Promise.all( - chapters.chapters.map(async (c) => { - let pages; - if (coverOnly !== 'true' && coverOnly !== '1') { - let { data: chapter } = await getChapter(c.id, uuid); - chapter = chapter.data; + chapters.chapters + .sort((a, b) => b.idx - a.idx) + .slice(0, ctx.query.limit ? parseInt(ctx.query.limit, 10) : 3) + .map(async (c) => { + let pages; + if (coverOnly !== 'true' && coverOnly !== '1') { + const { + data: { data: chapter }, + } = await getChapter(c.id, uuid); - if (chapter.chapter.free_day === null || chapter.chapter.free_day === 0) { - pages = await Promise.all( - chapter.chapter.proportion.map(async (p) => { - let { data: imgKey } = await getImgKey(p.id, uuid); - imgKey = imgKey.data.key; + if (chapter.chapter.free_day === null || chapter.chapter.free_day === 0) { + pages = await Promise.all( + chapter.chapter.proportion.map(async (p) => { + let { data: imgKey } = await getImgKey(p.id, uuid); + imgKey = imgKey.data.key; - const realKey = getRealKey(imgKey); - const encrypted = await getImgEncrypted(p.id, quality); + const realKey = getRealKey(imgKey); + const encrypted = await getImgEncrypted(p.id, quality); - return ctx.cache.tryGet(`${siteHost}/fs/chapter_content/encrypt/${p.id}/${quality}`, () => decrypt(encrypted, realKey)); - }) - ); + return ctx.cache.tryGet(`${siteHost}/fs/chapter_content/encrypt/${p.id}/${quality}`, () => decrypt(encrypted, realKey)); + }) + ); + } } - } - return { - title: c.vol_name, - description: art(path.join(__dirname, 'templates/chapter.art'), { - chapter: c, - pages, - cover: c.image1, - }), - pubDate: parseDate(c.online_at), - updated: parseDate(c.updated_at), - link: `https://www.creative-comic.tw/reader_comic/${c.id}`, - author: book.author.map((author) => author.name).join(', '), - category: book.tags.map((tag) => tag.name), - }; - }) + return { + title: c.vol_name, + description: art(path.join(__dirname, 'templates/chapter.art'), { + chapter: c, + pages, + cover: c.image1, + }), + pubDate: parseDate(c.online_at), + updated: parseDate(c.updated_at), + link: `https://www.creative-comic.tw/reader_comic/${c.id}`, + author: book.author.map((author) => author.name).join(', '), + category: book.tags.map((tag) => tag.name), + }; + }) ); ctx.state.data = { diff --git a/lib/v2/creative-comic/utils.js b/lib/v2/creative-comic/utils.js index 6bed527c2f60fb..5d6bb66fc86c02 100644 --- a/lib/v2/creative-comic/utils.js +++ b/lib/v2/creative-comic/utils.js @@ -2,7 +2,6 @@ const got = require('@/utils/got'); const CryptoJS = require('crypto-js'); const apiHost = 'https://api.creative-comic.tw'; -const siteHost = 'https://www.creative-comic.tw'; const device = 'web_desktop'; const DEFAULT_TOKEN = 'freeforccc2020reading'; @@ -31,7 +30,7 @@ const getChapters = (bookId, uuid) => }); const getImgEncrypted = async (pageId, quality) => { - const { data: res } = await got(`${siteHost}/fs/chapter_content/encrypt/${pageId}/${quality}`, { + const { data: res } = await got(`https://storage.googleapis.com/ccc-www/fs/chapter_content/encrypt/${pageId}/${quality}`, { headers: { device, },