mirror of
https://github.com/201206030/novel.git
synced 2025-04-27 07:30:50 +00:00
增加网络图片本地化开关,可选择使用网络图片还是本地图片
This commit is contained in:
parent
daab096d9f
commit
becbb86179
@ -1,5 +1,6 @@
|
|||||||
package xyz.zinglizingli.common.config;
|
package xyz.zinglizingli.common.config;
|
||||||
|
|
||||||
|
import org.springframework.beans.factory.annotation.Value;
|
||||||
import org.springframework.boot.web.servlet.FilterRegistrationBean;
|
import org.springframework.boot.web.servlet.FilterRegistrationBean;
|
||||||
import org.springframework.context.annotation.Bean;
|
import org.springframework.context.annotation.Bean;
|
||||||
import org.springframework.context.annotation.Configuration;
|
import org.springframework.context.annotation.Configuration;
|
||||||
@ -8,11 +9,15 @@ import xyz.zinglizingli.common.filter.SearchFilter;
|
|||||||
@Configuration
|
@Configuration
|
||||||
public class FilterConfig{
|
public class FilterConfig{
|
||||||
|
|
||||||
|
@Value("${pic.save.path}")
|
||||||
|
private String picSavePath;
|
||||||
|
|
||||||
@Bean
|
@Bean
|
||||||
public FilterRegistrationBean filterRegist() {
|
public FilterRegistrationBean filterRegist() {
|
||||||
FilterRegistrationBean frBean = new FilterRegistrationBean();
|
FilterRegistrationBean frBean = new FilterRegistrationBean();
|
||||||
frBean.setFilter(new SearchFilter());
|
frBean.setFilter(new SearchFilter());
|
||||||
frBean.addUrlPatterns("/*");
|
frBean.addUrlPatterns("/*");
|
||||||
|
frBean.addInitParameter("picSavePath",picSavePath);
|
||||||
return frBean;
|
return frBean;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3,6 +3,7 @@ package xyz.zinglizingli.common.filter;
|
|||||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
import org.springframework.beans.factory.annotation.Value;
|
||||||
import org.springframework.core.io.Resource;
|
import org.springframework.core.io.Resource;
|
||||||
import org.springframework.http.*;
|
import org.springframework.http.*;
|
||||||
import org.springframework.util.LinkedMultiValueMap;
|
import org.springframework.util.LinkedMultiValueMap;
|
||||||
@ -38,6 +39,9 @@ public class SearchFilter implements Filter {
|
|||||||
|
|
||||||
private RestTemplate restTemplate;
|
private RestTemplate restTemplate;
|
||||||
|
|
||||||
|
private String picSavePath;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
private final String SUANWEI_BOOK_REGEX = "<a\\s+href=\"/(\\d+_\\d+)/\">";
|
private final String SUANWEI_BOOK_REGEX = "<a\\s+href=\"/(\\d+_\\d+)/\">";
|
||||||
private final String SUANWEI_BOOK_HTML_REGEX = "/\\d+_\\d+\\.html";
|
private final String SUANWEI_BOOK_HTML_REGEX = "/\\d+_\\d+\\.html";
|
||||||
@ -48,6 +52,7 @@ public class SearchFilter implements Filter {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void init(FilterConfig filterConfig) throws ServletException {
|
public void init(FilterConfig filterConfig) throws ServletException {
|
||||||
|
picSavePath = filterConfig.getInitParameter("picSavePath");
|
||||||
picPostFix = new ArrayList<>();
|
picPostFix = new ArrayList<>();
|
||||||
picPostFix.add("jpg");
|
picPostFix.add("jpg");
|
||||||
picPostFix.add("pcx");
|
picPostFix.add("pcx");
|
||||||
@ -97,6 +102,19 @@ public class SearchFilter implements Filter {
|
|||||||
|
|
||||||
try {
|
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/")) {
|
if (!requestURL.contains("/manhua/")) {
|
||||||
filterChain.doFilter(req, resp);
|
filterChain.doFilter(req, resp);
|
||||||
return;
|
return;
|
||||||
@ -175,7 +193,6 @@ public class SearchFilter implements Filter {
|
|||||||
String realUrl = "https://images.dmzj.com/" + requestURI.substring(15);
|
String realUrl = "https://images.dmzj.com/" + requestURI.substring(15);
|
||||||
ResponseEntity<Resource> resEntity = restTemplate.exchange(realUrl, HttpMethod.GET, requestEntity, Resource.class);
|
ResponseEntity<Resource> resEntity = restTemplate.exchange(realUrl, HttpMethod.GET, requestEntity, Resource.class);
|
||||||
InputStream input = resEntity.getBody().getInputStream();
|
InputStream input = resEntity.getBody().getInputStream();
|
||||||
OutputStream out = resp.getOutputStream();
|
|
||||||
byte[] b = new byte[4096];
|
byte[] b = new byte[4096];
|
||||||
for (int n; (n = input.read(b)) != -1;) {
|
for (int n; (n = input.read(b)) != -1;) {
|
||||||
out.write(b, 0, n);
|
out.write(b, 0, n);
|
||||||
|
@ -1,11 +1,12 @@
|
|||||||
package xyz.zinglizingli.common.schedule;
|
package xyz.zinglizingli.common.schedule;
|
||||||
|
|
||||||
|
import org.apache.commons.lang3.StringUtils;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.beans.factory.annotation.Value;
|
import org.springframework.beans.factory.annotation.Value;
|
||||||
import org.springframework.http.HttpStatus;
|
import org.springframework.core.io.Resource;
|
||||||
import org.springframework.http.ResponseEntity;
|
import org.springframework.http.*;
|
||||||
import org.springframework.scheduling.annotation.Scheduled;
|
import org.springframework.scheduling.annotation.Scheduled;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import org.springframework.web.client.RestTemplate;
|
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.po.BookIndex;
|
||||||
import xyz.zinglizingli.books.service.BookService;
|
import xyz.zinglizingli.books.service.BookService;
|
||||||
import xyz.zinglizingli.books.util.ExcutorUtils;
|
import xyz.zinglizingli.books.util.ExcutorUtils;
|
||||||
|
import xyz.zinglizingli.books.util.UUIDUtils;
|
||||||
import xyz.zinglizingli.common.utils.RestTemplateUtil;
|
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.ParseException;
|
||||||
import java.text.SimpleDateFormat;
|
import java.text.SimpleDateFormat;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
@ -41,6 +47,13 @@ public class CrawlBooksSchedule {
|
|||||||
private Byte websiteType;
|
private Byte websiteType;
|
||||||
|
|
||||||
|
|
||||||
|
@Value("${pic.save.type}")
|
||||||
|
private Byte picSaveType;
|
||||||
|
|
||||||
|
@Value("${pic.save.path}")
|
||||||
|
private String picSavePath;
|
||||||
|
|
||||||
|
|
||||||
private boolean isExcuting = false;
|
private boolean isExcuting = false;
|
||||||
|
|
||||||
|
|
||||||
@ -152,6 +165,30 @@ public class CrawlBooksSchedule {
|
|||||||
if (picMather.find()) {
|
if (picMather.find()) {
|
||||||
String picSrc = picMather.group(1);
|
String picSrc = picMather.group(1);
|
||||||
|
|
||||||
|
if(picSaveType == 2 && StringUtils.isNotBlank(picSrc)){
|
||||||
|
restTemplate = RestTemplateUtil.getInstance("iso-8859-1");
|
||||||
|
HttpHeaders headers = new HttpHeaders();
|
||||||
|
HttpEntity<String> requestEntity = new HttpEntity<>(null, headers);
|
||||||
|
ResponseEntity<Resource> 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\">([^<]+)</p>");
|
Pattern descPatten = Pattern.compile("class=\"review\">([^<]+)</p>");
|
||||||
Matcher descMatch = descPatten.matcher(body);
|
Matcher descMatch = descPatten.matcher(body);
|
||||||
if (descMatch.find()) {
|
if (descMatch.find()) {
|
||||||
@ -490,6 +527,31 @@ public class CrawlBooksSchedule {
|
|||||||
if (picMather.find()) {
|
if (picMather.find()) {
|
||||||
String picSrc = picMather.group(1);
|
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<String> requestEntity = new HttpEntity<>(null, headers);
|
||||||
|
ResponseEntity<Resource> 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\">([^<]+)</p>");
|
Pattern descPatten = Pattern.compile("class=\"review\">([^<]+)</p>");
|
||||||
Matcher descMatch = descPatten.matcher(body);
|
Matcher descMatch = descPatten.matcher(body);
|
||||||
if (descMatch.find()) {
|
if (descMatch.find()) {
|
||||||
|
@ -4,8 +4,8 @@ server:
|
|||||||
spring:
|
spring:
|
||||||
datasource:
|
datasource:
|
||||||
url: jdbc:mysql://127.0.0.1:3306/books?useUnicode=true&characterEncoding=utf-8&useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai
|
url: jdbc:mysql://127.0.0.1:3306/books?useUnicode=true&characterEncoding=utf-8&useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai
|
||||||
username: books
|
username: root
|
||||||
password: books
|
password: test123456
|
||||||
# url: jdbc:mysql://127.0.0.1:3306/books?useUnicode=true&characterEncoding=utf8&useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai
|
# url: jdbc:mysql://127.0.0.1:3306/books?useUnicode=true&characterEncoding=utf8&useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai
|
||||||
# username: root
|
# username: root
|
||||||
# password: test123456
|
# password: test123456
|
||||||
@ -71,6 +71,15 @@ crawl:
|
|||||||
website:
|
website:
|
||||||
type: 2
|
type: 2
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
pic:
|
||||||
|
save:
|
||||||
|
type: 1 #图片保存方式, 1不保存,使用网络图片 ,2本地保存
|
||||||
|
path: d:/pic #图片保存路径
|
||||||
|
|
||||||
|
|
||||||
search:
|
search:
|
||||||
schedule:
|
schedule:
|
||||||
isRunExcute: 0;
|
isRunExcute: 0;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user