diff --git a/novel-front/src/main/java/xyz/zinglizingli/common/config/FilterConfig.java b/novel-front/src/main/java/xyz/zinglizingli/common/config/FilterConfig.java index 5eb3c0d..65cc8f9 100644 --- a/novel-front/src/main/java/xyz/zinglizingli/common/config/FilterConfig.java +++ b/novel-front/src/main/java/xyz/zinglizingli/common/config/FilterConfig.java @@ -1,5 +1,6 @@ package xyz.zinglizingli.common.config; +import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.web.servlet.FilterRegistrationBean; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @@ -8,11 +9,15 @@ import xyz.zinglizingli.common.filter.SearchFilter; @Configuration public class FilterConfig{ + @Value("${pic.save.path}") + private String picSavePath; + @Bean public FilterRegistrationBean filterRegist() { FilterRegistrationBean frBean = new FilterRegistrationBean(); frBean.setFilter(new SearchFilter()); frBean.addUrlPatterns("/*"); + frBean.addInitParameter("picSavePath",picSavePath); return frBean; } diff --git a/novel-front/src/main/java/xyz/zinglizingli/common/filter/SearchFilter.java b/novel-front/src/main/java/xyz/zinglizingli/common/filter/SearchFilter.java index 6e8057d..449b161 100644 --- a/novel-front/src/main/java/xyz/zinglizingli/common/filter/SearchFilter.java +++ b/novel-front/src/main/java/xyz/zinglizingli/common/filter/SearchFilter.java @@ -3,6 +3,7 @@ package xyz.zinglizingli.common.filter; import com.fasterxml.jackson.databind.ObjectMapper; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Value; import org.springframework.core.io.Resource; import org.springframework.http.*; import org.springframework.util.LinkedMultiValueMap; @@ -38,6 +39,9 @@ public class SearchFilter implements Filter { private RestTemplate restTemplate; + private String picSavePath; + + private final String SUANWEI_BOOK_REGEX = ""; private final String SUANWEI_BOOK_HTML_REGEX = "/\\d+_\\d+\\.html"; @@ -48,6 +52,7 @@ public class SearchFilter implements Filter { @Override public void init(FilterConfig filterConfig) throws ServletException { + picSavePath = filterConfig.getInitParameter("picSavePath"); picPostFix = new ArrayList<>(); picPostFix.add("jpg"); picPostFix.add("pcx"); @@ -97,6 +102,19 @@ public class SearchFilter implements Filter { try { + OutputStream out = resp.getOutputStream(); + if(requestURI.contains("/localPic/")){ + InputStream input = new FileInputStream(new File(picSavePath+requestURI)); + byte[] b = new byte[4096]; + for (int n; (n = input.read(b)) != -1;) { + out.write(b, 0, n); + } + input.close(); + out.close(); + return; + + } + if (!requestURL.contains("/manhua/")) { filterChain.doFilter(req, resp); return; @@ -175,7 +193,6 @@ public class SearchFilter implements Filter { String realUrl = "https://images.dmzj.com/" + requestURI.substring(15); ResponseEntity resEntity = restTemplate.exchange(realUrl, HttpMethod.GET, requestEntity, Resource.class); InputStream input = resEntity.getBody().getInputStream(); - OutputStream out = resp.getOutputStream(); byte[] b = new byte[4096]; for (int n; (n = input.read(b)) != -1;) { out.write(b, 0, n); diff --git a/novel-front/src/main/java/xyz/zinglizingli/common/schedule/CrawlBooksSchedule.java b/novel-front/src/main/java/xyz/zinglizingli/common/schedule/CrawlBooksSchedule.java index 51cce0c..2191745 100644 --- a/novel-front/src/main/java/xyz/zinglizingli/common/schedule/CrawlBooksSchedule.java +++ b/novel-front/src/main/java/xyz/zinglizingli/common/schedule/CrawlBooksSchedule.java @@ -1,11 +1,12 @@ package xyz.zinglizingli.common.schedule; +import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; -import org.springframework.http.HttpStatus; -import org.springframework.http.ResponseEntity; +import org.springframework.core.io.Resource; +import org.springframework.http.*; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Service; import org.springframework.web.client.RestTemplate; @@ -14,8 +15,13 @@ import xyz.zinglizingli.books.po.BookContent; import xyz.zinglizingli.books.po.BookIndex; import xyz.zinglizingli.books.service.BookService; import xyz.zinglizingli.books.util.ExcutorUtils; +import xyz.zinglizingli.books.util.UUIDUtils; import xyz.zinglizingli.common.utils.RestTemplateUtil; +import java.io.File; +import java.io.FileOutputStream; +import java.io.InputStream; +import java.io.OutputStream; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.*; @@ -41,6 +47,13 @@ public class CrawlBooksSchedule { private Byte websiteType; + @Value("${pic.save.type}") + private Byte picSaveType; + + @Value("${pic.save.path}") + private String picSavePath; + + private boolean isExcuting = false; @@ -152,6 +165,30 @@ public class CrawlBooksSchedule { if (picMather.find()) { String picSrc = picMather.group(1); + if(picSaveType == 2 && StringUtils.isNotBlank(picSrc)){ + restTemplate = RestTemplateUtil.getInstance("iso-8859-1"); + HttpHeaders headers = new HttpHeaders(); + HttpEntity requestEntity = new HttpEntity<>(null, headers); + ResponseEntity resEntity = restTemplate.exchange(picSrc, HttpMethod.GET, requestEntity, Resource.class); + InputStream input = resEntity.getBody().getInputStream(); + picSrc = "/localPic/" + updateTimeStr.substring(0,4)+"/"+updateTimeStr.substring(5,7)+"/"+updateTimeStr.substring(8,10) + + UUIDUtils.getUUID32() + + picSrc.substring(picSrc.lastIndexOf(".")); + File picFile = new File(picSavePath+picSrc); + File parentFile = picFile.getParentFile(); + if(!parentFile.exists()){ + parentFile.mkdirs(); + } + OutputStream out = new FileOutputStream(picFile); + byte[] b = new byte[4096]; + for (int n; (n = input.read(b)) != -1;) { + out.write(b, 0, n); + } + out.close(); + input.close(); + + } + Pattern descPatten = Pattern.compile("class=\"review\">([^<]+)

"); Matcher descMatch = descPatten.matcher(body); if (descMatch.find()) { @@ -490,6 +527,31 @@ public class CrawlBooksSchedule { if (picMather.find()) { String picSrc = picMather.group(1); + if(picSaveType == 2 && StringUtils.isNotBlank(picSrc)){ + restTemplate = RestTemplateUtil.getInstance("iso-8859-1"); + HttpHeaders headers = new HttpHeaders(); + headers.add("Referer","https://www.biqudao.com"); + HttpEntity requestEntity = new HttpEntity<>(null, headers); + ResponseEntity resEntity = restTemplate.exchange(picSrc, HttpMethod.GET, requestEntity, Resource.class); + InputStream input = resEntity.getBody().getInputStream(); + picSrc = "/localPic/" + updateTimeStr.substring(0,2)+"/"+updateTimeStr.substring(3,5)+"/"+updateTimeStr.substring(6,8) + + UUIDUtils.getUUID32() + + picSrc.substring(picSrc.lastIndexOf(".")); + File picFile = new File(picSavePath+picSrc); + File parentFile = picFile.getParentFile(); + if(!parentFile.exists()){ + parentFile.mkdirs(); + } + OutputStream out = new FileOutputStream(picFile); + byte[] b = new byte[4096]; + for (int n; (n = input.read(b)) != -1;) { + out.write(b, 0, n); + } + out.close(); + input.close(); + + } + Pattern descPatten = Pattern.compile("class=\"review\">([^<]+)

"); Matcher descMatch = descPatten.matcher(body); if (descMatch.find()) { diff --git a/novel-front/src/main/resources/application.yml b/novel-front/src/main/resources/application.yml index 67c58de..d31e0e6 100644 --- a/novel-front/src/main/resources/application.yml +++ b/novel-front/src/main/resources/application.yml @@ -4,8 +4,8 @@ server: spring: datasource: url: jdbc:mysql://127.0.0.1:3306/books?useUnicode=true&characterEncoding=utf-8&useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai - username: books - password: books + username: root + password: test123456 # url: jdbc:mysql://127.0.0.1:3306/books?useUnicode=true&characterEncoding=utf8&useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai # username: root # password: test123456 @@ -71,6 +71,15 @@ crawl: website: type: 2 + + + +pic: + save: + type: 1 #图片保存方式, 1不保存,使用网络图片 ,2本地保存 + path: d:/pic #图片保存路径 + + search: schedule: isRunExcute: 0;