From cf269162bbf669a9562fc969bf20660ad83282c2 Mon Sep 17 00:00:00 2001 From: SunWenxuan <3148628230@qq.com> Date: Mon, 18 May 2026 00:05:48 +0800 Subject: [PATCH] =?UTF-8?q?=E4=B8=8A=E4=BC=A0=E6=96=87=E4=BB=B6=E8=87=B3?= =?UTF-8?q?=20'w10'?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- w10/AnalyzeCommand.java | 71 +++++++++++++++++++++++++++++++++++++ w10/ArtcleRespository.java | Bin 0 -> 1024 bytes w10/CrawlStrategy.java | 14 ++++++++ 3 files changed, 85 insertions(+) create mode 100644 w10/AnalyzeCommand.java create mode 100644 w10/ArtcleRespository.java create mode 100644 w10/CrawlStrategy.java diff --git a/w10/AnalyzeCommand.java b/w10/AnalyzeCommand.java new file mode 100644 index 0000000..70c24c0 --- /dev/null +++ b/w10/AnalyzeCommand.java @@ -0,0 +1,71 @@ + + + +import com.example.datacollect.model.Article; +import com.example.datacollect.repository.ArticleRepository; +import com.example.datacollect.strategy.CrawlStrategy; +import com.example.datacollect.strategy.StrategyFactory; +import com.example.datacollect.view.ConsoleView; +import org.jsoup.Jsoup; +import org.jsoup.nodes.Document; + +import java.util.List; + +public class AnalyzeCommand implements Command { + private final ConsoleView view; + private final StrategyFactory strategyFactory; + + public AnalyzeCommand(ConsoleView view, StrategyFactory strategyFactory) { + this.view = view; + this.strategyFactory = strategyFactory; + } + + @Override + public String getName() { + return "analyze"; + } + + @Override + public void execute(String[] args, ArticleRepository repository) { + if (args.length < 2) { + view.printError("Usage: analyze "); + return; + } + String url = args[1]; + + CrawlStrategy strategy = strategyFactory.getStrategy(url); + if (strategy == null) { + view.printError("No strategy found for: " + url); + return; + } + + try { + view.printInfo("Analyzing: " + url); + view.printInfo("Using strategy: " + strategy.getClass().getSimpleName()); + + Document doc = Jsoup.connect(url).get(); + List
articles = strategy.parse(url, doc); + + view.printSuccess("=== Analysis Statistics ==="); + view.printSuccess("URL: " + url); + view.printSuccess("Strategy: " + strategy.getClass().getSimpleName()); + view.printSuccess("Articles found: " + articles.size()); + + if (!articles.isEmpty()) { + view.printSuccess("Sample titles:"); + int count = Math.min(3, articles.size()); + for (int i = 0; i < count; i++) { + view.printSuccess(" - " + articles.get(i).getTitle()); + } + if (articles.size() > 3) { + view.printSuccess(" ... and " + (articles.size() - 3) + " more"); + } + } + + view.printSuccess("Note: Articles were NOT stored in repository"); + + } catch (Exception e) { + view.printError("Failed to analyze: " + e.getMessage()); + } + } +} diff --git a/w10/ArtcleRespository.java b/w10/ArtcleRespository.java new file mode 100644 index 0000000000000000000000000000000000000000..06d7405020018ddf3cacee90fd4af10487da3d20 GIT binary patch literal 1024 ScmZQz7zLvtFd70QH3R?z00031 literal 0 HcmV?d00001 diff --git a/w10/CrawlStrategy.java b/w10/CrawlStrategy.java new file mode 100644 index 0000000..73c9b80 --- /dev/null +++ b/w10/CrawlStrategy.java @@ -0,0 +1,14 @@ + + +import com.example.datacollect.model.Article; +import org.jsoup.nodes.Document; +import java.util.List; + +public interface CrawlStrategy { + List
parse(String url, Document doc); + boolean supports(String url); + + default int getPriority() { + return 0; + } +} \ No newline at end of file