diff --git a/w12/.vscode/launch.json b/w12/.vscode/launch.json deleted file mode 100644 index 1fda4c7..0000000 --- a/w12/.vscode/launch.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - // 使用 IntelliSense 了解相关属性。 - // 悬停以查看现有属性的描述。 - // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387 - "version": "0.2.0", - "configurations": [ - - { - "type": "java", - "name": "Current File", - "request": "launch", - "mainClass": "${file}" - }, - { - "type": "java", - "name": "WeiboStarHotSearcha", - "request": "launch", - "mainClass": "WeiboStarHotSearcha", - "projectName": "weibo-hotsearch" - }, - { - "type": "java", - "name": "Main", - "request": "launch", - "mainClass": "com.weibo.hotsearch.Main", - "projectName": "weibo-hotsearch" - } - ] -} \ No newline at end of file diff --git a/w12/.vscode/settings.json b/w12/.vscode/settings.json deleted file mode 100644 index c5f3f6b..0000000 --- a/w12/.vscode/settings.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "java.configuration.updateBuildConfiguration": "interactive" -} \ No newline at end of file diff --git a/w12/202506050225-毕磊-高级程序设计实验报告.docx b/w12/202506050225-毕磊-高级程序设计实验报告.docx deleted file mode 100644 index 7ff03ff..0000000 Binary files a/w12/202506050225-毕磊-高级程序设计实验报告.docx and /dev/null differ diff --git a/w12/hotsearch_results/hotsearch_20260528_140606.txt b/w12/hotsearch_results/hotsearch_20260528_140606.txt deleted file mode 100644 index b6152b9..0000000 --- a/w12/hotsearch_results/hotsearch_20260528_140606.txt +++ /dev/null @@ -1,56 +0,0 @@ -热搜数据采集报告 -================ -采集时间: 2026年05月28日 14:06:04 - -【微博热搜数据】 - ---- 明星相关热搜 --- -排名:6 热度:414478 热搜:VOGUE直播间两位明星不出镜 -排名:32 热度:373370 热搜:歌手第二期歌单 -排名:34 热度:370959 热搜:小红书官宣获得世界杯版权 - -明星相关热搜总数:3 条 - ---- 体育相关热搜 --- -排名:34 热度:370959 热搜:小红书官宣获得世界杯版权 - -体育相关热搜总数:1 条 - ---- 国家政策相关热搜 --- -排名:37 热度:364897 热搜:双汇发布致歉声明 - -国家政策相关热搜总数:1 条 - -【百度贴吧热搜数据】 - ---- 明星相关热搜 --- - -明星相关热搜总数:0 条 -当前贴吧热搜暂无明星相关内容 - ---- 体育相关热搜 --- - -体育相关热搜总数:0 条 -当前贴吧热搜暂无体育相关内容 - ---- 国家政策相关热搜 --- - -国家政策相关热搜总数:0 条 -当前贴吧热搜暂无国家政策相关内容 - -【知乎热搜数据】 - ---- 明星相关热搜 --- -排名:6 热度:0 热搜:动作演员吴樾为什么火不起来 - -明星相关热搜总数:1 条 - ---- 体育相关热搜 --- - -体育相关热搜总数:0 条 -当前知乎热搜暂无体育相关内容 - ---- 国家政策相关热搜 --- - -国家政策相关热搜总数:0 条 -当前知乎热搜暂无国家政策相关内容 diff --git a/w12/hotsearch_results/hotsearch_20260531_121726.txt b/w12/hotsearch_results/hotsearch_20260531_121726.txt deleted file mode 100644 index 1405ade..0000000 --- a/w12/hotsearch_results/hotsearch_20260531_121726.txt +++ /dev/null @@ -1,60 +0,0 @@ -热搜数据采集报告 -================ -采集时间: 2026年05月31日 12:17:24 - -【微博热搜数据】 - ---- 明星相关热搜 --- -排名:43 热度:186709 热搜:敖瑞鹏新剧演鞠婧祎哥哥 - -明星相关热搜总数:1 条 - ---- 体育相关热搜 --- -排名:10 热度:387068 热搜:陈星旭王玉雯一起去看欧冠了 -排名:21 热度:261492 热搜:姆巴佩欧冠金靴 -排名:23 热度:250168 热搜:文班亚马西决MVP -排名:37 热度:191114 热搜:文班亚马回应成为西部决赛MVP -排名:41 热度:188900 热搜:巴黎欧冠夺冠后多地爆发骚乱 -排名:42 热度:188188 热搜:孙千去看欧冠了 -排名:49 热度:172821 热搜:世界杯 - -体育相关热搜总数:7 条 - ---- 国家政策相关热搜 --- - -国家政策相关热搜总数:0 条 -当前微博热搜暂无国家政策相关内容 - -【百度贴吧热搜数据】 - ---- 明星相关热搜 --- - -明星相关热搜总数:0 条 -当前贴吧热搜暂无明星相关内容 - ---- 体育相关热搜 --- - -体育相关热搜总数:0 条 -当前贴吧热搜暂无体育相关内容 - ---- 国家政策相关热搜 --- - -国家政策相关热搜总数:0 条 -当前贴吧热搜暂无国家政策相关内容 - -【知乎热搜数据】 - ---- 明星相关热搜 --- - -明星相关热搜总数:0 条 -当前知乎热搜暂无明星相关内容 - ---- 体育相关热搜 --- - -体育相关热搜总数:0 条 -当前知乎热搜暂无体育相关内容 - ---- 国家政策相关热搜 --- - -国家政策相关热搜总数:0 条 -当前知乎热搜暂无国家政策相关内容 diff --git a/w12/总代码/.vscode/settings.json b/w12/总代码/.vscode/settings.json deleted file mode 100644 index 8e9c83c..0000000 --- a/w12/总代码/.vscode/settings.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "git.ignoreLimitWarning": true, - "java.debug.settings.onBuildFailureProceed": true -} \ No newline at end of file diff --git a/w12/总代码/pom.xml b/w12/总代码/pom.xml deleted file mode 100644 index 264f219..0000000 --- a/w12/总代码/pom.xml +++ /dev/null @@ -1,76 +0,0 @@ - - - 4.0.0 - - com.weibo - hotsearch - 1.0.0 - jar - - HotSearch CLI Tool - 热搜数据采集工具 - CLI + MVC + Command + Strategy + Exception体系 - - - 11 - 11 - UTF-8 - - - - - org.jsoup - jsoup - 1.17.2 - - - - org.apache.httpcomponents.client5 - httpclient5 - 5.3.1 - - - - org.apache.httpcomponents.client5 - httpclient5-fluent - 5.3.1 - - - - com.alibaba.fastjson2 - fastjson2 - 2.0.52 - - - - - - - org.apache.maven.plugins - maven-assembly-plugin - 3.6.0 - - - - com.weibo.hotsearch.Main - - - - jar-with-dependencies - - - - - make-assembly - package - - single - - - - - - - - \ No newline at end of file diff --git a/w12/总代码/src/main/java/WeiboStarHotSearcha.java b/w12/总代码/src/main/java/WeiboStarHotSearcha.java deleted file mode 100644 index a57d190..0000000 --- a/w12/总代码/src/main/java/WeiboStarHotSearcha.java +++ /dev/null @@ -1,667 +0,0 @@ -import com.alibaba.fastjson2.JSONArray; -import com.alibaba.fastjson2.JSONObject; -import org.apache.hc.client5.http.fluent.Request; -import org.apache.hc.core5.util.Timeout; - -import java.io.BufferedWriter; -import java.io.File; -import java.io.FileWriter; -import java.io.IOException; -import java.io.UnsupportedEncodingException; -import java.net.URLEncoder; -import java.nio.charset.StandardCharsets; -import java.text.SimpleDateFormat; -import java.util.ArrayList; -import java.util.Date; -import java.util.List; - -public class WeiboStarHotSearcha { - - private static final String WEIBO_HOT_URL = "https://weibo.com/ajax/side/hotSearch"; - private static final String TIEBA_HOT_URL = "https://tieba.baidu.com/hottopic/browse/topicList"; - private static final String ZHIHU_HOT_URL = "https://www.zhihu.com/api/v4/search/top_search"; - private static final String OUTPUT_DIR = "hotsearch_results"; - - private static final String[] STAR_KEYWORDS = { - "明星", "演员", "歌手", "爱豆", "艺人", "红毯", "综艺", "新剧", - "恋情", "官宣", "演唱会", "代言", "造型", "封面" - }; - - private static final String[] SPORTS_KEYWORDS = { - "足球", "篮球", "世界杯", "NBA", "CBA", "奥运会", "世锦赛", - "冠军", "比赛", "夺冠", "进球", "比分", "运动员", "国足", - "乒乓", "排球", "羽毛球", "游泳", "田径", "体操", "跳水", - "MVP", "转会", "联赛", "中超", "英超", "西甲", "欧冠" - }; - - private static final String[] POLICY_KEYWORDS = { - "政策", "新规", "条例", "法规", "通知", "公告", "发布", - "国务院", "发改委", "财政部", "教育部", "工信部", "科技部", - "税收", "补贴", "优惠", "扶持", "改革", "开放", "创新", - "十四五", "计划", "规划", "方案", "意见", "办法", "细则", - "经济", "金融", "市场", "监管", "安全", "环保", "绿色" - }; - - private static final int CONNECT_TIMEOUT = 10000; - private static final int RESPONSE_TIMEOUT = 10000; - private static final int MAX_RETRIES = 3; - - private static final StringBuilder outputBuilder = new StringBuilder(); - - public static void main(String[] args) { - try { - outputBuilder.append("热搜数据采集报告\n"); - outputBuilder.append("================\n"); - outputBuilder.append("采集时间: ").append(getCurrentTime()).append("\n\n"); - - // ========== 微博热搜 ========== - System.out.println("正在请求微博热搜数据..."); - outputBuilder.append("【微博热搜数据】\n"); - - String weiboJson = fetchWithRetry(WEIBO_HOT_URL, MAX_RETRIES, "https://weibo.com/"); - - if (weiboJson == null || weiboJson.isEmpty()) { - System.out.println("获取微博热搜数据失败"); - outputBuilder.append("获取微博热搜数据失败\n\n"); - } else { - parseAndFilterWeibo(weiboJson); - } - - // ========== 百度贴吧热搜 ========== - System.out.println("\n\n正在请求百度贴吧热搜数据..."); - outputBuilder.append("\n【百度贴吧热搜数据】\n"); - - String tiebaJson = fetchWithRetry(TIEBA_HOT_URL, MAX_RETRIES, "https://tieba.baidu.com/"); - - if (tiebaJson == null || tiebaJson.isEmpty()) { - System.out.println("获取百度贴吧热搜数据失败"); - outputBuilder.append("获取百度贴吧热搜数据失败\n"); - } else { - parseAndFilterTieba(tiebaJson); - } - - // ========== 知乎热搜 ========== - System.out.println("\n\n正在请求知乎热搜数据..."); - outputBuilder.append("\n【知乎热搜数据】\n"); - - try { - String zhihuJson = fetchWithRetry(ZHIHU_HOT_URL, MAX_RETRIES, "https://zhuanlan.zhihu.com/"); - - if (zhihuJson == null || zhihuJson.isEmpty()) { - System.out.println("获取知乎热搜数据失败"); - outputBuilder.append("获取知乎热搜数据失败\n"); - } else { - System.out.println("知乎返回数据长度: " + zhihuJson.length() + " 字符"); - if (zhihuJson.length() > 0) { - System.out.println("知乎返回数据预览: " + zhihuJson.substring(0, Math.min(500, zhihuJson.length())) + "..."); - } - parseAndFilterZhihu(zhihuJson); - } - } catch (Exception e) { - System.out.println("获取知乎热搜数据异常: " + e.getMessage()); - outputBuilder.append("获取知乎热搜数据异常: " + e.getMessage() + "\n"); - e.printStackTrace(); - } - - // ========== 保存到文件 ========== - String filename = saveToFile(); - System.out.println("\n\n结果已保存到文件: " + filename); - - } catch (IOException e) { - System.err.println("网络请求失败: " + e.getMessage()); - e.printStackTrace(); - } catch (Exception e) { - System.err.println("数据解析失败: " + e.getMessage()); - e.printStackTrace(); - } - } - - private static String fetchWithRetry(String url, int maxRetries, String referer) throws IOException { - int retryCount = 0; - IOException lastException = null; - - while (retryCount < maxRetries) { - try { - System.out.println("正在请求: " + url); - String result = Request.get(url) - .addHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36") - .addHeader("Referer", referer) - .addHeader("Accept", "application/json, text/plain, */*;charset=UTF-8") - .addHeader("Accept-Language", "zh-CN,zh;q=0.9,en;q=0.8") - .addHeader("Accept-Encoding", "identity") - .addHeader("Connection", "keep-alive") - .addHeader("Content-Type", "application/json;charset=UTF-8") - .connectTimeout(Timeout.ofMilliseconds(CONNECT_TIMEOUT)) - .responseTimeout(Timeout.ofMilliseconds(RESPONSE_TIMEOUT)) - .execute() - .returnContent() - .asString(StandardCharsets.UTF_8); - - // 修复可能的编码问题 - result = new String(result.getBytes(StandardCharsets.UTF_8), StandardCharsets.UTF_8); - return result; - } catch (IOException e) { - lastException = e; - retryCount++; - System.out.println("请求失败 (" + retryCount + "/" + maxRetries + "): " + e.getMessage()); - if (retryCount < maxRetries) { - System.out.println("2秒后重试..."); - try { - Thread.sleep(2000); - } catch (InterruptedException ie) { - Thread.currentThread().interrupt(); - throw new IOException("重试被中断", ie); - } - } - } - } - throw lastException != null ? lastException : new IOException("请求失败"); - } - - private static void parseAndFilterWeibo(String json) { - JSONObject root = JSONObject.parseObject(json); - if (root == null || !root.containsKey("data")) { - System.out.println("微博数据格式错误或接口返回异常"); - outputBuilder.append("数据格式错误或接口返回异常\n"); - return; - } - - JSONObject data = root.getJSONObject("data"); - if (data == null || !data.containsKey("realtime")) { - System.out.println("微博热搜数据为空"); - outputBuilder.append("热搜数据为空\n"); - return; - } - - JSONArray realtime = data.getJSONArray("realtime"); - if (realtime == null || realtime.isEmpty()) { - System.out.println("微博热搜列表为空"); - outputBuilder.append("热搜列表为空\n"); - return; - } - - List starHotList = new ArrayList<>(); - List sportsHotList = new ArrayList<>(); - List policyHotList = new ArrayList<>(); - - System.out.println("\n===== 微博 - 明星相关热搜 ====="); - outputBuilder.append("\n--- 明星相关热搜 ---\n"); - - for (int i = 0; i < realtime.size(); i++) { - JSONObject item = realtime.getJSONObject(i); - if (item == null) continue; - - String word = item.getString("word"); - if (word == null || word.isEmpty()) continue; - - long num = item.getLongValue("num", 0); - int rank = item.getIntValue("rank", 0); - - if (isStarRelated(word)) { - starHotList.add(item); - String line = String.format("排名:%d\t热度:%d\t热搜:%s", rank, num, word); - System.out.println(line); - outputBuilder.append(line).append("\n"); - } - } - String summary = "\n明星相关热搜总数:" + starHotList.size() + " 条"; - System.out.println(summary); - outputBuilder.append(summary).append("\n"); - - if (starHotList.isEmpty()) { - String emptyMsg = "当前微博热搜暂无明星相关内容"; - System.out.println(emptyMsg); - outputBuilder.append(emptyMsg).append("\n"); - } - - System.out.println("\n===== 微博 - 体育相关热搜 ====="); - outputBuilder.append("\n--- 体育相关热搜 ---\n"); - - for (int i = 0; i < realtime.size(); i++) { - JSONObject item = realtime.getJSONObject(i); - if (item == null) continue; - - String word = item.getString("word"); - if (word == null || word.isEmpty()) continue; - - long num = item.getLongValue("num", 0); - int rank = item.getIntValue("rank", 0); - - if (isSportsRelated(word)) { - sportsHotList.add(item); - String line = String.format("排名:%d\t热度:%d\t热搜:%s", rank, num, word); - System.out.println(line); - outputBuilder.append(line).append("\n"); - } - } - summary = "\n体育相关热搜总数:" + sportsHotList.size() + " 条"; - System.out.println(summary); - outputBuilder.append(summary).append("\n"); - - if (sportsHotList.isEmpty()) { - String emptyMsg = "当前微博热搜暂无体育相关内容"; - System.out.println(emptyMsg); - outputBuilder.append(emptyMsg).append("\n"); - } - - System.out.println("\n===== 微博 - 国家政策相关热搜 ====="); - outputBuilder.append("\n--- 国家政策相关热搜 ---\n"); - - for (int i = 0; i < realtime.size(); i++) { - JSONObject item = realtime.getJSONObject(i); - if (item == null) continue; - - String word = item.getString("word"); - if (word == null || word.isEmpty()) continue; - - long num = item.getLongValue("num", 0); - int rank = item.getIntValue("rank", 0); - - if (isPolicyRelated(word)) { - policyHotList.add(item); - String line = String.format("排名:%d\t热度:%d\t热搜:%s", rank, num, word); - System.out.println(line); - outputBuilder.append(line).append("\n"); - } - } - summary = "\n国家政策相关热搜总数:" + policyHotList.size() + " 条"; - System.out.println(summary); - outputBuilder.append(summary).append("\n"); - - if (policyHotList.isEmpty()) { - String emptyMsg = "当前微博热搜暂无国家政策相关内容"; - System.out.println(emptyMsg); - outputBuilder.append(emptyMsg).append("\n"); - } - } - - private static void parseAndFilterTieba(String json) { - JSONObject root = JSONObject.parseObject(json); - if (root == null || !root.containsKey("data")) { - System.out.println("贴吧数据格式错误或接口返回异常"); - outputBuilder.append("数据格式错误或接口返回异常\n"); - return; - } - - JSONObject data = root.getJSONObject("data"); - if (data == null || !data.containsKey("bang_topic")) { - System.out.println("贴吧热搜数据为空"); - outputBuilder.append("热搜数据为空\n"); - return; - } - - JSONArray topics = data.getJSONArray("bang_topic"); - if (topics == null || topics.isEmpty()) { - System.out.println("贴吧热搜列表为空"); - outputBuilder.append("热搜列表为空\n"); - return; - } - - List starHotList = new ArrayList<>(); - List sportsHotList = new ArrayList<>(); - List policyHotList = new ArrayList<>(); - - System.out.println("\n===== 百度贴吧 - 明星相关热搜 ====="); - outputBuilder.append("\n--- 明星相关热搜 ---\n"); - - for (int i = 0; i < topics.size(); i++) { - JSONObject item = topics.getJSONObject(i); - if (item == null) continue; - - String topicName = item.getString("topic_name"); - if (topicName == null || topicName.isEmpty()) continue; - - int discussNum = item.getIntValue("discuss_num", 0); - int readNum = item.getIntValue("read_num", 0); - - if (isStarRelated(topicName)) { - starHotList.add(item); - String line = String.format("序号:%d\t阅读:%d\t讨论:%d\t话题:%s", i + 1, readNum, discussNum, topicName); - System.out.println(line); - outputBuilder.append(line).append("\n"); - } - } - String summary = "\n明星相关热搜总数:" + starHotList.size() + " 条"; - System.out.println(summary); - outputBuilder.append(summary).append("\n"); - - if (starHotList.isEmpty()) { - String emptyMsg = "当前贴吧热搜暂无明星相关内容"; - System.out.println(emptyMsg); - outputBuilder.append(emptyMsg).append("\n"); - } - - System.out.println("\n===== 百度贴吧 - 体育相关热搜 ====="); - outputBuilder.append("\n--- 体育相关热搜 ---\n"); - - for (int i = 0; i < topics.size(); i++) { - JSONObject item = topics.getJSONObject(i); - if (item == null) continue; - - String topicName = item.getString("topic_name"); - if (topicName == null || topicName.isEmpty()) continue; - - int discussNum = item.getIntValue("discuss_num", 0); - int readNum = item.getIntValue("read_num", 0); - - if (isSportsRelated(topicName)) { - sportsHotList.add(item); - String line = String.format("序号:%d\t阅读:%d\t讨论:%d\t话题:%s", i + 1, readNum, discussNum, topicName); - System.out.println(line); - outputBuilder.append(line).append("\n"); - } - } - summary = "\n体育相关热搜总数:" + sportsHotList.size() + " 条"; - System.out.println(summary); - outputBuilder.append(summary).append("\n"); - - if (sportsHotList.isEmpty()) { - String emptyMsg = "当前贴吧热搜暂无体育相关内容"; - System.out.println(emptyMsg); - outputBuilder.append(emptyMsg).append("\n"); - } - - System.out.println("\n===== 百度贴吧 - 国家政策相关热搜 ====="); - outputBuilder.append("\n--- 国家政策相关热搜 ---\n"); - - for (int i = 0; i < topics.size(); i++) { - JSONObject item = topics.getJSONObject(i); - if (item == null) continue; - - String topicName = item.getString("topic_name"); - if (topicName == null || topicName.isEmpty()) continue; - - int discussNum = item.getIntValue("discuss_num", 0); - int readNum = item.getIntValue("read_num", 0); - - if (isPolicyRelated(topicName)) { - policyHotList.add(item); - String line = String.format("序号:%d\t阅读:%d\t讨论:%d\t话题:%s", i + 1, readNum, discussNum, topicName); - System.out.println(line); - outputBuilder.append(line).append("\n"); - } - } - summary = "\n国家政策相关热搜总数:" + policyHotList.size() + " 条"; - System.out.println(summary); - outputBuilder.append(summary).append("\n"); - - if (policyHotList.isEmpty()) { - String emptyMsg = "当前贴吧热搜暂无国家政策相关内容"; - System.out.println(emptyMsg); - outputBuilder.append(emptyMsg).append("\n"); - } - } - - private static void parseAndFilterZhihu(String json) { - try { - JSONObject root = JSONObject.parseObject(json); - if (root == null) { - System.out.println("知乎数据格式错误:无法解析JSON"); - outputBuilder.append("数据格式错误:无法解析JSON\n"); - return; - } - - // 尝试多种数据结构 - JSONArray data = null; - - // 结构1:直接在 data 数组中 - if (root.containsKey("data") && root.get("data") instanceof JSONArray) { - data = root.getJSONArray("data"); - } - // 结构2:在 data.topics 数组中 - else if (root.containsKey("data")) { - JSONObject dataObj = root.getJSONObject("data"); - if (dataObj != null && dataObj.containsKey("topics")) { - data = dataObj.getJSONArray("topics"); - } - } - // 结构3:在 top_search.words 数组中(知乎搜索API) - else if (root.containsKey("top_search")) { - JSONObject topSearch = root.getJSONObject("top_search"); - if (topSearch != null && topSearch.containsKey("words")) { - data = topSearch.getJSONArray("words"); - } - } - // 结构4:直接是数组 - else if (json.startsWith("[")) { - data = JSONArray.parseArray(json); - } - - if (data == null || data.isEmpty()) { - System.out.println("知乎热搜数据为空或格式不匹配"); - outputBuilder.append("热搜数据为空或格式不匹配\n"); - return; - } - - List starHotList = new ArrayList<>(); - List sportsHotList = new ArrayList<>(); - List policyHotList = new ArrayList<>(); - - System.out.println("\n===== 知乎 - 明星相关热搜 ====="); - outputBuilder.append("\n--- 明星相关热搜 ---\n"); - - for (int i = 0; i < data.size(); i++) { - JSONObject item = data.getJSONObject(i); - if (item == null) continue; - - // 尝试多种标题字段 - String title = null; - if (item.containsKey("title")) { - title = item.getString("title"); - } else if (item.containsKey("topic_title")) { - title = item.getString("topic_title"); - } else if (item.containsKey("name")) { - title = item.getString("name"); - } else if (item.containsKey("target")) { - JSONObject target = item.getJSONObject("target"); - if (target != null) { - title = target.getString("title"); - } - } else if (item.containsKey("display_query")) { - title = item.getString("display_query"); - } else if (item.containsKey("query")) { - title = item.getString("query"); - } - - if (title == null || title.isEmpty()) continue; - - // 尝试获取热度值 - long hotValue = 0; - if (item.containsKey("hot_score")) { - hotValue = item.getLongValue("hot_score", 0); - } else if (item.containsKey("score")) { - hotValue = item.getLongValue("score", 0); - } else if (item.containsKey("detail_text")) { - String detailText = item.getString("detail_text"); - if (detailText != null) { - try { - String numStr = detailText.replaceAll("[^0-9]", ""); - if (!numStr.isEmpty()) { - hotValue = Long.parseLong(numStr); - } - } catch (Exception e) { - hotValue = 0; - } - } - } - - int rank = i + 1; - - if (isStarRelated(title)) { - starHotList.add(item); - String line = String.format("排名:%d\t热度:%d\t热搜:%s", rank, hotValue, title); - System.out.println(line); - outputBuilder.append(line).append("\n"); - } - } - String summary = "\n明星相关热搜总数:" + starHotList.size() + " 条"; - System.out.println(summary); - outputBuilder.append(summary).append("\n"); - - if (starHotList.isEmpty()) { - String emptyMsg = "当前知乎热搜暂无明星相关内容"; - System.out.println(emptyMsg); - outputBuilder.append(emptyMsg).append("\n"); - } - - System.out.println("\n===== 知乎 - 体育相关热搜 ====="); - outputBuilder.append("\n--- 体育相关热搜 ---\n"); - - for (int i = 0; i < data.size(); i++) { - JSONObject item = data.getJSONObject(i); - if (item == null) continue; - - String title = null; - if (item.containsKey("title")) { - title = item.getString("title"); - } else if (item.containsKey("topic_title")) { - title = item.getString("topic_title"); - } else if (item.containsKey("name")) { - title = item.getString("name"); - } else if (item.containsKey("target")) { - JSONObject target = item.getJSONObject("target"); - if (target != null) { - title = target.getString("title"); - } - } - - if (title == null || title.isEmpty()) continue; - - long hotValue = 0; - if (item.containsKey("hot_score")) { - hotValue = item.getLongValue("hot_score", 0); - } else if (item.containsKey("score")) { - hotValue = item.getLongValue("score", 0); - } - - int rank = i + 1; - - if (isSportsRelated(title)) { - sportsHotList.add(item); - String line = String.format("排名:%d\t热度:%d\t热搜:%s", rank, hotValue, title); - System.out.println(line); - outputBuilder.append(line).append("\n"); - } - } - summary = "\n体育相关热搜总数:" + sportsHotList.size() + " 条"; - System.out.println(summary); - outputBuilder.append(summary).append("\n"); - - if (sportsHotList.isEmpty()) { - String emptyMsg = "当前知乎热搜暂无体育相关内容"; - System.out.println(emptyMsg); - outputBuilder.append(emptyMsg).append("\n"); - } - - System.out.println("\n===== 知乎 - 国家政策相关热搜 ====="); - outputBuilder.append("\n--- 国家政策相关热搜 ---\n"); - - for (int i = 0; i < data.size(); i++) { - JSONObject item = data.getJSONObject(i); - if (item == null) continue; - - String title = null; - if (item.containsKey("title")) { - title = item.getString("title"); - } else if (item.containsKey("topic_title")) { - title = item.getString("topic_title"); - } else if (item.containsKey("name")) { - title = item.getString("name"); - } else if (item.containsKey("target")) { - JSONObject target = item.getJSONObject("target"); - if (target != null) { - title = target.getString("title"); - } - } - - if (title == null || title.isEmpty()) continue; - - long hotValue = 0; - if (item.containsKey("hot_score")) { - hotValue = item.getLongValue("hot_score", 0); - } else if (item.containsKey("score")) { - hotValue = item.getLongValue("score", 0); - } - - int rank = i + 1; - - if (isPolicyRelated(title)) { - policyHotList.add(item); - String line = String.format("排名:%d\t热度:%d\t热搜:%s", rank, hotValue, title); - System.out.println(line); - outputBuilder.append(line).append("\n"); - } - } - summary = "\n国家政策相关热搜总数:" + policyHotList.size() + " 条"; - System.out.println(summary); - outputBuilder.append(summary).append("\n"); - - if (policyHotList.isEmpty()) { - String emptyMsg = "当前知乎热搜暂无国家政策相关内容"; - System.out.println(emptyMsg); - outputBuilder.append(emptyMsg).append("\n"); - } - } catch (Exception e) { - System.out.println("知乎数据解析异常: " + e.getMessage()); - outputBuilder.append("数据解析异常: " + e.getMessage() + "\n"); - e.printStackTrace(); - } - } - - private static boolean isStarRelated(String word) { - if (word == null || word.isEmpty()) { - return false; - } - for (String keyword : STAR_KEYWORDS) { - if (word.contains(keyword)) { - return true; - } - } - return false; - } - - private static boolean isSportsRelated(String word) { - if (word == null || word.isEmpty()) { - return false; - } - for (String keyword : SPORTS_KEYWORDS) { - if (word.contains(keyword)) { - return true; - } - } - return false; - } - - private static boolean isPolicyRelated(String word) { - if (word == null || word.isEmpty()) { - return false; - } - for (String keyword : POLICY_KEYWORDS) { - if (word.contains(keyword)) { - return true; - } - } - return false; - } - - private static String getCurrentTime() { - return new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss").format(new Date()); - } - - private static String saveToFile() throws IOException { - File dir = new File(OUTPUT_DIR); - if (!dir.exists()) { - dir.mkdirs(); - } - - String timestamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date()); - String filename = "hotsearch_" + timestamp + ".txt"; - String filepath = OUTPUT_DIR + File.separator + filename; - - try (BufferedWriter writer = new BufferedWriter(new FileWriter(filepath))) { - writer.write(outputBuilder.toString()); - } - - return filepath; - } -} \ No newline at end of file diff --git a/w12/总代码/src/main/java/com/weibo/hotsearch/ConsoleOutputHandler.java b/w12/总代码/src/main/java/com/weibo/hotsearch/ConsoleOutputHandler.java deleted file mode 100644 index a4787cb..0000000 --- a/w12/总代码/src/main/java/com/weibo/hotsearch/ConsoleOutputHandler.java +++ /dev/null @@ -1,30 +0,0 @@ -package com.weibo.hotsearch; - -import com.alibaba.fastjson2.JSONObject; - -import java.util.List; - -public class ConsoleOutputHandler extends OutputHandler { - - @Override - public void output(List hotList, String filterName) { - System.out.println("\n===== " + filterName + " ====="); - - if (hotList == null || hotList.isEmpty()) { - System.out.println("当前暂无符合条件的热搜内容"); - return; - } - - for (int i = 0; i < hotList.size(); i++) { - JSONObject item = hotList.get(i); - System.out.println(formatHotItem(item, i, null)); - } - - System.out.println("\n===== 热搜总数:" + hotList.size() + " 条 ====="); - } - - @Override - public String getOutputType() { - return "控制台输出"; - } -} \ No newline at end of file diff --git a/w12/总代码/src/main/java/com/weibo/hotsearch/HotSearchFilter.java b/w12/总代码/src/main/java/com/weibo/hotsearch/HotSearchFilter.java deleted file mode 100644 index 0b41951..0000000 --- a/w12/总代码/src/main/java/com/weibo/hotsearch/HotSearchFilter.java +++ /dev/null @@ -1,24 +0,0 @@ -package com.weibo.hotsearch; - -public abstract class HotSearchFilter { - - protected String[] keywords; - - public HotSearchFilter(String[] keywords) { - this.keywords = keywords; - } - - public boolean matches(String word) { - if (word == null || word.isEmpty()) { - return false; - } - for (String keyword : keywords) { - if (word.contains(keyword)) { - return true; - } - } - return false; - } - - public abstract String getFilterName(); -} \ No newline at end of file diff --git a/w12/总代码/src/main/java/com/weibo/hotsearch/Main.java b/w12/总代码/src/main/java/com/weibo/hotsearch/Main.java deleted file mode 100644 index 5073d65..0000000 --- a/w12/总代码/src/main/java/com/weibo/hotsearch/Main.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.weibo.hotsearch; - -import com.weibo.hotsearch.cli.CliHandler; - -public class Main { - - public static void main(String[] args) { - try { - CliHandler handler = new CliHandler(args); - handler.handle(); - } catch (Exception e) { - System.err.println("程序执行异常: " + e.getMessage()); - e.printStackTrace(); - } - } -} \ No newline at end of file diff --git a/w12/总代码/src/main/java/com/weibo/hotsearch/OutputHandler.java b/w12/总代码/src/main/java/com/weibo/hotsearch/OutputHandler.java deleted file mode 100644 index f54e352..0000000 --- a/w12/总代码/src/main/java/com/weibo/hotsearch/OutputHandler.java +++ /dev/null @@ -1,46 +0,0 @@ -package com.weibo.hotsearch; - -import com.alibaba.fastjson2.JSONObject; - -import java.util.List; - -public abstract class OutputHandler { - - public abstract void output(List hotList, String filterName); - - public abstract String getOutputType(); - - protected String formatHotItem(JSONObject item, int index, String dataSourceName) { - String word = getHotSearchWord(item); - long num = getHotSearchNum(item); - int rank = getHotSearchRank(item); - - if (rank > 0) { - return String.format("排名:%d\t热度:%d\t热搜:%s", rank, num, word); - } else { - return String.format("序号:%d\t热度:%d\t热搜:%s", index + 1, num, word); - } - } - - protected String getHotSearchWord(JSONObject item) { - if (item == null) return "未知"; - String word = item.getString("word"); - if (word == null || word.isEmpty()) { - word = item.getString("topic_name"); - } - if (word == null || word.isEmpty()) { - word = item.getString("title"); - } - return word != null ? word : "未知"; - } - - protected long getHotSearchNum(JSONObject item) { - if (item == null) return 0; - return item.getLongValue("num", 0); - } - - protected int getHotSearchRank(JSONObject item) { - if (item == null) return 0; - return item.getIntValue("rank", 0); - } -} \ No newline at end of file diff --git a/w12/总代码/src/main/java/com/weibo/hotsearch/StarFilter.java b/w12/总代码/src/main/java/com/weibo/hotsearch/StarFilter.java deleted file mode 100644 index ff1ddf4..0000000 --- a/w12/总代码/src/main/java/com/weibo/hotsearch/StarFilter.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.weibo.hotsearch; - -public class StarFilter extends HotSearchFilter { - - private static final String[] STAR_KEYWORDS = { - "明星", "演员", "歌手", "爱豆", "艺人", "红毯", "综艺", "新剧", - "恋情", "官宣", "演唱会", "代言", "造型", "封面" - }; - - public StarFilter() { - super(STAR_KEYWORDS); - } - - @Override - public String getFilterName() { - return "明星相关热搜"; - } -} \ No newline at end of file diff --git a/w12/总代码/src/main/java/com/weibo/hotsearch/cli/CliHandler.java b/w12/总代码/src/main/java/com/weibo/hotsearch/cli/CliHandler.java deleted file mode 100644 index ea52466..0000000 --- a/w12/总代码/src/main/java/com/weibo/hotsearch/cli/CliHandler.java +++ /dev/null @@ -1,133 +0,0 @@ -package com.weibo.hotsearch.cli; - -import com.weibo.hotsearch.controller.HotSearchController; -import com.weibo.hotsearch.exception.ErrorCode; -import com.weibo.hotsearch.exception.HotSearchException; - -public class CliHandler { - - private final CliParser parser; - private final HotSearchController controller; - - public CliHandler(String[] args) { - this.parser = new CliParser(); - this.controller = new HotSearchController(); - this.parser.parse(args); - } - - public void handle() { - String command = parser.getCommand(); - - if (command == null || command.isEmpty()) { - parser.printUsage(); - return; - } - - try { - switch (command.toLowerCase()) { - case "help": - parser.printUsage(); - break; - case "fetch": - handleFetch(); - break; - case "filter": - handleFilter(); - break; - case "output": - handleOutput(); - break; - case "save": - handleSave(); - break; - case "run": - handleRun(); - break; - default: - throw new HotSearchException(ErrorCode.CLI_COMMAND_NOT_FOUND, "未知命令: " + command); - } - } catch (HotSearchException e) { - System.err.println("\n错误 [" + e.getErrorCode().getCode() + "]: " + e.getMessage()); - if (e.getCause() != null) { - e.getCause().printStackTrace(); - } - } - } - - private void handleFetch() throws HotSearchException { - String source = parser.getOption("s"); - if (source == null) { - source = parser.getOption("source"); - } - if (source == null) { - throw new HotSearchException(ErrorCode.PARAMETER_ERROR, "请指定数据源 (-s 或 --source)"); - } - controller.executeFetch(source); - } - - private void handleFilter() throws HotSearchException { - String filter = parser.getOption("f"); - if (filter == null) { - filter = parser.getOption("filter"); - } - if (filter == null) { - throw new HotSearchException(ErrorCode.PARAMETER_ERROR, "请指定过滤器 (-f 或 --filter)"); - } - controller.executeFilter(filter); - } - - private void handleOutput() throws HotSearchException { - String output = parser.getOption("o"); - if (output == null) { - output = parser.getOption("output"); - } - if (output == null) { - output = "console"; - } - controller.executeOutput(output); - } - - private void handleSave() throws HotSearchException { - String path = parser.getOption("p"); - if (path == null) { - path = parser.getOption("path"); - } - controller.executeSave(path); - } - - private void handleRun() throws HotSearchException { - String source = parser.getOption("s"); - if (source == null) { - source = parser.getOption("source"); - } - if (source == null) { - source = "all"; - } - - String filter = parser.getOption("f"); - if (filter == null) { - filter = parser.getOption("filter"); - } - if (filter == null) { - filter = "star"; - } - - String output = parser.getOption("o"); - if (output == null) { - output = parser.getOption("output"); - } - if (output == null) { - output = "console"; - } - - String path = parser.getOption("p"); - if (path == null) { - path = parser.getOption("path"); - } - - controller.executeFetch(source); - controller.executeFilter(filter); - controller.executeOutput(output); - controller.executeSave(path); - } -} \ No newline at end of file diff --git a/w12/总代码/src/main/java/com/weibo/hotsearch/cli/CliParser.java b/w12/总代码/src/main/java/com/weibo/hotsearch/cli/CliParser.java deleted file mode 100644 index 33843cc..0000000 --- a/w12/总代码/src/main/java/com/weibo/hotsearch/cli/CliParser.java +++ /dev/null @@ -1,101 +0,0 @@ -package com.weibo.hotsearch.cli; - -import com.weibo.hotsearch.exception.CliException; -import com.weibo.hotsearch.exception.ErrorCode; - -import java.util.*; - -public class CliParser { - - private final Map options = new HashMap<>(); - private final List arguments = new ArrayList<>(); - private String command; - - public void parse(String[] args) { - if (args == null || args.length == 0) { - printUsage(); - return; - } - - int i = 0; - while (i < args.length) { - String arg = args[i]; - - if (arg.startsWith("--")) { - String[] parts = arg.substring(2).split("=", 2); - String key = parts[0]; - String value = parts.length > 1 ? parts[1] : "true"; - options.put(key, value); - i++; - } else if (arg.startsWith("-")) { - String key = arg.substring(1); - if (key.length() == 1) { - String value = "true"; - if (i + 1 < args.length && !args[i + 1].startsWith("-")) { - value = args[i + 1]; - i++; - } - options.put(key, value); - } else { - for (char c : key.toCharArray()) { - options.put(String.valueOf(c), "true"); - } - } - i++; - } else { - if (command == null) { - command = arg; - } else { - arguments.add(arg); - } - i++; - } - } - } - - public String getCommand() { - return command; - } - - public String getOption(String key) { - return options.get(key); - } - - public boolean hasOption(String key) { - return options.containsKey(key); - } - - public List getArguments() { - return arguments; - } - - public Map getAllOptions() { - return new HashMap<>(options); - } - - public void printUsage() { - System.out.println("\n===== 热搜数据采集工具 ====="); - System.out.println("用法:"); - System.out.println(" java -jar weibo-hotsearch-1.0-SNAPSHOT-jar-with-dependencies.jar [命令] [选项]"); - System.out.println("\n命令:"); - System.out.println(" fetch 获取热搜数据"); - System.out.println(" filter 过滤热搜数据"); - System.out.println(" output 输出热搜数据"); - System.out.println(" save 保存数据到文件"); - System.out.println(" run 执行完整流程"); - System.out.println(" help 显示帮助信息"); - System.out.println("\n选项:"); - System.out.println(" -s, --source <数据源> 指定数据源: weibo/tieba/zhihu/all"); - System.out.println(" -f, --filter <过滤器> 指定过滤器: star/sports/policy"); - System.out.println(" -o, --output <类型> 指定输出类型: console/text"); - System.out.println(" -p, --path <路径> 指定保存路径"); - System.out.println(" -h, --help 显示帮助信息"); - System.out.println("\n示例:"); - System.out.println(" java -jar xxx.jar run -s weibo -f star -o console"); - System.out.println(" java -jar xxx.jar fetch -s all"); - System.out.println(" java -jar xxx.jar filter -f sports"); - System.out.println(" java -jar xxx.jar output -o console"); - System.out.println(" java -jar xxx.jar save -p ./result.txt"); - System.out.println(); - } -} \ No newline at end of file diff --git a/w12/总代码/src/main/java/com/weibo/hotsearch/command/Command.java b/w12/总代码/src/main/java/com/weibo/hotsearch/command/Command.java deleted file mode 100644 index f84d238..0000000 --- a/w12/总代码/src/main/java/com/weibo/hotsearch/command/Command.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.weibo.hotsearch.command; - -import com.weibo.hotsearch.exception.HotSearchException; - -public interface Command { - - void execute() throws HotSearchException; - - String getCommandName(); - - String getDescription(); -} \ No newline at end of file diff --git a/w12/总代码/src/main/java/com/weibo/hotsearch/command/CommandInvoker.java b/w12/总代码/src/main/java/com/weibo/hotsearch/command/CommandInvoker.java deleted file mode 100644 index 8e8aa27..0000000 --- a/w12/总代码/src/main/java/com/weibo/hotsearch/command/CommandInvoker.java +++ /dev/null @@ -1,41 +0,0 @@ -package com.weibo.hotsearch.command; - -import com.weibo.hotsearch.exception.ErrorCode; -import com.weibo.hotsearch.exception.HotSearchException; - -import java.util.HashMap; -import java.util.Map; - -public class CommandInvoker { - - private final Map commands = new HashMap<>(); - - public void registerCommand(String name, Command command) { - commands.put(name.toLowerCase(), command); - } - - public void executeCommand(String name) throws HotSearchException { - Command command = commands.get(name.toLowerCase()); - if (command == null) { - throw new HotSearchException(ErrorCode.CLI_COMMAND_NOT_FOUND, "命令未找到: " + name); - } - command.execute(); - } - - public boolean hasCommand(String name) { - return commands.containsKey(name.toLowerCase()); - } - - public void printHelp() { - System.out.println("\n===== 命令帮助 ====="); - System.out.println("可用命令:"); - for (Map.Entry entry : commands.entrySet()) { - System.out.printf(" %-10s - %s%n", entry.getKey(), entry.getValue().getDescription()); - } - System.out.println(); - } - - public Map getCommands() { - return new HashMap<>(commands); - } -} \ No newline at end of file diff --git a/w12/总代码/src/main/java/com/weibo/hotsearch/command/CommandResult.java b/w12/总代码/src/main/java/com/weibo/hotsearch/command/CommandResult.java deleted file mode 100644 index 0a75e06..0000000 --- a/w12/总代码/src/main/java/com/weibo/hotsearch/command/CommandResult.java +++ /dev/null @@ -1,47 +0,0 @@ -package com.weibo.hotsearch.command; - -public class CommandResult { - - private boolean success; - private String message; - private Object data; - - public CommandResult(boolean success, String message) { - this.success = success; - this.message = message; - } - - public CommandResult(boolean success, String message, Object data) { - this.success = success; - this.message = message; - this.data = data; - } - - public boolean isSuccess() { - return success; - } - - public String getMessage() { - return message; - } - - public Object getData() { - return data; - } - - public static CommandResult success(String message) { - return new CommandResult(true, message); - } - - public static CommandResult success(String message, Object data) { - return new CommandResult(true, message, data); - } - - public static CommandResult failure(String message) { - return new CommandResult(false, message); - } - - public static CommandResult failure(String message, Object data) { - return new CommandResult(false, message, data); - } -} \ No newline at end of file diff --git a/w12/总代码/src/main/java/com/weibo/hotsearch/command/FetchCommand.java b/w12/总代码/src/main/java/com/weibo/hotsearch/command/FetchCommand.java deleted file mode 100644 index 38c3d00..0000000 --- a/w12/总代码/src/main/java/com/weibo/hotsearch/command/FetchCommand.java +++ /dev/null @@ -1,34 +0,0 @@ -package com.weibo.hotsearch.command; - -import com.weibo.hotsearch.exception.ErrorCode; -import com.weibo.hotsearch.exception.HotSearchException; -import com.weibo.hotsearch.service.DataFetcher; - -public class FetchCommand implements Command { - - private final DataFetcher dataFetcher; - private final String source; - - public FetchCommand(DataFetcher dataFetcher, String source) { - this.dataFetcher = dataFetcher; - this.source = source; - } - - @Override - public void execute() throws HotSearchException { - if (source == null || source.isEmpty()) { - throw new HotSearchException(ErrorCode.PARAMETER_ERROR, "数据源不能为空"); - } - dataFetcher.fetch(source); - } - - @Override - public String getCommandName() { - return "fetch"; - } - - @Override - public String getDescription() { - return "从指定数据源获取热搜数据"; - } -} \ No newline at end of file diff --git a/w12/总代码/src/main/java/com/weibo/hotsearch/command/FilterCommand.java b/w12/总代码/src/main/java/com/weibo/hotsearch/command/FilterCommand.java deleted file mode 100644 index 95adfdb..0000000 --- a/w12/总代码/src/main/java/com/weibo/hotsearch/command/FilterCommand.java +++ /dev/null @@ -1,35 +0,0 @@ -package com.weibo.hotsearch.command; - -import com.weibo.hotsearch.exception.ErrorCode; -import com.weibo.hotsearch.exception.HotSearchException; -import com.weibo.hotsearch.service.FilterService; -import com.weibo.hotsearch.strategy.FilterStrategy; - -public class FilterCommand implements Command { - - private final FilterService filterService; - private final FilterStrategy strategy; - - public FilterCommand(FilterService filterService, FilterStrategy strategy) { - this.filterService = filterService; - this.strategy = strategy; - } - - @Override - public void execute() throws HotSearchException { - if (strategy == null) { - throw new HotSearchException(ErrorCode.PARAMETER_ERROR, "过滤策略不能为空"); - } - filterService.filter(strategy); - } - - @Override - public String getCommandName() { - return "filter"; - } - - @Override - public String getDescription() { - return "使用指定策略过滤热搜数据"; - } -} \ No newline at end of file diff --git a/w12/总代码/src/main/java/com/weibo/hotsearch/command/HelpCommand.java b/w12/总代码/src/main/java/com/weibo/hotsearch/command/HelpCommand.java deleted file mode 100644 index 67e1c21..0000000 --- a/w12/总代码/src/main/java/com/weibo/hotsearch/command/HelpCommand.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.weibo.hotsearch.command; - -import com.weibo.hotsearch.exception.HotSearchException; - -public class HelpCommand implements Command { - - private final CommandInvoker invoker; - - public HelpCommand(CommandInvoker invoker) { - this.invoker = invoker; - } - - @Override - public void execute() throws HotSearchException { - invoker.printHelp(); - } - - @Override - public String getCommandName() { - return "help"; - } - - @Override - public String getDescription() { - return "显示帮助信息"; - } -} \ No newline at end of file diff --git a/w12/总代码/src/main/java/com/weibo/hotsearch/command/OutputCommand.java b/w12/总代码/src/main/java/com/weibo/hotsearch/command/OutputCommand.java deleted file mode 100644 index 82aad69..0000000 --- a/w12/总代码/src/main/java/com/weibo/hotsearch/command/OutputCommand.java +++ /dev/null @@ -1,34 +0,0 @@ -package com.weibo.hotsearch.command; - -import com.weibo.hotsearch.exception.ErrorCode; -import com.weibo.hotsearch.exception.HotSearchException; -import com.weibo.hotsearch.service.OutputService; - -public class OutputCommand implements Command { - - private final OutputService outputService; - private final String outputType; - - public OutputCommand(OutputService outputService, String outputType) { - this.outputService = outputService; - this.outputType = outputType; - } - - @Override - public void execute() throws HotSearchException { - if (outputType == null || outputType.isEmpty()) { - throw new HotSearchException(ErrorCode.PARAMETER_ERROR, "输出类型不能为空"); - } - outputService.output(outputType); - } - - @Override - public String getCommandName() { - return "output"; - } - - @Override - public String getDescription() { - return "输出过滤后的热搜数据"; - } -} \ No newline at end of file diff --git a/w12/总代码/src/main/java/com/weibo/hotsearch/command/SaveCommand.java b/w12/总代码/src/main/java/com/weibo/hotsearch/command/SaveCommand.java deleted file mode 100644 index 81b4fa9..0000000 --- a/w12/总代码/src/main/java/com/weibo/hotsearch/command/SaveCommand.java +++ /dev/null @@ -1,30 +0,0 @@ -package com.weibo.hotsearch.command; - -import com.weibo.hotsearch.exception.HotSearchException; -import com.weibo.hotsearch.service.OutputService; - -public class SaveCommand implements Command { - - private final OutputService outputService; - private final String filePath; - - public SaveCommand(OutputService outputService, String filePath) { - this.outputService = outputService; - this.filePath = filePath; - } - - @Override - public void execute() throws HotSearchException { - outputService.saveToFile(filePath); - } - - @Override - public String getCommandName() { - return "save"; - } - - @Override - public String getDescription() { - return "保存数据到文件"; - } -} \ No newline at end of file diff --git a/w12/总代码/src/main/java/com/weibo/hotsearch/controller/HotSearchController.java b/w12/总代码/src/main/java/com/weibo/hotsearch/controller/HotSearchController.java deleted file mode 100644 index 70d5428..0000000 --- a/w12/总代码/src/main/java/com/weibo/hotsearch/controller/HotSearchController.java +++ /dev/null @@ -1,69 +0,0 @@ -package com.weibo.hotsearch.controller; - -import com.weibo.hotsearch.command.*; -import com.weibo.hotsearch.exception.HotSearchException; -import com.weibo.hotsearch.service.DataFetcher; -import com.weibo.hotsearch.service.FilterService; -import com.weibo.hotsearch.service.OutputService; -import com.weibo.hotsearch.strategy.FilterStrategy; -import com.weibo.hotsearch.strategy.FilterStrategyFactory; - -public class HotSearchController { - - private final DataFetcher dataFetcher; - private final FilterService filterService; - private final OutputService outputService; - private final CommandInvoker commandInvoker; - - public HotSearchController() { - this.dataFetcher = new DataFetcher(); - this.filterService = new FilterService(); - this.outputService = new OutputService(); - this.commandInvoker = new CommandInvoker(); - registerCommands(); - } - - private void registerCommands() { - commandInvoker.registerCommand("help", new HelpCommand(commandInvoker)); - } - - public void executeFetch(String source) throws HotSearchException { - FetchCommand command = new FetchCommand(dataFetcher, source); - command.execute(); - System.out.println("已从 " + source + " 获取数据"); - } - - public void executeFilter(String filterCode) throws HotSearchException { - FilterStrategy strategy = FilterStrategyFactory.getStrategy(filterCode); - if (strategy == null) { - throw new HotSearchException(com.weibo.hotsearch.exception.ErrorCode.PARAMETER_ERROR, - "未知的过滤策略: " + filterCode); - } - FilterCommand command = new FilterCommand(filterService, strategy); - command.execute(); - System.out.println("已应用过滤策略: " + strategy.getFilterName()); - } - - public void executeOutput(String outputType) throws HotSearchException { - OutputCommand command = new OutputCommand(outputService, outputType); - command.execute(); - } - - public void executeSave(String filePath) throws HotSearchException { - SaveCommand command = new SaveCommand(outputService, filePath); - command.execute(); - } - - public void showHelp() throws HotSearchException { - commandInvoker.executeCommand("help"); - } - - public void processFullPipeline(String source, String filterCode, String outputType, String savePath) throws HotSearchException { - executeFetch(source); - executeFilter(filterCode); - executeOutput(outputType); - if (savePath != null || !savePath.isEmpty()) { - executeSave(savePath); - } - } -} \ No newline at end of file diff --git a/w12/总代码/src/main/java/com/weibo/hotsearch/exception/CliException.java b/w12/总代码/src/main/java/com/weibo/hotsearch/exception/CliException.java deleted file mode 100644 index 6fad0f6..0000000 --- a/w12/总代码/src/main/java/com/weibo/hotsearch/exception/CliException.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.weibo.hotsearch.exception; - -public class CliException extends HotSearchException { - - public CliException(ErrorCode errorCode) { - super(errorCode); - } - - public CliException(ErrorCode errorCode, Throwable cause) { - super(errorCode, cause); - } - - public CliException(ErrorCode errorCode, String detail) { - super(errorCode, detail); - } - - public CliException(ErrorCode errorCode, String detail, Throwable cause) { - super(errorCode, detail, cause); - } -} \ No newline at end of file diff --git a/w12/总代码/src/main/java/com/weibo/hotsearch/exception/DataParseException.java b/w12/总代码/src/main/java/com/weibo/hotsearch/exception/DataParseException.java deleted file mode 100644 index ea9304c..0000000 --- a/w12/总代码/src/main/java/com/weibo/hotsearch/exception/DataParseException.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.weibo.hotsearch.exception; - -public class DataParseException extends HotSearchException { - - public DataParseException(ErrorCode errorCode) { - super(errorCode); - } - - public DataParseException(ErrorCode errorCode, Throwable cause) { - super(errorCode, cause); - } - - public DataParseException(ErrorCode errorCode, String detail) { - super(errorCode, detail); - } - - public DataParseException(ErrorCode errorCode, String detail, Throwable cause) { - super(errorCode, detail, cause); - } -} \ No newline at end of file diff --git a/w12/总代码/src/main/java/com/weibo/hotsearch/exception/ErrorCode.java b/w12/总代码/src/main/java/com/weibo/hotsearch/exception/ErrorCode.java deleted file mode 100644 index ef8cab8..0000000 --- a/w12/总代码/src/main/java/com/weibo/hotsearch/exception/ErrorCode.java +++ /dev/null @@ -1,47 +0,0 @@ -package com.weibo.hotsearch.exception; - -public enum ErrorCode { - - // 通用错误 - SUCCESS(0, "操作成功"), - UNKNOWN_ERROR(1000, "未知错误"), - PARAMETER_ERROR(1001, "参数错误"), - NOT_FOUND(1002, "资源未找到"), - DUPLICATE_ERROR(1003, "重复操作"), - - // CLI错误 - CLI_PARSE_ERROR(2001, "命令行参数解析错误"), - CLI_COMMAND_NOT_FOUND(2002, "命令未找到"), - CLI_INVALID_OPTION(2003, "无效的选项"), - - // 网络错误 - NETWORK_ERROR(3001, "网络请求失败"), - CONNECTION_TIMEOUT(3002, "连接超时"), - HTTP_ERROR(3003, "HTTP请求错误"), - - // 数据错误 - DATA_PARSE_ERROR(4001, "数据解析失败"), - DATA_FORMAT_ERROR(4002, "数据格式错误"), - DATA_EMPTY(4003, "数据为空"), - - // 服务错误 - SERVICE_UNAVAILABLE(5001, "服务不可用"), - SERVICE_RATE_LIMITED(5002, "请求被限流"), - AUTHENTICATION_FAILED(5003, "认证失败"); - - private final int code; - private final String message; - - ErrorCode(int code, String message) { - this.code = code; - this.message = message; - } - - public int getCode() { - return code; - } - - public String getMessage() { - return message; - } -} \ No newline at end of file diff --git a/w12/总代码/src/main/java/com/weibo/hotsearch/exception/HotSearchException.java b/w12/总代码/src/main/java/com/weibo/hotsearch/exception/HotSearchException.java deleted file mode 100644 index 4869c81..0000000 --- a/w12/总代码/src/main/java/com/weibo/hotsearch/exception/HotSearchException.java +++ /dev/null @@ -1,30 +0,0 @@ -package com.weibo.hotsearch.exception; - -public class HotSearchException extends Exception { - - private final ErrorCode errorCode; - - public HotSearchException(ErrorCode errorCode) { - super(errorCode.getMessage()); - this.errorCode = errorCode; - } - - public HotSearchException(ErrorCode errorCode, Throwable cause) { - super(errorCode.getMessage(), cause); - this.errorCode = errorCode; - } - - public HotSearchException(ErrorCode errorCode, String detail) { - super(errorCode.getMessage() + ": " + detail); - this.errorCode = errorCode; - } - - public HotSearchException(ErrorCode errorCode, String detail, Throwable cause) { - super(errorCode.getMessage() + ": " + detail, cause); - this.errorCode = errorCode; - } - - public ErrorCode getErrorCode() { - return errorCode; - } -} \ No newline at end of file diff --git a/w12/总代码/src/main/java/com/weibo/hotsearch/exception/NetworkException.java b/w12/总代码/src/main/java/com/weibo/hotsearch/exception/NetworkException.java deleted file mode 100644 index d1db694..0000000 --- a/w12/总代码/src/main/java/com/weibo/hotsearch/exception/NetworkException.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.weibo.hotsearch.exception; - -public class NetworkException extends HotSearchException { - - public NetworkException(ErrorCode errorCode) { - super(errorCode); - } - - public NetworkException(ErrorCode errorCode, Throwable cause) { - super(errorCode, cause); - } - - public NetworkException(ErrorCode errorCode, String detail) { - super(errorCode, detail); - } - - public NetworkException(ErrorCode errorCode, String detail, Throwable cause) { - super(errorCode, detail, cause); - } -} \ No newline at end of file diff --git a/w12/总代码/src/main/java/com/weibo/hotsearch/model/AppContext.java b/w12/总代码/src/main/java/com/weibo/hotsearch/model/AppContext.java deleted file mode 100644 index 2c95b9e..0000000 --- a/w12/总代码/src/main/java/com/weibo/hotsearch/model/AppContext.java +++ /dev/null @@ -1,49 +0,0 @@ -package com.weibo.hotsearch.model; - -import java.util.HashMap; -import java.util.Map; - -public class AppContext { - - private static final AppContext instance = new AppContext(); - - private final Map attributes = new HashMap<>(); - - private HotSearchResult currentResult; - - private AppContext() { - } - - public static AppContext getInstance() { - return instance; - } - - public void setAttribute(String key, Object value) { - attributes.put(key, value); - } - - public Object getAttribute(String key) { - return attributes.get(key); - } - - public void removeAttribute(String key) { - attributes.remove(key); - } - - public boolean hasAttribute(String key) { - return attributes.containsKey(key); - } - - public HotSearchResult getCurrentResult() { - return currentResult; - } - - public void setCurrentResult(HotSearchResult currentResult) { - this.currentResult = currentResult; - } - - public void clear() { - attributes.clear(); - currentResult = null; - } -} \ No newline at end of file diff --git a/w12/总代码/src/main/java/com/weibo/hotsearch/model/HotSearchItem.java b/w12/总代码/src/main/java/com/weibo/hotsearch/model/HotSearchItem.java deleted file mode 100644 index b97131c..0000000 --- a/w12/总代码/src/main/java/com/weibo/hotsearch/model/HotSearchItem.java +++ /dev/null @@ -1,69 +0,0 @@ -package com.weibo.hotsearch.model; - -import java.time.LocalDateTime; - -public class HotSearchItem { - - private String title; - private long hotValue; - private int rank; - private String source; - private LocalDateTime fetchTime; - - public HotSearchItem() { - } - - public HotSearchItem(String title, long hotValue, int rank, String source) { - this.title = title; - this.hotValue = hotValue; - this.rank = rank; - this.source = source; - this.fetchTime = LocalDateTime.now(); - } - - public String getTitle() { - return title; - } - - public void setTitle(String title) { - this.title = title; - } - - public long getHotValue() { - return hotValue; - } - - public void setHotValue(long hotValue) { - this.hotValue = hotValue; - } - - public int getRank() { - return rank; - } - - public void setRank(int rank) { - this.rank = rank; - } - - public String getSource() { - return source; - } - - public void setSource(String source) { - this.source = source; - } - - public LocalDateTime getFetchTime() { - return fetchTime; - } - - public void setFetchTime(LocalDateTime fetchTime) { - this.fetchTime = fetchTime; - } - - @Override - public String toString() { - return String.format("HotSearchItem{title='%s', hotValue=%d, rank=%d, source='%s'}", - title, hotValue, rank, source); - } -} \ No newline at end of file diff --git a/w12/总代码/src/main/java/com/weibo/hotsearch/model/HotSearchResult.java b/w12/总代码/src/main/java/com/weibo/hotsearch/model/HotSearchResult.java deleted file mode 100644 index a8cdcd4..0000000 --- a/w12/总代码/src/main/java/com/weibo/hotsearch/model/HotSearchResult.java +++ /dev/null @@ -1,75 +0,0 @@ -package com.weibo.hotsearch.model; - -import java.time.LocalDateTime; -import java.util.ArrayList; -import java.util.List; - -public class HotSearchResult { - - private List items; - private String filterName; - private String dataSource; - private LocalDateTime fetchTime; - private int totalCount; - - public HotSearchResult() { - this.items = new ArrayList<>(); - this.fetchTime = LocalDateTime.now(); - } - - public HotSearchResult(List items, String filterName, String dataSource) { - this.items = items != null ? items : new ArrayList<>(); - this.filterName = filterName; - this.dataSource = dataSource; - this.fetchTime = LocalDateTime.now(); - this.totalCount = this.items.size(); - } - - public List getItems() { - return items; - } - - public void setItems(List items) { - this.items = items != null ? items : new ArrayList<>(); - this.totalCount = this.items.size(); - } - - public String getFilterName() { - return filterName; - } - - public void setFilterName(String filterName) { - this.filterName = filterName; - } - - public String getDataSource() { - return dataSource; - } - - public void setDataSource(String dataSource) { - this.dataSource = dataSource; - } - - public LocalDateTime getFetchTime() { - return fetchTime; - } - - public void setFetchTime(LocalDateTime fetchTime) { - this.fetchTime = fetchTime; - } - - public int getTotalCount() { - return totalCount; - } - - public void addItem(HotSearchItem item) { - if (item != null) { - this.items.add(item); - this.totalCount++; - } - } - - public boolean isEmpty() { - return items == null || items.isEmpty(); - } -} \ No newline at end of file diff --git a/w12/总代码/src/main/java/com/weibo/hotsearch/service/DataFetcher.java b/w12/总代码/src/main/java/com/weibo/hotsearch/service/DataFetcher.java deleted file mode 100644 index 07d2055..0000000 --- a/w12/总代码/src/main/java/com/weibo/hotsearch/service/DataFetcher.java +++ /dev/null @@ -1,307 +0,0 @@ -package com.weibo.hotsearch.service; - -import com.alibaba.fastjson2.JSONArray; -import com.alibaba.fastjson2.JSONObject; -import com.weibo.hotsearch.exception.DataParseException; -import com.weibo.hotsearch.exception.ErrorCode; -import com.weibo.hotsearch.exception.HotSearchException; -import com.weibo.hotsearch.exception.NetworkException; -import com.weibo.hotsearch.model.AppContext; -import com.weibo.hotsearch.model.HotSearchItem; -import com.weibo.hotsearch.model.HotSearchResult; -import org.apache.hc.client5.http.fluent.Request; -import org.apache.hc.core5.util.Timeout; - -import java.nio.charset.StandardCharsets; -import java.time.LocalDateTime; -import java.util.ArrayList; -import java.util.List; - -public class DataFetcher { - - private static final String WEIBO_URL = "https://weibo.com/ajax/side/hotSearch"; - private static final String TIEBA_URL = "https://tieba.baidu.com/hottopic/browse/topicList"; - private static final String ZHIHU_URL = "https://www.zhihu.com/api/v4/search/top_search"; - - private static final int CONNECT_TIMEOUT = 10000; - private static final int RESPONSE_TIMEOUT = 10000; - private static final int MAX_RETRIES = 3; - - public void fetch(String source) throws HotSearchException { - List items = new ArrayList<>(); - - switch (source.toLowerCase()) { - case "weibo": - items = fetchWeibo(); - break; - case "tieba": - items = fetchTieba(); - break; - case "zhihu": - items = fetchZhihu(); - break; - case "all": - items.addAll(fetchWeibo()); - items.addAll(fetchTieba()); - items.addAll(fetchZhihu()); - break; - default: - throw new HotSearchException(ErrorCode.PARAMETER_ERROR, "未知数据源: " + source); - } - - HotSearchResult result = new HotSearchResult(items, null, source); - AppContext.getInstance().setCurrentResult(result); - } - - private List fetchWeibo() throws HotSearchException { - List items = new ArrayList<>(); - try { - String json = fetchUrlWithRetry(WEIBO_URL, "https://weibo.com/"); - JSONObject root = JSONObject.parseObject(json); - - if (!root.containsKey("data")) { - throw new DataParseException(ErrorCode.DATA_FORMAT_ERROR, "微博数据格式错误"); - } - - JSONObject data = root.getJSONObject("data"); - if (!data.containsKey("realtime")) { - throw new DataParseException(ErrorCode.DATA_EMPTY, "微博数据为空"); - } - - JSONArray realtime = data.getJSONArray("realtime"); - for (int i = 0; i < realtime.size(); i++) { - JSONObject item = realtime.getJSONObject(i); - if (item != null) { - HotSearchItem hotItem = parseWeiboItem(item); - if (hotItem != null) { - items.add(hotItem); - } - } - } - } catch (NetworkException e) { - throw e; - } catch (Exception e) { - throw new DataParseException(ErrorCode.DATA_PARSE_ERROR, "微博数据解析失败", e); - } - return items; - } - - private HotSearchItem parseWeiboItem(JSONObject item) { - String word = item.getString("word"); - if (word == null || word.isEmpty()) { - return null; - } - long num = item.getLongValue("num", 0); - int rank = item.getIntValue("rank", 0); - return new HotSearchItem(word, num, rank, "微博"); - } - - private List fetchTieba() throws HotSearchException { - List items = new ArrayList<>(); - try { - String json = fetchUrlWithRetry(TIEBA_URL, "https://tieba.baidu.com/"); - JSONObject root = JSONObject.parseObject(json); - - if (!root.containsKey("data")) { - throw new DataParseException(ErrorCode.DATA_FORMAT_ERROR, "贴吧数据格式错误"); - } - - JSONObject data = root.getJSONObject("data"); - if (!data.containsKey("bang_topic")) { - throw new DataParseException(ErrorCode.DATA_EMPTY, "贴吧数据为空"); - } - - JSONArray topics = data.getJSONArray("bang_topic"); - for (int i = 0; i < topics.size(); i++) { - JSONObject item = topics.getJSONObject(i); - if (item != null) { - HotSearchItem hotItem = parseTiebaItem(item, i + 1); - if (hotItem != null) { - items.add(hotItem); - } - } - } - } catch (NetworkException e) { - throw e; - } catch (Exception e) { - throw new DataParseException(ErrorCode.DATA_PARSE_ERROR, "贴吧数据解析失败", e); - } - return items; - } - - private HotSearchItem parseTiebaItem(JSONObject item, int index) { - String topicName = item.getString("topic_name"); - if (topicName == null || topicName.isEmpty()) { - return null; - } - int readNum = item.getIntValue("read_num", 0); - int discussNum = item.getIntValue("discuss_num", 0); - return new HotSearchItem(topicName, (long) readNum + discussNum, 0, "百度贴吧"); - } - - private List fetchZhihu() throws HotSearchException { - List items = new ArrayList<>(); - try { - String json = fetchUrlWithRetry(ZHIHU_URL, "https://zhuanlan.zhihu.com/"); - JSONObject root = JSONObject.parseObject(json); - - JSONArray data = findZhihuData(root, json); - if (data == null || data.isEmpty()) { - throw new DataParseException(ErrorCode.DATA_EMPTY, "知乎数据为空"); - } - - for (int i = 0; i < data.size(); i++) { - JSONObject item = data.getJSONObject(i); - if (item != null) { - HotSearchItem hotItem = parseZhihuItem(item, i + 1); - if (hotItem != null) { - items.add(hotItem); - } - } - } - } catch (NetworkException e) { - throw e; - } catch (Exception e) { - throw new DataParseException(ErrorCode.DATA_PARSE_ERROR, "知乎数据解析失败", e); - } - return items; - } - - private JSONArray findZhihuData(JSONObject root, String json) { - if (root.containsKey("data") && root.get("data") instanceof JSONArray) { - return root.getJSONArray("data"); - } else if (root.containsKey("data")) { - JSONObject dataObj = root.getJSONObject("data"); - if (dataObj != null && dataObj.containsKey("topics")) { - return dataObj.getJSONArray("topics"); - } - } else if (root.containsKey("top_search")) { - JSONObject topSearch = root.getJSONObject("top_search"); - if (topSearch != null && topSearch.containsKey("words")) { - return topSearch.getJSONArray("words"); - } - } else if (json.startsWith("[")) { - return JSONArray.parseArray(json); - } - return null; - } - - private HotSearchItem parseZhihuItem(JSONObject item, int index) { - String title = getItemTitle(item); - if (title == null || title.isEmpty()) { - return null; - } - - long hotValue = 0; - if (item.containsKey("hot_score")) { - hotValue = item.getLongValue("hot_score", 0); - } else if (item.containsKey("score")) { - hotValue = item.getLongValue("score", 0); - } else if (item.containsKey("detail_text")) { - String detailText = item.getString("detail_text"); - if (detailText != null) { - try { - String numStr = detailText.replaceAll("[^0-9]", ""); - if (!numStr.isEmpty()) { - hotValue = Long.parseLong(numStr); - } - } catch (Exception e) { - hotValue = 0; - } - } - } - - return new HotSearchItem(title, hotValue, index, "知乎"); - } - - private String getItemTitle(JSONObject item) { - if (item == null) { - return null; - } - - String title = item.getString("title"); - if (title != null && !title.isEmpty()) { - return title; - } - - title = item.getString("topic_title"); - if (title != null && !title.isEmpty()) { - return title; - } - - title = item.getString("name"); - if (title != null && !title.isEmpty()) { - return title; - } - - if (item.containsKey("target")) { - JSONObject target = item.getJSONObject("target"); - if (target != null) { - title = target.getString("title"); - if (title != null && !title.isEmpty()) { - return title; - } - } - } - - title = item.getString("display_query"); - if (title != null && !title.isEmpty()) { - return title; - } - - return item.getString("query"); - } - - private String fetchUrlWithRetry(String url, String referer) throws NetworkException { - int retryCount = 0; - Exception lastException = null; - - while (retryCount < MAX_RETRIES) { - try { - return Request.get(url) - .addHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36") - .addHeader("Referer", referer) - .addHeader("Accept", "application/json, text/plain, */*;charset=UTF-8") - .addHeader("Accept-Language", "zh-CN,zh;q=0.9,en;q=0.8") - .addHeader("Accept-Encoding", "identity") - .addHeader("Connection", "keep-alive") - .addHeader("Content-Type", "application/json;charset=UTF-8") - .connectTimeout(Timeout.ofMilliseconds(CONNECT_TIMEOUT)) - .responseTimeout(Timeout.ofMilliseconds(RESPONSE_TIMEOUT)) - .execute() - .returnContent() - .asString(StandardCharsets.UTF_8); - } catch (java.net.SocketTimeoutException e) { - lastException = e; - retryCount++; - if (retryCount >= MAX_RETRIES) { - throw new NetworkException(ErrorCode.CONNECTION_TIMEOUT, "连接超时", e); - } - sleep(2000); - } catch (java.net.ConnectException e) { - lastException = e; - retryCount++; - if (retryCount >= MAX_RETRIES) { - throw new NetworkException(ErrorCode.NETWORK_ERROR, "连接失败", e); - } - sleep(2000); - } catch (Exception e) { - lastException = e; - retryCount++; - if (retryCount >= MAX_RETRIES) { - throw new NetworkException(ErrorCode.NETWORK_ERROR, "网络请求失败", e); - } - sleep(2000); - } - } - throw new NetworkException(ErrorCode.NETWORK_ERROR, "网络请求失败", lastException); - } - - private void sleep(long millis) { - try { - Thread.sleep(millis); - } catch (InterruptedException e) { - Thread.currentThread().interrupt(); - } - } -} \ No newline at end of file diff --git a/w12/总代码/src/main/java/com/weibo/hotsearch/service/FilterService.java b/w12/总代码/src/main/java/com/weibo/hotsearch/service/FilterService.java deleted file mode 100644 index 0778cb1..0000000 --- a/w12/总代码/src/main/java/com/weibo/hotsearch/service/FilterService.java +++ /dev/null @@ -1,44 +0,0 @@ -package com.weibo.hotsearch.service; - -import com.alibaba.fastjson2.JSONObject; -import com.weibo.hotsearch.exception.ErrorCode; -import com.weibo.hotsearch.exception.HotSearchException; -import com.weibo.hotsearch.model.AppContext; -import com.weibo.hotsearch.model.HotSearchItem; -import com.weibo.hotsearch.model.HotSearchResult; -import com.weibo.hotsearch.strategy.FilterStrategy; - -import java.util.ArrayList; -import java.util.List; - -public class FilterService { - - public void filter(FilterStrategy strategy) throws HotSearchException { - HotSearchResult currentResult = AppContext.getInstance().getCurrentResult(); - - if (currentResult == null || currentResult.isEmpty()) { - throw new HotSearchException(ErrorCode.DATA_EMPTY, "没有可过滤的数据,请先获取数据"); - } - - List filteredItems = new ArrayList<>(); - - for (HotSearchItem item : currentResult.getItems()) { - JSONObject jsonItem = convertToJson(item); - if (strategy.match(jsonItem)) { - filteredItems.add(item); - } - } - - HotSearchResult filteredResult = new HotSearchResult(filteredItems, strategy.getFilterName(), currentResult.getDataSource()); - AppContext.getInstance().setCurrentResult(filteredResult); - } - - private JSONObject convertToJson(HotSearchItem item) { - JSONObject json = new JSONObject(); - json.put("word", item.getTitle()); - json.put("title", item.getTitle()); - json.put("num", item.getHotValue()); - json.put("rank", item.getRank()); - return json; - } -} \ No newline at end of file diff --git a/w12/总代码/src/main/java/com/weibo/hotsearch/service/OutputService.java b/w12/总代码/src/main/java/com/weibo/hotsearch/service/OutputService.java deleted file mode 100644 index 68fc6c4..0000000 --- a/w12/总代码/src/main/java/com/weibo/hotsearch/service/OutputService.java +++ /dev/null @@ -1,66 +0,0 @@ -package com.weibo.hotsearch.service; - -import com.weibo.hotsearch.exception.ErrorCode; -import com.weibo.hotsearch.exception.HotSearchException; -import com.weibo.hotsearch.model.AppContext; -import com.weibo.hotsearch.model.HotSearchResult; -import com.weibo.hotsearch.view.TextView; -import com.weibo.hotsearch.view.View; -import com.weibo.hotsearch.view.ViewFactory; - -import java.io.BufferedWriter; -import java.io.File; -import java.io.FileWriter; -import java.io.IOException; -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -public class OutputService { - - private static final DateTimeFormatter FILE_FORMATTER = DateTimeFormatter.ofPattern("yyyyMMdd_HHmmss"); - private static final String OUTPUT_DIR = "hotsearch_results"; - - public void output(String outputType) throws HotSearchException { - HotSearchResult result = AppContext.getInstance().getCurrentResult(); - - if (result == null) { - throw new HotSearchException(ErrorCode.DATA_EMPTY, "没有可输出的数据"); - } - - View view = ViewFactory.getView(outputType); - view.render(result); - } - - public void saveToFile(String filePath) throws HotSearchException { - HotSearchResult result = AppContext.getInstance().getCurrentResult(); - - if (result == null) { - throw new HotSearchException(ErrorCode.DATA_EMPTY, "没有可保存的数据"); - } - - try { - File dir = new File(OUTPUT_DIR); - if (!dir.exists()) { - dir.mkdirs(); - } - - String actualPath = filePath; - if (filePath == null || filePath.isEmpty()) { - String timestamp = LocalDateTime.now().format(FILE_FORMATTER); - actualPath = OUTPUT_DIR + File.separator + "hotsearch_" + timestamp + ".txt"; - } - - TextView textView = (TextView) ViewFactory.getView("text"); - String content = textView.renderToString(result); - - try (BufferedWriter writer = new BufferedWriter(new FileWriter(actualPath))) { - writer.write(content); - } - - System.out.println("\n结果已保存到文件: " + actualPath); - - } catch (IOException e) { - throw new HotSearchException(ErrorCode.UNKNOWN_ERROR, "保存文件失败", e); - } - } -} \ No newline at end of file diff --git a/w12/总代码/src/main/java/com/weibo/hotsearch/strategy/FilterStrategy.java b/w12/总代码/src/main/java/com/weibo/hotsearch/strategy/FilterStrategy.java deleted file mode 100644 index c5924bd..0000000 --- a/w12/总代码/src/main/java/com/weibo/hotsearch/strategy/FilterStrategy.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.weibo.hotsearch.strategy; - -import com.alibaba.fastjson2.JSONObject; - -public interface FilterStrategy { - - boolean match(JSONObject item); - - String getFilterName(); - - String getFilterCode(); -} \ No newline at end of file diff --git a/w12/总代码/src/main/java/com/weibo/hotsearch/strategy/FilterStrategyFactory.java b/w12/总代码/src/main/java/com/weibo/hotsearch/strategy/FilterStrategyFactory.java deleted file mode 100644 index 779067f..0000000 --- a/w12/总代码/src/main/java/com/weibo/hotsearch/strategy/FilterStrategyFactory.java +++ /dev/null @@ -1,30 +0,0 @@ -package com.weibo.hotsearch.strategy; - -import java.util.HashMap; -import java.util.Map; - -public class FilterStrategyFactory { - - private static final Map strategies = new HashMap<>(); - - static { - strategies.put("star", new StarFilterStrategy()); - strategies.put("sports", new SportsFilterStrategy()); - strategies.put("policy", new PolicyFilterStrategy()); - } - - public static FilterStrategy getStrategy(String code) { - if (code == null || code.isEmpty()) { - return null; - } - return strategies.get(code.toLowerCase()); - } - - public static Map getAllStrategies() { - return new HashMap<>(strategies); - } - - public static boolean hasStrategy(String code) { - return code != null && strategies.containsKey(code.toLowerCase()); - } -} \ No newline at end of file diff --git a/w12/总代码/src/main/java/com/weibo/hotsearch/strategy/PolicyFilterStrategy.java b/w12/总代码/src/main/java/com/weibo/hotsearch/strategy/PolicyFilterStrategy.java deleted file mode 100644 index 11ccdaf..0000000 --- a/w12/总代码/src/main/java/com/weibo/hotsearch/strategy/PolicyFilterStrategy.java +++ /dev/null @@ -1,55 +0,0 @@ -package com.weibo.hotsearch.strategy; - -import com.alibaba.fastjson2.JSONObject; - -public class PolicyFilterStrategy implements FilterStrategy { - - private static final String[] KEYWORDS = { - "政策", "新规", "条例", "法规", "通知", "公告", "发布", - "国务院", "发改委", "财政部", "教育部", "工信部", "科技部", - "税收", "补贴", "优惠", "扶持", "改革", "开放", "创新", - "十四五", "计划", "规划", "方案", "意见", "办法", "细则", - "经济", "金融", "市场", "监管", "安全", "环保", "绿色" - }; - - @Override - public boolean match(JSONObject item) { - if (item == null) { - return false; - } - String word = getItemTitle(item); - if (word == null || word.isEmpty()) { - return false; - } - for (String keyword : KEYWORDS) { - if (word.contains(keyword)) { - return true; - } - } - return false; - } - - @Override - public String getFilterName() { - return "国家政策相关热搜"; - } - - @Override - public String getFilterCode() { - return "policy"; - } - - private String getItemTitle(JSONObject item) { - String title = item.getString("word"); - if (title == null || title.isEmpty()) { - title = item.getString("topic_name"); - } - if (title == null || title.isEmpty()) { - title = item.getString("title"); - } - if (title == null || title.isEmpty()) { - title = item.getString("name"); - } - return title; - } -} \ No newline at end of file diff --git a/w12/总代码/src/main/java/com/weibo/hotsearch/strategy/SportsFilterStrategy.java b/w12/总代码/src/main/java/com/weibo/hotsearch/strategy/SportsFilterStrategy.java deleted file mode 100644 index 2b26650..0000000 --- a/w12/总代码/src/main/java/com/weibo/hotsearch/strategy/SportsFilterStrategy.java +++ /dev/null @@ -1,54 +0,0 @@ -package com.weibo.hotsearch.strategy; - -import com.alibaba.fastjson2.JSONObject; - -public class SportsFilterStrategy implements FilterStrategy { - - private static final String[] KEYWORDS = { - "足球", "篮球", "世界杯", "NBA", "CBA", "奥运会", "世锦赛", - "冠军", "比赛", "夺冠", "进球", "比分", "运动员", "国足", - "乒乓", "排球", "羽毛球", "游泳", "田径", "体操", "跳水", - "MVP", "转会", "联赛", "中超", "英超", "西甲", "欧冠" - }; - - @Override - public boolean match(JSONObject item) { - if (item == null) { - return false; - } - String word = getItemTitle(item); - if (word == null || word.isEmpty()) { - return false; - } - for (String keyword : KEYWORDS) { - if (word.contains(keyword)) { - return true; - } - } - return false; - } - - @Override - public String getFilterName() { - return "体育相关热搜"; - } - - @Override - public String getFilterCode() { - return "sports"; - } - - private String getItemTitle(JSONObject item) { - String title = item.getString("word"); - if (title == null || title.isEmpty()) { - title = item.getString("topic_name"); - } - if (title == null || title.isEmpty()) { - title = item.getString("title"); - } - if (title == null || title.isEmpty()) { - title = item.getString("name"); - } - return title; - } -} \ No newline at end of file diff --git a/w12/总代码/src/main/java/com/weibo/hotsearch/strategy/StarFilterStrategy.java b/w12/总代码/src/main/java/com/weibo/hotsearch/strategy/StarFilterStrategy.java deleted file mode 100644 index 6c93768..0000000 --- a/w12/总代码/src/main/java/com/weibo/hotsearch/strategy/StarFilterStrategy.java +++ /dev/null @@ -1,76 +0,0 @@ -package com.weibo.hotsearch.strategy; - -import com.alibaba.fastjson2.JSONObject; - -public class StarFilterStrategy implements FilterStrategy { - - private static final String[] KEYWORDS = { - "明星", "演员", "歌手", "爱豆", "艺人", "红毯", "综艺", "新剧", - "恋情", "官宣", "演唱会", "代言", "造型", "封面" - }; - - @Override - public boolean match(JSONObject item) { - if (item == null) { - return false; - } - String word = getItemTitle(item); - if (word == null || word.isEmpty()) { - return false; - } - for (String keyword : KEYWORDS) { - if (word.contains(keyword)) { - return true; - } - } - return false; - } - - @Override - public String getFilterName() { - return "明星相关热搜"; - } - - @Override - public String getFilterCode() { - return "star"; - } - - private String getItemTitle(JSONObject item) { - if (item == null) { - return null; - } - - String title = item.getString("word"); - if (title != null && !title.isEmpty()) { - return title; - } - - title = item.getString("topic_name"); - if (title != null && !title.isEmpty()) { - return title; - } - - title = item.getString("title"); - if (title != null && !title.isEmpty()) { - return title; - } - - title = item.getString("name"); - if (title != null && !title.isEmpty()) { - return title; - } - - if (item.containsKey("target")) { - JSONObject target = item.getJSONObject("target"); - if (target != null) { - title = target.getString("title"); - if (title != null && !title.isEmpty()) { - return title; - } - } - } - - return title; - } -} \ No newline at end of file diff --git a/w12/总代码/src/main/java/com/weibo/hotsearch/view/ConsoleView.java b/w12/总代码/src/main/java/com/weibo/hotsearch/view/ConsoleView.java deleted file mode 100644 index 34253d6..0000000 --- a/w12/总代码/src/main/java/com/weibo/hotsearch/view/ConsoleView.java +++ /dev/null @@ -1,51 +0,0 @@ -package com.weibo.hotsearch.view; - -import com.weibo.hotsearch.model.HotSearchItem; -import com.weibo.hotsearch.model.HotSearchResult; - -import java.time.format.DateTimeFormatter; - -public class ConsoleView implements View { - - private static final DateTimeFormatter FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); - - @Override - public void render(HotSearchResult result) { - if (result == null) { - System.out.println("没有数据可显示"); - return; - } - - System.out.println("\n===== " + (result.getFilterName() != null ? result.getFilterName() : "热搜结果") + " ====="); - System.out.println("数据源: " + result.getDataSource()); - System.out.println("采集时间: " + result.getFetchTime().format(FORMATTER)); - System.out.println("----------------------------------------"); - - if (result.isEmpty()) { - System.out.println("当前暂无符合条件的热搜内容"); - } else { - for (int i = 0; i < result.getItems().size(); i++) { - HotSearchItem item = result.getItems().get(i); - String line = formatItem(item, i); - System.out.println(line); - } - } - - System.out.println("\n===== 热搜总数:" + result.getTotalCount() + " 条 ====="); - } - - private String formatItem(HotSearchItem item, int index) { - if (item.getRank() > 0) { - return String.format("排名:%d\t热度:%d\t来源:%s\t热搜:%s", - item.getRank(), item.getHotValue(), item.getSource(), item.getTitle()); - } else { - return String.format("序号:%d\t热度:%d\t来源:%s\t热搜:%s", - index + 1, item.getHotValue(), item.getSource(), item.getTitle()); - } - } - - @Override - public String getViewType() { - return "console"; - } -} \ No newline at end of file diff --git a/w12/总代码/src/main/java/com/weibo/hotsearch/view/TextView.java b/w12/总代码/src/main/java/com/weibo/hotsearch/view/TextView.java deleted file mode 100644 index 4691a24..0000000 --- a/w12/总代码/src/main/java/com/weibo/hotsearch/view/TextView.java +++ /dev/null @@ -1,83 +0,0 @@ -package com.weibo.hotsearch.view; - -import com.weibo.hotsearch.model.HotSearchItem; -import com.weibo.hotsearch.model.HotSearchResult; - -import java.time.format.DateTimeFormatter; -import java.util.StringJoiner; - -public class TextView implements View { - - private static final DateTimeFormatter FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); - - @Override - public void render(HotSearchResult result) { - if (result == null) { - System.out.println("没有数据可显示"); - return; - } - - StringJoiner sj = new StringJoiner("\n"); - - sj.add("===== " + (result.getFilterName() != null ? result.getFilterName() : "热搜结果") + " ====="); - sj.add("数据源: " + result.getDataSource()); - sj.add("采集时间: " + result.getFetchTime().format(FORMATTER)); - sj.add("----------------------------------------"); - - if (result.isEmpty()) { - sj.add("当前暂无符合条件的热搜内容"); - } else { - for (int i = 0; i < result.getItems().size(); i++) { - HotSearchItem item = result.getItems().get(i); - sj.add(formatItem(item, i)); - } - } - - sj.add(""); - sj.add("===== 热搜总数:" + result.getTotalCount() + " 条 ====="); - - System.out.println(sj.toString()); - } - - private String formatItem(HotSearchItem item, int index) { - if (item.getRank() > 0) { - return String.format("排名:%d\t热度:%d\t来源:%s\t热搜:%s", - item.getRank(), item.getHotValue(), item.getSource(), item.getTitle()); - } else { - return String.format("序号:%d\t热度:%d\t来源:%s\t热搜:%s", - index + 1, item.getHotValue(), item.getSource(), item.getTitle()); - } - } - - public String renderToString(HotSearchResult result) { - if (result == null) { - return "没有数据可显示"; - } - - StringJoiner sj = new StringJoiner("\n"); - - sj.add("===== " + (result.getFilterName() != null ? result.getFilterName() : "热搜结果") + " ====="); - sj.add("数据源: " + result.getDataSource()); - sj.add("采集时间: " + result.getFetchTime().format(FORMATTER)); - sj.add("----------------------------------------"); - - if (result.isEmpty()) { - sj.add("当前暂无符合条件的热搜内容"); - } else { - for (int i = 0; i < result.getItems().size(); i++) { - HotSearchItem item = result.getItems().get(i); - sj.add(formatItem(item, i)); - } - } - - sj.add(""); - sj.add("===== 热搜总数:" + result.getTotalCount() + " 条 ====="); - - return sj.toString(); - } - - @Override - public String getViewType() { - return "text"; - } -} \ No newline at end of file diff --git a/w12/总代码/src/main/java/com/weibo/hotsearch/view/View.java b/w12/总代码/src/main/java/com/weibo/hotsearch/view/View.java deleted file mode 100644 index 754eff4..0000000 --- a/w12/总代码/src/main/java/com/weibo/hotsearch/view/View.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.weibo.hotsearch.view; - -import com.weibo.hotsearch.model.HotSearchResult; - -public interface View { - - void render(HotSearchResult result); - - String getViewType(); -} \ No newline at end of file diff --git a/w12/总代码/src/main/java/com/weibo/hotsearch/view/ViewFactory.java b/w12/总代码/src/main/java/com/weibo/hotsearch/view/ViewFactory.java deleted file mode 100644 index 719ffe9..0000000 --- a/w12/总代码/src/main/java/com/weibo/hotsearch/view/ViewFactory.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.weibo.hotsearch.view; - -import java.util.HashMap; -import java.util.Map; - -public class ViewFactory { - - private static final Map views = new HashMap<>(); - - static { - views.put("console", new ConsoleView()); - views.put("text", new TextView()); - } - - public static View getView(String type) { - if (type == null || type.isEmpty()) { - return views.get("console"); - } - return views.getOrDefault(type.toLowerCase(), views.get("console")); - } - - public static boolean hasView(String type) { - return type != null && views.containsKey(type.toLowerCase()); - } - - public static Map getAllViews() { - return new HashMap<>(views); - } -} \ No newline at end of file diff --git a/w12/总代码/src/run.bat b/w12/总代码/src/run.bat deleted file mode 100644 index 4fa4d4d..0000000 --- a/w12/总代码/src/run.bat +++ /dev/null @@ -1,4 +0,0 @@ -@echo off -set CLASSPATH=target\classes;C:\Users\ruiruirui\.m2\repository\org\jsoup\jsoup\1.17.2\jsoup-1.17.2.jar -java WeiboHotSearcha -pause \ No newline at end of file diff --git a/w12/总代码/target/classes/WeiboStarHotSearcha.class b/w12/总代码/target/classes/WeiboStarHotSearcha.class deleted file mode 100644 index b357cea..0000000 Binary files a/w12/总代码/target/classes/WeiboStarHotSearcha.class and /dev/null differ diff --git a/w12/总代码/target/classes/com/weibo/hotsearch/ConsoleOutputHandler.class b/w12/总代码/target/classes/com/weibo/hotsearch/ConsoleOutputHandler.class deleted file mode 100644 index 73999e2..0000000 Binary files a/w12/总代码/target/classes/com/weibo/hotsearch/ConsoleOutputHandler.class and /dev/null differ diff --git a/w12/总代码/target/classes/com/weibo/hotsearch/HotSearchFilter.class b/w12/总代码/target/classes/com/weibo/hotsearch/HotSearchFilter.class deleted file mode 100644 index 56a2f04..0000000 Binary files a/w12/总代码/target/classes/com/weibo/hotsearch/HotSearchFilter.class and /dev/null differ diff --git a/w12/总代码/target/classes/com/weibo/hotsearch/Main.class b/w12/总代码/target/classes/com/weibo/hotsearch/Main.class deleted file mode 100644 index 0326206..0000000 Binary files a/w12/总代码/target/classes/com/weibo/hotsearch/Main.class and /dev/null differ diff --git a/w12/总代码/target/classes/com/weibo/hotsearch/OutputHandler.class b/w12/总代码/target/classes/com/weibo/hotsearch/OutputHandler.class deleted file mode 100644 index 570911b..0000000 Binary files a/w12/总代码/target/classes/com/weibo/hotsearch/OutputHandler.class and /dev/null differ diff --git a/w12/总代码/target/classes/com/weibo/hotsearch/StarFilter.class b/w12/总代码/target/classes/com/weibo/hotsearch/StarFilter.class deleted file mode 100644 index 5677f4c..0000000 Binary files a/w12/总代码/target/classes/com/weibo/hotsearch/StarFilter.class and /dev/null differ diff --git a/w12/总代码/target/classes/com/weibo/hotsearch/cli/CliHandler.class b/w12/总代码/target/classes/com/weibo/hotsearch/cli/CliHandler.class deleted file mode 100644 index 860afe2..0000000 Binary files a/w12/总代码/target/classes/com/weibo/hotsearch/cli/CliHandler.class and /dev/null differ diff --git a/w12/总代码/target/classes/com/weibo/hotsearch/cli/CliParser.class b/w12/总代码/target/classes/com/weibo/hotsearch/cli/CliParser.class deleted file mode 100644 index 89aae85..0000000 Binary files a/w12/总代码/target/classes/com/weibo/hotsearch/cli/CliParser.class and /dev/null differ diff --git a/w12/总代码/target/classes/com/weibo/hotsearch/command/Command.class b/w12/总代码/target/classes/com/weibo/hotsearch/command/Command.class deleted file mode 100644 index 59d6722..0000000 Binary files a/w12/总代码/target/classes/com/weibo/hotsearch/command/Command.class and /dev/null differ diff --git a/w12/总代码/target/classes/com/weibo/hotsearch/command/CommandInvoker.class b/w12/总代码/target/classes/com/weibo/hotsearch/command/CommandInvoker.class deleted file mode 100644 index 78c5d82..0000000 Binary files a/w12/总代码/target/classes/com/weibo/hotsearch/command/CommandInvoker.class and /dev/null differ diff --git a/w12/总代码/target/classes/com/weibo/hotsearch/command/CommandResult.class b/w12/总代码/target/classes/com/weibo/hotsearch/command/CommandResult.class deleted file mode 100644 index f962b90..0000000 Binary files a/w12/总代码/target/classes/com/weibo/hotsearch/command/CommandResult.class and /dev/null differ diff --git a/w12/总代码/target/classes/com/weibo/hotsearch/command/FetchCommand.class b/w12/总代码/target/classes/com/weibo/hotsearch/command/FetchCommand.class deleted file mode 100644 index 11a23d4..0000000 Binary files a/w12/总代码/target/classes/com/weibo/hotsearch/command/FetchCommand.class and /dev/null differ diff --git a/w12/总代码/target/classes/com/weibo/hotsearch/command/FilterCommand.class b/w12/总代码/target/classes/com/weibo/hotsearch/command/FilterCommand.class deleted file mode 100644 index dfa3c45..0000000 Binary files a/w12/总代码/target/classes/com/weibo/hotsearch/command/FilterCommand.class and /dev/null differ diff --git a/w12/总代码/target/classes/com/weibo/hotsearch/command/HelpCommand.class b/w12/总代码/target/classes/com/weibo/hotsearch/command/HelpCommand.class deleted file mode 100644 index ebec991..0000000 Binary files a/w12/总代码/target/classes/com/weibo/hotsearch/command/HelpCommand.class and /dev/null differ diff --git a/w12/总代码/target/classes/com/weibo/hotsearch/command/OutputCommand.class b/w12/总代码/target/classes/com/weibo/hotsearch/command/OutputCommand.class deleted file mode 100644 index a3714bd..0000000 Binary files a/w12/总代码/target/classes/com/weibo/hotsearch/command/OutputCommand.class and /dev/null differ diff --git a/w12/总代码/target/classes/com/weibo/hotsearch/command/SaveCommand.class b/w12/总代码/target/classes/com/weibo/hotsearch/command/SaveCommand.class deleted file mode 100644 index f7fb233..0000000 Binary files a/w12/总代码/target/classes/com/weibo/hotsearch/command/SaveCommand.class and /dev/null differ diff --git a/w12/总代码/target/classes/com/weibo/hotsearch/controller/HotSearchController.class b/w12/总代码/target/classes/com/weibo/hotsearch/controller/HotSearchController.class deleted file mode 100644 index 7151cbe..0000000 Binary files a/w12/总代码/target/classes/com/weibo/hotsearch/controller/HotSearchController.class and /dev/null differ diff --git a/w12/总代码/target/classes/com/weibo/hotsearch/exception/CliException.class b/w12/总代码/target/classes/com/weibo/hotsearch/exception/CliException.class deleted file mode 100644 index ae58f8f..0000000 Binary files a/w12/总代码/target/classes/com/weibo/hotsearch/exception/CliException.class and /dev/null differ diff --git a/w12/总代码/target/classes/com/weibo/hotsearch/exception/DataParseException.class b/w12/总代码/target/classes/com/weibo/hotsearch/exception/DataParseException.class deleted file mode 100644 index c1eb9a7..0000000 Binary files a/w12/总代码/target/classes/com/weibo/hotsearch/exception/DataParseException.class and /dev/null differ diff --git a/w12/总代码/target/classes/com/weibo/hotsearch/exception/ErrorCode.class b/w12/总代码/target/classes/com/weibo/hotsearch/exception/ErrorCode.class deleted file mode 100644 index 8b968d2..0000000 Binary files a/w12/总代码/target/classes/com/weibo/hotsearch/exception/ErrorCode.class and /dev/null differ diff --git a/w12/总代码/target/classes/com/weibo/hotsearch/exception/HotSearchException.class b/w12/总代码/target/classes/com/weibo/hotsearch/exception/HotSearchException.class deleted file mode 100644 index 90cdef2..0000000 Binary files a/w12/总代码/target/classes/com/weibo/hotsearch/exception/HotSearchException.class and /dev/null differ diff --git a/w12/总代码/target/classes/com/weibo/hotsearch/exception/NetworkException.class b/w12/总代码/target/classes/com/weibo/hotsearch/exception/NetworkException.class deleted file mode 100644 index 0b4b21f..0000000 Binary files a/w12/总代码/target/classes/com/weibo/hotsearch/exception/NetworkException.class and /dev/null differ diff --git a/w12/总代码/target/classes/com/weibo/hotsearch/model/AppContext.class b/w12/总代码/target/classes/com/weibo/hotsearch/model/AppContext.class deleted file mode 100644 index 2c2376d..0000000 Binary files a/w12/总代码/target/classes/com/weibo/hotsearch/model/AppContext.class and /dev/null differ diff --git a/w12/总代码/target/classes/com/weibo/hotsearch/model/HotSearchItem.class b/w12/总代码/target/classes/com/weibo/hotsearch/model/HotSearchItem.class deleted file mode 100644 index edb954c..0000000 Binary files a/w12/总代码/target/classes/com/weibo/hotsearch/model/HotSearchItem.class and /dev/null differ diff --git a/w12/总代码/target/classes/com/weibo/hotsearch/model/HotSearchResult.class b/w12/总代码/target/classes/com/weibo/hotsearch/model/HotSearchResult.class deleted file mode 100644 index dd94893..0000000 Binary files a/w12/总代码/target/classes/com/weibo/hotsearch/model/HotSearchResult.class and /dev/null differ diff --git a/w12/总代码/target/classes/com/weibo/hotsearch/service/DataFetcher.class b/w12/总代码/target/classes/com/weibo/hotsearch/service/DataFetcher.class deleted file mode 100644 index 36794ce..0000000 Binary files a/w12/总代码/target/classes/com/weibo/hotsearch/service/DataFetcher.class and /dev/null differ diff --git a/w12/总代码/target/classes/com/weibo/hotsearch/service/FilterService.class b/w12/总代码/target/classes/com/weibo/hotsearch/service/FilterService.class deleted file mode 100644 index 19550a7..0000000 Binary files a/w12/总代码/target/classes/com/weibo/hotsearch/service/FilterService.class and /dev/null differ diff --git a/w12/总代码/target/classes/com/weibo/hotsearch/service/OutputService.class b/w12/总代码/target/classes/com/weibo/hotsearch/service/OutputService.class deleted file mode 100644 index a45f2a5..0000000 Binary files a/w12/总代码/target/classes/com/weibo/hotsearch/service/OutputService.class and /dev/null differ diff --git a/w12/总代码/target/classes/com/weibo/hotsearch/strategy/FilterStrategy.class b/w12/总代码/target/classes/com/weibo/hotsearch/strategy/FilterStrategy.class deleted file mode 100644 index 0de4599..0000000 Binary files a/w12/总代码/target/classes/com/weibo/hotsearch/strategy/FilterStrategy.class and /dev/null differ diff --git a/w12/总代码/target/classes/com/weibo/hotsearch/strategy/FilterStrategyFactory.class b/w12/总代码/target/classes/com/weibo/hotsearch/strategy/FilterStrategyFactory.class deleted file mode 100644 index f0f738d..0000000 Binary files a/w12/总代码/target/classes/com/weibo/hotsearch/strategy/FilterStrategyFactory.class and /dev/null differ diff --git a/w12/总代码/target/classes/com/weibo/hotsearch/strategy/PolicyFilterStrategy.class b/w12/总代码/target/classes/com/weibo/hotsearch/strategy/PolicyFilterStrategy.class deleted file mode 100644 index 027051c..0000000 Binary files a/w12/总代码/target/classes/com/weibo/hotsearch/strategy/PolicyFilterStrategy.class and /dev/null differ diff --git a/w12/总代码/target/classes/com/weibo/hotsearch/strategy/SportsFilterStrategy.class b/w12/总代码/target/classes/com/weibo/hotsearch/strategy/SportsFilterStrategy.class deleted file mode 100644 index 3c9f127..0000000 Binary files a/w12/总代码/target/classes/com/weibo/hotsearch/strategy/SportsFilterStrategy.class and /dev/null differ diff --git a/w12/总代码/target/classes/com/weibo/hotsearch/strategy/StarFilterStrategy.class b/w12/总代码/target/classes/com/weibo/hotsearch/strategy/StarFilterStrategy.class deleted file mode 100644 index 95cd885..0000000 Binary files a/w12/总代码/target/classes/com/weibo/hotsearch/strategy/StarFilterStrategy.class and /dev/null differ diff --git a/w12/总代码/target/classes/com/weibo/hotsearch/view/ConsoleView.class b/w12/总代码/target/classes/com/weibo/hotsearch/view/ConsoleView.class deleted file mode 100644 index 9e9e7c1..0000000 Binary files a/w12/总代码/target/classes/com/weibo/hotsearch/view/ConsoleView.class and /dev/null differ diff --git a/w12/总代码/target/classes/com/weibo/hotsearch/view/TextView.class b/w12/总代码/target/classes/com/weibo/hotsearch/view/TextView.class deleted file mode 100644 index c50bf96..0000000 Binary files a/w12/总代码/target/classes/com/weibo/hotsearch/view/TextView.class and /dev/null differ diff --git a/w12/总代码/target/classes/com/weibo/hotsearch/view/View.class b/w12/总代码/target/classes/com/weibo/hotsearch/view/View.class deleted file mode 100644 index 54ae3f2..0000000 Binary files a/w12/总代码/target/classes/com/weibo/hotsearch/view/View.class and /dev/null differ diff --git a/w12/总代码/target/classes/com/weibo/hotsearch/view/ViewFactory.class b/w12/总代码/target/classes/com/weibo/hotsearch/view/ViewFactory.class deleted file mode 100644 index ff01502..0000000 Binary files a/w12/总代码/target/classes/com/weibo/hotsearch/view/ViewFactory.class and /dev/null differ diff --git a/w12/总代码/target/hotsearch-1.0.0-jar-with-dependencies.jar b/w12/总代码/target/hotsearch-1.0.0-jar-with-dependencies.jar deleted file mode 100644 index 8e89f60..0000000 Binary files a/w12/总代码/target/hotsearch-1.0.0-jar-with-dependencies.jar and /dev/null differ diff --git a/w12/总代码/target/hotsearch-1.0.0.jar b/w12/总代码/target/hotsearch-1.0.0.jar deleted file mode 100644 index b299671..0000000 Binary files a/w12/总代码/target/hotsearch-1.0.0.jar and /dev/null differ diff --git a/w12/总代码/target/maven-archiver/pom.properties b/w12/总代码/target/maven-archiver/pom.properties deleted file mode 100644 index 4544cae..0000000 --- a/w12/总代码/target/maven-archiver/pom.properties +++ /dev/null @@ -1,3 +0,0 @@ -artifactId=hotsearch -groupId=com.weibo -version=1.0.0 diff --git a/w12/总代码/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst b/w12/总代码/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst deleted file mode 100644 index 33102c1..0000000 --- a/w12/总代码/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst +++ /dev/null @@ -1,37 +0,0 @@ -com\weibo\hotsearch\model\AppContext.class -com\weibo\hotsearch\strategy\PolicyFilterStrategy.class -com\weibo\hotsearch\view\View.class -com\weibo\hotsearch\strategy\SportsFilterStrategy.class -com\weibo\hotsearch\model\HotSearchResult.class -com\weibo\hotsearch\service\FilterService.class -com\weibo\hotsearch\view\TextView.class -com\weibo\hotsearch\HotSearchFilter.class -com\weibo\hotsearch\strategy\FilterStrategyFactory.class -com\weibo\hotsearch\exception\HotSearchException.class -com\weibo\hotsearch\command\SaveCommand.class -com\weibo\hotsearch\StarFilter.class -com\weibo\hotsearch\strategy\FilterStrategy.class -com\weibo\hotsearch\exception\ErrorCode.class -com\weibo\hotsearch\command\HelpCommand.class -com\weibo\hotsearch\command\FilterCommand.class -com\weibo\hotsearch\exception\NetworkException.class -com\weibo\hotsearch\OutputHandler.class -com\weibo\hotsearch\command\CommandResult.class -com\weibo\hotsearch\cli\CliHandler.class -com\weibo\hotsearch\model\HotSearchItem.class -com\weibo\hotsearch\controller\HotSearchController.class -com\weibo\hotsearch\strategy\StarFilterStrategy.class -com\weibo\hotsearch\service\DataFetcher.class -com\weibo\hotsearch\command\Command.class -com\weibo\hotsearch\ConsoleOutputHandler.class -com\weibo\hotsearch\view\ConsoleView.class -com\weibo\hotsearch\Main.class -WeiboStarHotSearcha.class -com\weibo\hotsearch\command\CommandInvoker.class -com\weibo\hotsearch\cli\CliParser.class -com\weibo\hotsearch\command\OutputCommand.class -com\weibo\hotsearch\command\FetchCommand.class -com\weibo\hotsearch\exception\CliException.class -com\weibo\hotsearch\service\OutputService.class -com\weibo\hotsearch\view\ViewFactory.class -com\weibo\hotsearch\exception\DataParseException.class diff --git a/w12/总代码/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst b/w12/总代码/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst deleted file mode 100644 index 6983794..0000000 --- a/w12/总代码/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst +++ /dev/null @@ -1,37 +0,0 @@ -C:\Users\ruiruirui\java\w11\总代码\src\main\java\com\weibo\hotsearch\command\OutputCommand.java -C:\Users\ruiruirui\java\w11\总代码\src\main\java\WeiboStarHotSearcha.java -C:\Users\ruiruirui\java\w11\总代码\src\main\java\com\weibo\hotsearch\command\Command.java -C:\Users\ruiruirui\java\w11\总代码\src\main\java\com\weibo\hotsearch\model\AppContext.java -C:\Users\ruiruirui\java\w11\总代码\src\main\java\com\weibo\hotsearch\command\SaveCommand.java -C:\Users\ruiruirui\java\w11\总代码\src\main\java\com\weibo\hotsearch\command\CommandInvoker.java -C:\Users\ruiruirui\java\w11\总代码\src\main\java\com\weibo\hotsearch\service\OutputService.java -C:\Users\ruiruirui\java\w11\总代码\src\main\java\com\weibo\hotsearch\service\DataFetcher.java -C:\Users\ruiruirui\java\w11\总代码\src\main\java\com\weibo\hotsearch\OutputHandler.java -C:\Users\ruiruirui\java\w11\总代码\src\main\java\com\weibo\hotsearch\cli\CliParser.java -C:\Users\ruiruirui\java\w11\总代码\src\main\java\com\weibo\hotsearch\command\CommandResult.java -C:\Users\ruiruirui\java\w11\总代码\src\main\java\com\weibo\hotsearch\cli\CliHandler.java -C:\Users\ruiruirui\java\w11\总代码\src\main\java\com\weibo\hotsearch\command\FetchCommand.java -C:\Users\ruiruirui\java\w11\总代码\src\main\java\com\weibo\hotsearch\strategy\FilterStrategyFactory.java -C:\Users\ruiruirui\java\w11\总代码\src\main\java\com\weibo\hotsearch\Main.java -C:\Users\ruiruirui\java\w11\总代码\src\main\java\com\weibo\hotsearch\exception\ErrorCode.java -C:\Users\ruiruirui\java\w11\总代码\src\main\java\com\weibo\hotsearch\exception\CliException.java -C:\Users\ruiruirui\java\w11\总代码\src\main\java\com\weibo\hotsearch\StarFilter.java -C:\Users\ruiruirui\java\w11\总代码\src\main\java\com\weibo\hotsearch\view\View.java -C:\Users\ruiruirui\java\w11\总代码\src\main\java\com\weibo\hotsearch\strategy\FilterStrategy.java -C:\Users\ruiruirui\java\w11\总代码\src\main\java\com\weibo\hotsearch\view\TextView.java -C:\Users\ruiruirui\java\w11\总代码\src\main\java\com\weibo\hotsearch\strategy\PolicyFilterStrategy.java -C:\Users\ruiruirui\java\w11\总代码\src\main\java\com\weibo\hotsearch\model\HotSearchResult.java -C:\Users\ruiruirui\java\w11\总代码\src\main\java\com\weibo\hotsearch\ConsoleOutputHandler.java -C:\Users\ruiruirui\java\w11\总代码\src\main\java\com\weibo\hotsearch\command\HelpCommand.java -C:\Users\ruiruirui\java\w11\总代码\src\main\java\com\weibo\hotsearch\exception\DataParseException.java -C:\Users\ruiruirui\java\w11\总代码\src\main\java\com\weibo\hotsearch\service\FilterService.java -C:\Users\ruiruirui\java\w11\总代码\src\main\java\com\weibo\hotsearch\command\FilterCommand.java -C:\Users\ruiruirui\java\w11\总代码\src\main\java\com\weibo\hotsearch\exception\NetworkException.java -C:\Users\ruiruirui\java\w11\总代码\src\main\java\com\weibo\hotsearch\controller\HotSearchController.java -C:\Users\ruiruirui\java\w11\总代码\src\main\java\com\weibo\hotsearch\HotSearchFilter.java -C:\Users\ruiruirui\java\w11\总代码\src\main\java\com\weibo\hotsearch\view\ViewFactory.java -C:\Users\ruiruirui\java\w11\总代码\src\main\java\com\weibo\hotsearch\strategy\StarFilterStrategy.java -C:\Users\ruiruirui\java\w11\总代码\src\main\java\com\weibo\hotsearch\model\HotSearchItem.java -C:\Users\ruiruirui\java\w11\总代码\src\main\java\com\weibo\hotsearch\view\ConsoleView.java -C:\Users\ruiruirui\java\w11\总代码\src\main\java\com\weibo\hotsearch\exception\HotSearchException.java -C:\Users\ruiruirui\java\w11\总代码\src\main\java\com\weibo\hotsearch\strategy\SportsFilterStrategy.java