From a434c9a50b60a1c4a1b99f28eee7b5fbc66ce016 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=98=BF=E5=8D=A1=E7=90=B3?= Date: Sun, 12 May 2019 15:02:54 +0800 Subject: [PATCH] =?UTF-8?q?refactor:=20bangumi=20=E6=AF=8F=E6=97=A5?= =?UTF-8?q?=E6=94=BE=E9=80=81=E6=B7=BB=E5=8A=A0id=20=E4=BF=AE=E6=94=B9?= =?UTF-8?q?=E7=BC=93=E5=AD=98=E6=97=B6=E9=97=B4=20(#2097)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * update: bangumi 每日放送添加id 修改缓存时间 * update: 恢复计算今日的方法 --- lib/routes/bangumi/calendar/_base.js | 16 +++++++++++++++- lib/routes/bangumi/calendar/today.js | 15 +++++++++++---- 2 files changed, 26 insertions(+), 5 deletions(-) diff --git a/lib/routes/bangumi/calendar/_base.js b/lib/routes/bangumi/calendar/_base.js index 06f4040f1..4af04917f 100644 --- a/lib/routes/bangumi/calendar/_base.js +++ b/lib/routes/bangumi/calendar/_base.js @@ -1,5 +1,19 @@ const axios = require('../../../utils/axios'); +/** @type { (timezoneOffset: number) => Date } */ +const tomorrowMidnight = (timezoneOffset) => { + const result = new Date(Date.now()); + const localHour = result.getHours() + timezoneOffset; + if (localHour < 0) { + result.setUTCHours(-timezoneOffset, 0, 0, 0); + } else if (localHour < 24) { + result.setUTCHours(24 - timezoneOffset, 0, 0, 0); + } else { + result.setUTCHours(48 - timezoneOffset, 0, 0, 0); + } + return result; +}; + module.exports = async (ctx) => { const bgmCalendarUrl = 'https://api.bgm.tv/calendar'; const bgmDataUrl = 'https://cdn.jsdelivr.net/npm/bangumi-data/dist/data.json'; @@ -33,7 +47,7 @@ module.exports = async (ctx) => { data.items = items; } - ctx.cache.set(url[i], JSON.stringify(data), 86400); + ctx.cache.set(url[i], JSON.stringify(data), tomorrowMidnight(8).getTime() - Date.now()); return Promise.resolve(data); } }) diff --git a/lib/routes/bangumi/calendar/today.js b/lib/routes/bangumi/calendar/today.js index f6efaecac..e3e0ef805 100644 --- a/lib/routes/bangumi/calendar/today.js +++ b/lib/routes/bangumi/calendar/today.js @@ -4,10 +4,12 @@ module.exports = async (ctx) => { const [list, data] = await getData(ctx); const siteMeta = data.siteMeta; - const now = new Date(Date.now()); + const today = new Date(Date.now()); - now.setHours(now.getHours() + 9); - const day = now.getUTCDay(); + // 将 UTC 时间向前移动9小时,即可在数值上表示东京时间 + today.setUTCHours(today.getUTCHours() + 9); + + const day = today.getUTCDay(); const todayList = list.filter((l) => l.weekday.id % 7 === day)[0]; @@ -33,6 +35,9 @@ module.exports = async (ctx) => { updated.setMinutes(begin.getMinutes()); updated.setSeconds(begin.getSeconds()); + const link = `http://bangumi.tv/subject/${bgm.bgm_id}`; + const id = `${link}#${new Intl.DateTimeFormat('zh-CN').format(updated)}`; + const image = ``; const html = image + @@ -51,6 +56,8 @@ module.exports = async (ctx) => { ''; return { + id, + guid: id, title: [ bgm.title, Object.values(bgm.titleTranslate) @@ -59,7 +66,7 @@ module.exports = async (ctx) => { ].join('|'), updated: updated.toISOString(), pubDate: updated.toUTCString(), - link: `http://bangumi.tv/subject/${bgm.bgm_id}`, + link, description: html, content: { html }, };