diff --git a/config/config.setting b/config/config.setting index 4d573c9..10a12e9 100644 --- a/config/config.setting +++ b/config/config.setting @@ -3,6 +3,8 @@ refresh=5 ## 保存微博图片 saveWeiBoImages=true +## 保存微博视频 +saveWeiBoVideo=true ## 上传图片到AList uploadAList=false ## AList Url diff --git a/src/main/java/com/bcrjl/rss/common/constant/AppConstant.java b/src/main/java/com/bcrjl/rss/common/constant/AppConstant.java index ee3bcac..5022213 100644 --- a/src/main/java/com/bcrjl/rss/common/constant/AppConstant.java +++ b/src/main/java/com/bcrjl/rss/common/constant/AppConstant.java @@ -23,6 +23,7 @@ public interface AppConstant { */ String RSS_CONFIG_PATH = System.getProperty("user.dir") + "/config/data.json"; String IMAGES_PATH = System.getProperty("user.dir") + "/images/"; + String VIDEO_PATH = System.getProperty("user.dir") + "/video/"; String SET_SYSTEM = "system"; String SET_MAIL = "mail"; @@ -36,6 +37,11 @@ public interface AppConstant { */ String SAVE_WEIBO_IMAGES = "saveWeiBoImages"; + /** + * 保存微博视频 + */ + String SAVE_WEIBO_VIDEO = "saveWeiBoVideo"; + /** * 上传图片到AList */ diff --git a/src/main/java/com/bcrjl/rss/common/util/HtmlUtils.java b/src/main/java/com/bcrjl/rss/common/util/HtmlUtils.java index 82b2409..dd30d9b 100644 --- a/src/main/java/com/bcrjl/rss/common/util/HtmlUtils.java +++ b/src/main/java/com/bcrjl/rss/common/util/HtmlUtils.java @@ -79,6 +79,19 @@ public class HtmlUtils { } } + public static HttpResponse getWeiBoVideoHttpRequest(String url) { + try { + HttpRequest request = HttpRequest.get(url) + .header(Header.REFERER, "https://weibo.com/") + .header(Header.USER_AGENT, USER_AGENT) + .timeout(20000); + return request.executeAsync(); + } catch (Exception e) { + log.error("获取视频数据异常:", e); + return null; + } + } + /** * 根据正则获取html中的内容 diff --git a/src/main/java/com/bcrjl/rss/job/FileMonitor.java b/src/main/java/com/bcrjl/rss/job/FileMonitor.java index ef64168..5c12198 100644 --- a/src/main/java/com/bcrjl/rss/job/FileMonitor.java +++ b/src/main/java/com/bcrjl/rss/job/FileMonitor.java @@ -40,7 +40,9 @@ public class FileMonitor { "## 配置订阅频率\n" + "refresh = 5\n" + "## 保存微博图片\n" + - "saveWeiBoImages=false\n" + + "saveWeiBoImages=false" + + "## 保存微博视频\n" + + "saveWeiBoVideo=true\n" + "## 上传图片到AList\n" + "uploadAList=false\n" + "## AList Url\n" + diff --git a/src/main/java/com/bcrjl/rss/job/RssJob.java b/src/main/java/com/bcrjl/rss/job/RssJob.java index a288080..ead0d6d 100644 --- a/src/main/java/com/bcrjl/rss/job/RssJob.java +++ b/src/main/java/com/bcrjl/rss/job/RssJob.java @@ -114,18 +114,16 @@ public class RssJob { private void saveWeiBoImagesOrUpdateAList(List list) { Setting setting = new Setting(CONFIG_PATH, CharsetUtil.CHARSET_UTF_8, true); Setting systemSetting = setting.getSetting(SET_SYSTEM); - Boolean saveImages = Boolean.valueOf(systemSetting.get(SAVE_WEIBO_IMAGES)); - Boolean uploadAList = Boolean.valueOf(systemSetting.get(UPLOAD_ALIST)); + boolean saveImages = Boolean.parseBoolean(systemSetting.get(SAVE_WEIBO_IMAGES)); + boolean saveVideo = Boolean.valueOf(systemSetting.get(SAVE_WEIBO_VIDEO)); + boolean uploadAList = Boolean.valueOf(systemSetting.get(UPLOAD_ALIST)); if (saveImages) { // 保存图片 list.forEach(obj -> { List imgList = HtmlUtils.extractImageUrls(obj.getDescription()); imgList.forEach(imgObj -> { if (imgObj.contains("sinaimg") && !imgObj.contains("timeline_card") && !imgObj.contains("qixi2018")) { - int lastSlashIndex = imgObj.lastIndexOf('/'); - // 如果找到了斜杠,就从斜杠后面截取字符串 - String fileName = imgObj.substring(lastSlashIndex + 1); - //log.info("微博图片文件名:{}", fileName); + String fileName = HtmlUtils.getFileName(imgObj); HttpResponse weiBoImagesHttpRequest = HtmlUtils.getWeiBoImagesHttpRequest(fileName); byte[] bytes = weiBoImagesHttpRequest.bodyBytes(); FileUtil.writeBytes(bytes, new File(IMAGES_PATH + fileName)); @@ -136,6 +134,23 @@ public class RssJob { }); }); } + if(saveVideo){ + // 保存视频 + list.forEach(obj -> { + List videoList = HtmlUtils.extractVideoUrls(obj.getDescription()); + if(CollUtil.isNotEmpty(videoList)){ + videoList.forEach(videoObj -> { + String fileName = HtmlUtils.getFileName(videoObj); + HttpResponse weiBoImagesHttpRequest = HtmlUtils.getWeiBoVideoHttpRequest(videoObj); + byte[] bytes = weiBoImagesHttpRequest.bodyBytes(); + FileUtil.writeBytes(bytes, new File(VIDEO_PATH + fileName)); + if (uploadAList) { + AListUtils.uploadFile(bytes, fileName); + } + }); + } + }); + } } }