From c20783b4754c0fe435dee18a466451608ed35338 Mon Sep 17 00:00:00 2001 From: duyumeng <2073576831@qq.com> Date: Sun, 31 May 2026 23:43:09 +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'project/controller'?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- project/controller/CrawlerController.java | 180 ++++++++++++++++++++++ 1 file changed, 180 insertions(+) create mode 100644 project/controller/CrawlerController.java diff --git a/project/controller/CrawlerController.java b/project/controller/CrawlerController.java new file mode 100644 index 0000000..0db6242 --- /dev/null +++ b/project/controller/CrawlerController.java @@ -0,0 +1,180 @@ + +package controller; + +import model.Paper; +import repository.DataRepository; +import strategy.*; +import view.ConsoleView; +import java.io.*; +import java.util.Arrays; +import java.util.List; +import java.util.Map; + +public class CrawlerController { + private ConsoleView view; + private DataRepository repository; + private boolean running; + + public CrawlerController(ConsoleView view, DataRepository repository) { + this.view = view; + this.repository = repository; + this.running = true; + } + + public void start() { + view.showWelcome(); + } + + public void showMenu() { + view.showMenu(); + } + + public void showHelp() { + view.showHelp(); + } + + public void crawl(int platform) throws Exception { + if (platform == 1) crawlWeather(); + else if (platform == 2) crawlEarthquake(); + else if (platform == 3) crawlNews(); + else if (platform == 4) { crawlWeather(); crawlEarthquake(); crawlNews(); } + else view.showError("Invalid selection"); + } + + private void crawlWeather() throws Exception { + view.showMessage("Crawling weather data..."); + CrawlStrategy strategy = new ChangshaWeatherStrategy(); + List papers = strategy.crawl(); + List headers = Arrays.asList("Date", "Weather", "HighTemp", "LowTemp", "Wind"); + repository.saveToCSV(papers, strategy.getOutputFileName(), headers); + view.showMessage("Saved to " + strategy.getOutputFileName()); + } + + private void crawlEarthquake() throws Exception { + view.showMessage("Crawling earthquake data..."); + CrawlStrategy strategy = new EarthquakeStrategy(); + List papers = strategy.crawl(); + List headers = Arrays.asList("Time", "Magnitude", "Latitude", "Longitude", "Depth", "Location"); + repository.saveToCSV(papers, strategy.getOutputFileName(), headers); + view.showMessage("Saved to " + strategy.getOutputFileName()); + } + + private void crawlNews() throws Exception { + view.showMessage("Crawling news data..."); + CrawlStrategy strategy = new NewsRankStrategy(); + List papers = strategy.crawl(); + List headers = Arrays.asList("Rank", "Title", "HotIndex", "Link"); + repository.saveToCSV(papers, strategy.getOutputFileName(), headers); + view.showMessage("Saved to " + strategy.getOutputFileName()); + } + + public void listData() { + List files = repository.listDataFiles(); + view.showDataList(files); + } + + public void generateVisualizations() { + view.showMessage("Generating visualization pages..."); + try { + generateWeatherVisualization(); + generateEarthquakeVisualization(); + generateNewsVisualization(); + view.showMessage("Visualizations generated in visualization/ directory!"); + } catch (IOException e) { + view.showError("Failed: " + e.getMessage()); + } + } + + private void generateWeatherVisualization() throws IOException { + List data = repository.loadCSV("changsha_weather_2026.csv"); + File visDir = new File("visualization"); + if (!visDir.exists()) visDir.mkdirs(); + File file = new File("visualization", "weather.html"); + BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file), "UTF-8")); + try { + writer.write("\n\n
\n\n| Time | Magnitude | Location |
|---|---|---|
| " + row.get("Time") + " | " + row.get("Magnitude") + " | " + row.get("Location") + " |