From 611db0d977f47d04c5cb20e11e8867159b00619c Mon Sep 17 00:00:00 2001 From: anian Date: Sat, 2 May 2026 19:50:07 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E8=A7=86=E9=A2=91=E5=B0=81?= =?UTF-8?q?=E9=9D=A2=E7=9A=84=E8=AE=B0=E5=BD=95=E4=B8=8E=E4=B8=8B=E8=BD=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../friends/reconciler/RssSyncReconciler.java | 36 ++++++++++++++++++- 1 file changed, 35 insertions(+), 1 deletion(-) diff --git a/src/main/java/la/moony/friends/reconciler/RssSyncReconciler.java b/src/main/java/la/moony/friends/reconciler/RssSyncReconciler.java index 3560292..f594391 100644 --- a/src/main/java/la/moony/friends/reconciler/RssSyncReconciler.java +++ b/src/main/java/la/moony/friends/reconciler/RssSyncReconciler.java @@ -70,6 +70,11 @@ public class RssSyncReconciler implements Reconciler, Pattern.CASE_INSENSITIVE ); + private static final Pattern VIDEO_POSTER_PATTERN = Pattern.compile( + "]*?poster\\s*=\\s*(['\"])(.*?)\\1[^>]*?>", + Pattern.CASE_INSENSITIVE + ); + private static final Pattern MW2000_IMAGE_FILE_PATTERN = Pattern.compile( ".*/mw2000/([^/?#]+)(?:[?#].*)?$", Pattern.CASE_INSENSITIVE @@ -238,7 +243,7 @@ public class RssSyncReconciler implements Reconciler, friendPostSpec.setLinkName(linkName); String description = friendPost.getSpec().getDescription(); - // 先提取图片文件名覆盖标题,再将 HTML 描述转换为纯文本 + // 先提取图片和视频 poster 文件名覆盖标题,再将 HTML 描述转换为纯文本 if (StringUtils.isNotEmpty(description)) { List imageFileNames = new ArrayList<>(); Matcher matcher = IMG_SRC_PATTERN.matcher(description); @@ -250,6 +255,15 @@ public class RssSyncReconciler implements Reconciler, } } + Matcher posterMatcher = VIDEO_POSTER_PATTERN.matcher(description); + while (posterMatcher.find()) { + String posterSrc = posterMatcher.group(2); + String posterFileName = extractFileNameFromUrl(posterSrc); + if (StringUtils.isNotBlank(posterFileName)) { + imageFileNames.add(posterFileName); + } + } + if (enableWeiboImageRecordAndDownload && !imageFileNames.isEmpty()) { String imageFiles = String.join(",", imageFileNames); friendPostSpec.setImageFiles(imageFiles); @@ -413,6 +427,26 @@ public class RssSyncReconciler implements Reconciler, return imageReferer.trim(); } + private String extractFileNameFromUrl(String url) { + if (StringUtils.isBlank(url)) { + return null; + } + String sanitizedUrl = url.trim(); + int queryIndex = sanitizedUrl.indexOf('?'); + if (queryIndex >= 0) { + sanitizedUrl = sanitizedUrl.substring(0, queryIndex); + } + int fragmentIndex = sanitizedUrl.indexOf('#'); + if (fragmentIndex >= 0) { + sanitizedUrl = sanitizedUrl.substring(0, fragmentIndex); + } + int lastSlashIndex = sanitizedUrl.lastIndexOf('/'); + if (lastSlashIndex < 0 || lastSlashIndex == sanitizedUrl.length() - 1) { + return null; + } + return sanitizedUrl.substring(lastSlashIndex + 1); + } + static int pageNullSafe(Integer page) { return ObjectUtils.defaultIfNull(page, 1); }