Iran War Monitor

实时监控伊朗战争相关新闻,双源抓取(Google News + Brave),AI 自动分级(CRITICAL / HIGH / MEDIUM / LOW),每分钟更新。CRITICAL 和 HIGH 级别新闻自动推送 Telegram。
总新闻数
-
🚨 CRITICAL
-
⚠️ HIGH
-
最近更新
-
每60秒自动刷新
正在加载...
执行流水线
1多源新闻抓取
Google News(Serper)8 组关键词 + Brave News 5 组关键词,中英双语
2URL 去重
URL 标准化 → hash → KV 持久存储,48 小时滑动窗口自动过期
3精确时间提取
HTTP 抓取原文 HTML → 解析 meta 标签(article:published_time / JSON-LD datePublished)→ 精确到秒
4AI 重要性分级
ADK Agent 对每条新闻按 CRITICAL / HIGH / MEDIUM / LOW 四级分类,输出中文理由 + 类别标签
5a写入时序数据
全部分级结果存入 Feed 时序存储,供仪表盘读取
5bTelegram 推送
CRITICAL + HIGH 写入 notify/message,平台自动推送 Telegram
数据源
Google News(Serper API)
  • 搜索类型:type: "news",时间窗口 tbs: "qdr:h"(过去 1 小时)
  • 英文关键词(6 组):Iran war military conflict / Iran Israel strike attack / Iran nuclear facility IAEA / Iran sanctions escalation / Iran military deployment / Iran strait of Hormuz
  • 中文关键词(2 组):伊朗战争最新消息 / 伊朗以色列军事冲突
  • 每组最多 10 条结果,返回字段:title, link, snippet, date(索引时间)
Brave Search API
  • 搜索类型:result_filter: "news",新鲜度 freshness: "pd"(过去 24 小时)
  • 关键词(5 组):前 3 组英文 + 全部中文
  • 每组最多 10 条,返回字段:title, url, description, age("2 hours ago"), date
  • 独立索引,与 Google 互补,减少漏报
去重机制
  • URL 标准化:移除 UTM 追踪参数,提取 origin + pathname
  • Hash 存储:标准化 URL 取 hash → 存入 KV(Feed SDK 持久键值存储)
  • 滑动窗口:每次运行清理 48 小时前的旧 hash,防止 KV 无限膨胀
  • 跨源去重:同一篇文章被 Google 和 Brave 同时抓到,只保留首次出现
发布时间提取

对每条新文章用 net/http 抓取原文 HTML 前 15KB,按优先级匹配:

  • P1:OpenGraph <meta property="article:published_time">
  • P2:Schema.org JSON-LD "datePublished"
  • P3:Microdata itemprop="datePublished"
  • P4<meta name="publish_date"> 等变体
  • P5:首个 ISO 8601 日期时间字符串
  • 回退:若全部未命中 → Brave age 字段推算 → Serper 索引时间

并发抓取,每轮最多 15 篇,命中率约 70%。

AI 分级标准
级别触发条件示例
CRITICAL直接军事冲突、核设施遭袭、战争升级、美军参战伊朗导弹袭击美军基地 / 以色列空袭核设施
HIGH重大制裁、军事调动、外交破裂、霍尔木兹海峡受威胁德黑兰油库遇袭 / 海峡航运中断
MEDIUM分析评论、外交斡旋、代理人战争更新、经济分析美参议院伊朗战权投票 / 黎以停火谈判
LOW背景报道、历史回顾、一般国际反应、重复报道战争最新动态汇总 / 各国表态

分类引擎:Alva ADK Agent(LLM),单轮推理,输出 JSON 结构化结果。与伊朗局势无关的新闻标记为 IRRELEVANT 并丢弃。

推送 & 部署
  • Cronjob* * * * *(每分钟执行),最小调度间隔
  • 推送阈值:仅 CRITICAL + HIGH → 写入 notify/message → 平台自动推送 Telegram
  • 推送格式:🚨/⚠️ 级别标记 + 标题 + 中文分析理由 + 原文链接
  • 仪表盘刷新:前端每 60 秒自动 fetch,从 Feed @last/200 读取最新数据
  • 数据存储:Feed SDK 时序存储(按文章发布时间索引),支持 @last / @range 查询