fix(wechat): add fallback trim profiles for 20k content limit

This commit is contained in:
john
2026-09-10 09:28:04 +08:00
parent 257edb4917
commit 84b38f397e
+37 -4
View File
@@ -1,7 +1,7 @@
import { extractPageTitle } from './wechat/verify/share-preview-repair.mjs'; import { extractPageTitle } from './wechat/verify/share-preview-repair.mjs';
const MAX_WECHAT_CONTENT_CHARS = 20000; const MAX_WECHAT_CONTENT_CHARS = 20000;
const MAX_WECHAT_CONTENT_TARGET_CHARS = 19800; const MAX_WECHAT_CONTENT_TARGET_CHARS = 19600;
const CARD_VARIANTS = { const CARD_VARIANTS = {
'highlight-box': { 'highlight-box': {
@@ -221,6 +221,33 @@ const TRIM_PROFILES = [
}, },
]; ];
function buildFallbackTrimProfiles() {
const profiles = [];
for (let headlines = 3; headlines >= 2; headlines -= 1) {
for (let maxBodyChars = 56; maxBodyChars >= 24; maxBodyChars -= 8) {
for (const skipWeather of [false, true]) {
profiles.push({
skipHistory: true,
skipWeather,
sectionCardLimits: {
headlines,
world: 2,
domestic: 2,
google: 1,
finance: 2,
tech: 2,
sports: 1,
technews: 0,
hot: 0,
},
maxBodyChars,
});
}
}
}
return profiles;
}
function resolveSectionCardLimit(section, sectionCardLimits) { function resolveSectionCardLimit(section, sectionCardLimits) {
if (!sectionCardLimits) return null; if (!sectionCardLimits) return null;
return sectionCardLimits[section.id] ?? 3; return sectionCardLimits[section.id] ?? 3;
@@ -238,7 +265,9 @@ function buildWechatInlineContent(html, { publicUrl = '', trimProfile = TRIM_PRO
continue; continue;
} }
if (section.id === 'weather') { if (section.id === 'weather') {
parts.push(renderWeatherSection(section.html)); if (!trimProfile.skipWeather) {
parts.push(renderWeatherSection(section.html));
}
continue; continue;
} }
parts.push(renderGenericSection(section.html, { parts.push(renderGenericSection(section.html, {
@@ -318,10 +347,13 @@ export function convertDailyNewsHtmlToWechatInlineArticle(html, { publicUrl = ''
const digest = (extractMetaDescription(html) || title).slice(0, 120); const digest = (extractMetaDescription(html) || title).slice(0, 120);
let built = null; let built = null;
let trimLevel = 0; let trimLevel = 0;
let usedFallback = false;
const allProfiles = [...TRIM_PROFILES, ...buildFallbackTrimProfiles()];
for (const trimProfile of TRIM_PROFILES) { for (const [index, trimProfile] of allProfiles.entries()) {
built = buildWechatInlineContent(html, { publicUrl, trimProfile }); built = buildWechatInlineContent(html, { publicUrl, trimProfile });
trimLevel = TRIM_PROFILES.indexOf(trimProfile); trimLevel = index;
usedFallback = index >= TRIM_PROFILES.length;
if (built.content.length <= MAX_WECHAT_CONTENT_TARGET_CHARS) { if (built.content.length <= MAX_WECHAT_CONTENT_TARGET_CHARS) {
break; break;
} }
@@ -344,6 +376,7 @@ export function convertDailyNewsHtmlToWechatInlineArticle(html, { publicUrl = ''
renderedSectionCount: built.renderedSectionCount, renderedSectionCount: built.renderedSectionCount,
trimLevel, trimLevel,
trimmed: trimLevel > 0, trimmed: trimLevel > 0,
usedFallbackTrim: usedFallback,
}; };
} }