feat(dify): 合并爬虫1和3

This commit is contained in:
vivid 2025-07-20 11:54:42 +08:00
parent 1de71042f2
commit 736673ede8
6 changed files with 138 additions and 31 deletions

View File

@ -0,0 +1,12 @@
package com.zsc.edu.dify.common.strategy;
import com.alibaba.fastjson.JSONObject;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.zsc.edu.dify.modules.dify.dto.SpiderDto;
public interface SpiderStrategy {
JSONObject run(SpiderDto dto) throws JsonProcessingException;
String getUrl();
}

View File

@ -0,0 +1,35 @@
package com.zsc.edu.dify.common.strategy.factory;
import com.zsc.edu.dify.common.strategy.SpiderStrategy;
import com.zsc.edu.dify.exception.NotExistException;
import jakarta.annotation.PostConstruct;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Component
public class SpiderStrategyFactory {
@Autowired
private List<SpiderStrategy> spiderUrlStrategyList;
private final Map<String, SpiderStrategy> spiderUrlStrategyMap = new HashMap<>();
@PostConstruct
public void init() {
spiderUrlStrategyMap.put("1", spiderUrlStrategyList.get(0));
spiderUrlStrategyMap.put("3", spiderUrlStrategyList.get(1));
}
public SpiderStrategy getSpiderStrategy(String strategyName) {
SpiderStrategy spiderUrlStrategy = spiderUrlStrategyMap.get(strategyName);
if (spiderUrlStrategy == null) {
throw new NotExistException(SpiderStrategy.class);
}
return spiderUrlStrategy;
}
}

View File

@ -0,0 +1,43 @@
package com.zsc.edu.dify.common.strategy.impl;
import com.alibaba.fastjson.JSONObject;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.zsc.edu.dify.common.strategy.SpiderStrategy;
import com.zsc.edu.dify.modules.dify.dto.SpiderDto;
import jakarta.annotation.Resource;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.MediaType;
import org.springframework.stereotype.Component;
import org.springframework.web.reactive.function.client.WebClient;
@Component("spider1")
public class Spider1StrategyImpl implements SpiderStrategy {
@Value("${quanguo.url}")
private String SPIDER_URL;
@Value("${quanguo.api-key}")
private String API_KEY;
@Resource
private ObjectMapper objectMapper;
@Override
public JSONObject run(SpiderDto dto) throws JsonProcessingException {
dto.setLlm_api_key(API_KEY);
String body = objectMapper.writeValueAsString(dto);
return WebClient.create(SPIDER_URL).post().uri("/start_crawl")
.contentType(MediaType.APPLICATION_JSON)
.bodyValue(body)
.retrieve()
.bodyToMono(JSONObject.class)
.block();
}
@Override
public String getUrl() {
return SPIDER_URL;
}
}

View File

@ -0,0 +1,29 @@
package com.zsc.edu.dify.common.strategy.impl;
import com.alibaba.fastjson.JSONObject;
import com.zsc.edu.dify.common.strategy.SpiderStrategy;
import com.zsc.edu.dify.modules.dify.dto.SpiderDto;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.MediaType;
import org.springframework.stereotype.Component;
import org.springframework.web.reactive.function.client.WebClient;
@Component("spider3")
public class Spider3StrategyImpl implements SpiderStrategy {
@Value("${spider3.url}")
private String SPIDER_URL;
@Override
public JSONObject run(SpiderDto dto) {
return WebClient.create(SPIDER_URL).post().uri("/start_crawl")
.contentType(MediaType.APPLICATION_JSON)
.retrieve()
.bodyToMono(JSONObject.class)
.block();
}
@Override
public String getUrl() {
return SPIDER_URL;
}
}

View File

@ -2,63 +2,51 @@ package com.zsc.edu.dify.modules.dify.controller;
import com.alibaba.fastjson.JSONObject;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.zsc.edu.dify.common.strategy.SpiderStrategy;
import com.zsc.edu.dify.common.strategy.factory.SpiderStrategyFactory;
import com.zsc.edu.dify.modules.dify.dto.SpiderDto;
import jakarta.annotation.Resource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.reactive.function.client.WebClient;
import java.util.Collections;
@RestController
@RequestMapping("/api/spider")
public class SpiderController {
@Resource
private ObjectMapper objectMapper;
@Value("${quanguo.url}")
private String SPIDER_URL;
@Value("${quanguo.api-key}")
private String API_KEY;
@Autowired
private SpiderStrategyFactory spiderStrategyFactory;
@PostMapping("/run")
public JSONObject run(@RequestBody SpiderDto dto) throws JsonProcessingException {
dto.setLlm_api_key(API_KEY);
String body = objectMapper.writeValueAsString(dto);
return WebClient.create(SPIDER_URL).post().uri("/start_crawl")
.contentType(MediaType.APPLICATION_JSON)
.bodyValue(body)
.retrieve()
.bodyToMono(JSONObject.class)
.block();
public JSONObject run(@RequestBody(required = false) SpiderDto dto, @RequestParam String spiderId) throws JsonProcessingException {
SpiderStrategy spiderStrategy = spiderStrategyFactory.getSpiderStrategy(spiderId);
return spiderStrategy.run(dto);
}
@PostMapping("/status")
public JSONObject status() {
return WebClient.create(SPIDER_URL).post().uri("/crawl_status")
public JSONObject status(@RequestParam String spiderId) {
SpiderStrategy spiderStrategy = spiderStrategyFactory.getSpiderStrategy(spiderId);
String url = spiderStrategy.getUrl();
return WebClient.create(url).post().uri("/crawl_status")
.retrieve()
.bodyToMono(JSONObject.class)
.block();
}
@PostMapping("/logs")
public JSONObject logs() {
return WebClient.create(SPIDER_URL).post().uri("/logs")
public JSONObject logs(@RequestParam String spiderId) {
SpiderStrategy spiderStrategy = spiderStrategyFactory.getSpiderStrategy(spiderId);
String url = spiderStrategy.getUrl();
return WebClient.create(url).post().uri("/logs")
.retrieve()
.bodyToMono(JSONObject.class)
.block();
}
@PostMapping("/stop")
public JSONObject stop() {
return WebClient.create(SPIDER_URL).post().uri("/stop_crawl")
public JSONObject stop(@RequestParam String spiderId) {
SpiderStrategy spiderStrategy = spiderStrategyFactory.getSpiderStrategy(spiderId);
String url = spiderStrategy.getUrl();
return WebClient.create(url).post().uri("/stop_crawl")
.retrieve()
.bodyToMono(JSONObject.class)
.block();