package main; import controller.CrawlerController; import model.ResultContainer; import model.CrawlResult; import view.CrawlerView; import exception.NetworkException; import java.util.HashMap; import java.util.List; import java.util.Map; public class CrawlerCLI { public static void main(String[] args) { CrawlerView view = new CrawlerView(); CrawlerController controller = new CrawlerController(view); view.showWelcome(); if (args.length > 0) { handleCommandLineArgs(view, controller, args); } else { runInteractiveMode(view, controller); } view.showGoodbye(); } private static void handleCommandLineArgs(CrawlerView view, CrawlerController controller, String[] args) { String command = args[0].toLowerCase(); switch (command) { case "dangdang": case "1": runDangDang(view, controller); break; case "weather": case "2": runWeather(view, controller); break; case "maoyan": case "3": runMaoyan(view, controller); break; case "train": case "4": runTrain12306(view, controller); break; case "csdn": case "7": runCsdn(view, controller); break; case "all": case "5": controller.runAllCrawlers(); break; case "help": case "6": case "-h": case "--help": view.showUsage(); break; default: view.showError("未知命令: " + command); view.showUsage(); } } private static void runDangDang(CrawlerView view, CrawlerController controller) { view.showHeader("当当网图书爬虫"); ResultContainer> result = controller.runDangDangCrawler(); if (result.isFailure() && result.getMessage().contains("网络")) { System.out.println(); System.out.println("============================================"); System.out.println("!!! IOException: 网络异常 - " + result.getMessage()); System.out.println("!!! 原因: " + "无网络连接或目标网站不可达"); System.out.println("============================================"); System.exit(1); } } private static void runWeather(CrawlerView view, CrawlerController controller) { view.showHeader("中国天气网爬虫"); ResultContainer> result = controller.runWeatherCrawler(); if (result.isFailure() && result.getMessage().contains("网络")) { System.out.println(); System.out.println("============================================"); System.out.println("!!! IOException: 网络异常 - " + result.getMessage()); System.out.println("!!! 原因: " + "无网络连接或目标网站不可达"); System.out.println("============================================"); System.exit(1); } } private static void runMaoyan(CrawlerView view, CrawlerController controller) { view.showHeader("猫眼电影爬虫"); ResultContainer> result = controller.runMaoyanMovieCrawler(); if (result.isFailure() && result.getMessage().contains("网络")) { System.out.println(); System.out.println("============================================"); System.out.println("!!! IOException: 网络异常 - " + result.getMessage()); System.out.println("!!! 原因: " + "无网络连接或目标网站不可达"); System.out.println("============================================"); System.exit(1); } } private static void runTrain12306(CrawlerView view, CrawlerController controller) { view.showHeader("12306火车票爬虫"); ResultContainer> result = controller.runTrain12306Crawler(); if (result.isFailure() && result.getMessage().contains("网络")) { System.out.println(); System.out.println("============================================"); System.out.println("!!! IOException: 网络异常 - " + result.getMessage()); System.out.println("!!! 原因: " + "无网络连接或目标网站不可达"); System.out.println("============================================"); System.exit(1); } } private static void runCsdn(CrawlerView view, CrawlerController controller) { view.showHeader("CSDN博客爬虫"); ResultContainer> result = controller.runCsdnBlogCrawler(); if (result.isFailure() && result.getMessage().contains("网络")) { System.out.println(); System.out.println("============================================"); System.out.println("!!! IOException: 网络异常 - " + result.getMessage()); System.out.println("!!! 原因: " + "无网络连接或目标网站不可达"); System.out.println("============================================"); System.exit(1); } } private static void runInteractiveMode(CrawlerView view, CrawlerController controller) { boolean running = true; while (running) { view.showMenu(getDefaultMenu()); String input = view.readInput(); if (input == null || input.trim().isEmpty()) { view.showWarning("请输入有效选项"); continue; } switch (input.trim()) { case "1": runDangDang(view, controller); break; case "2": runWeather(view, controller); break; case "3": runMaoyan(view, controller); break; case "4": runTrain12306(view, controller); break; case "5": controller.runAllCrawlers(); break; case "6": view.showUsage(); break; case "7": runCsdn(view, controller); break; case "0": case "exit": case "quit": running = false; break; default: view.showError("无效选项: " + input.trim()); } } } private static Map getDefaultMenu() { Map menu = new HashMap<>(); menu.put("1", "当当网图书爬虫"); menu.put("2", "中国天气网爬虫"); menu.put("3", "豆瓣电影Top250爬虫"); menu.put("4", "12306火车票爬虫"); menu.put("5", "运行所有爬虫"); menu.put("6", "查看使用说明"); menu.put("7", "CSDN博客爬虫"); menu.put("0", "退出系统"); return menu; } }