diff --git a/scripts/tender-fetcher/fetch-v1.2.js b/scripts/tender-fetcher/fetch-v1.2.js index 2c272e4..9189cf0 100755 --- a/scripts/tender-fetcher/fetch-v1.2.js +++ b/scripts/tender-fetcher/fetch-v1.2.js @@ -36,6 +36,8 @@ const TYPES = ['招采公告']; // 可选:留空则从上次抓取日期继续;有值则从指定日期开始 const START_DATE = ''; const END_DATE = new Date().toISOString().split('T')[0]; // 今天 +// 跨天首次运行(state 为空)时回溯 N 天, 避免错过前一天后半天发布的公告 +const BACKFILL_DAYS = 3; const OUTPUT_DIR = path.join(process.env.HOME, 'desktop/招标公告', END_DATE); const PDF_DIR = path.join(OUTPUT_DIR, 'pdf'); // PDF 附件 const HTML_DIR = path.join(OUTPUT_DIR, 'html'); // HTML 转换(待安装转换技能) @@ -346,12 +348,17 @@ async function main() { log(`========== 开始抓取: ${KEYWORD} ==========`); - // 确定起始日期(差量:上次运行日期 或 配置的 START_DATE) - const sinceDate = START_DATE || (state.lastRun ? state.lastRun.split('T')[0] : null) || END_DATE; + // 确定起始日期(差量:上次运行日期 或 配置的 START_DATE;跨天首次运行回溯 N 天) + const sinceDate = START_DATE || (state.lastRun ? state.lastRun.split('T')[0] : null) || (() => { + const d = new Date(Date.now() - BACKFILL_DAYS * 86400 * 1000); + return d.toISOString().split('T')[0]; + })(); if (START_DATE) { log(`指定日期范围: ${START_DATE} ~ ${END_DATE}`); } else if (state.lastRun) { log(`差量模式: 自 ${state.lastRun.substring(0, 10)} 以来新增`); + } else if (sinceDate !== END_DATE) { + log(`跨天补抓: ${sinceDate} ~ ${END_DATE}`); } else { log(`首次运行: ${sinceDate} ~ ${END_DATE}`); }