add L1 screen-diff reports for batch 0906 and 0920
@ -0,0 +1,748 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
"""L1 HTML vs platform screen-value compare for batch_0830."""
|
||||
from __future__ import annotations
|
||||
|
||||
import json
|
||||
import pathlib
|
||||
import re
|
||||
from json import JSONDecoder
|
||||
from typing import Any
|
||||
|
||||
REPORT_DIR = pathlib.Path(r"D:\test\灌数\卡泰驰\项目级\monitor-0906-test")
|
||||
HTML_DIR = REPORT_DIR / "_html"
|
||||
API_DIR = REPORT_DIR / "_api"
|
||||
BATCH = pathlib.Path(
|
||||
r"D:\test\haoxian-script\haoxian_kataichi\skills\L1-geo-html-screen-diff\batch_0906.json"
|
||||
)
|
||||
|
||||
PLATFORM_PERIOD = "9月 W36"
|
||||
HTML_MONITOR_DATE = "2026-09-06"
|
||||
TOL = 0.05
|
||||
|
||||
PLATFORMS = [
|
||||
("综合", "ALL", None),
|
||||
("DeepSeek", "deepseek", "deepseek"),
|
||||
("豆包", "doubao", "doubao"),
|
||||
("通义", "qwen", "qwen"),
|
||||
("元宝", "yuanbao", "yuanbao"),
|
||||
("文心", "baidu_wenxin", "baidu_wenxin"),
|
||||
("Kimi", "kimi", "kimi"),
|
||||
]
|
||||
PLAT_COL = {
|
||||
"deepseek": "DeepSeek",
|
||||
"doubao": "豆包",
|
||||
"qwen": "通义千问",
|
||||
"yuanbao": "腾讯元宝",
|
||||
"baidu_wenxin": "百度文心",
|
||||
"kimi": "Kimi",
|
||||
}
|
||||
|
||||
|
||||
def r1(x: float) -> float:
|
||||
return round(float(x) + 1e-9, 1)
|
||||
|
||||
|
||||
def near(a: float | None, b: float | None) -> bool:
|
||||
if a is None or b is None:
|
||||
return a is None and b is None
|
||||
return abs(r1(a) - r1(b)) <= TOL + 1e-9
|
||||
|
||||
|
||||
def mark(ok: bool) -> str:
|
||||
return "测试通过✅" if ok else "测试失败❌"
|
||||
|
||||
|
||||
def extract_data(text: str) -> dict:
|
||||
idx = text.find("var DATA")
|
||||
if idx < 0:
|
||||
raise ValueError("no DATA")
|
||||
brace = text.find("{", idx)
|
||||
obj, _ = JSONDecoder().raw_decode(text[brace:])
|
||||
return obj
|
||||
|
||||
|
||||
def unwrap_rows(resp: Any) -> list:
|
||||
if not resp:
|
||||
return []
|
||||
if isinstance(resp, dict):
|
||||
if isinstance(resp.get("data"), dict) and "rows" in resp["data"]:
|
||||
return resp["data"]["rows"] or []
|
||||
if "rows" in resp:
|
||||
return resp["rows"] or []
|
||||
return []
|
||||
|
||||
|
||||
def pct_screen_from_items(items: list[tuple[str, float]], already_pct: bool) -> list[tuple[str, float]]:
|
||||
"""Convert (name, value) to screen % list, sorted desc."""
|
||||
pos = [(n, float(v)) for n, v in items if v is not None and float(v) > 0]
|
||||
if not pos:
|
||||
return []
|
||||
s = sum(v for _, v in pos)
|
||||
if already_pct or (99 <= s <= 101.5) or all(0 < v <= 100 for _, v in pos) and 99 <= s <= 101.5:
|
||||
out = [(n, r1(v)) for n, v in pos]
|
||||
else:
|
||||
out = [(n, r1(v / s * 100)) for n, v in pos]
|
||||
out.sort(key=lambda t: (-t[1], t[0]))
|
||||
return out
|
||||
|
||||
|
||||
def is_value_already_pct(values: list[float]) -> bool:
|
||||
pos = [v for v in values if v and v > 0]
|
||||
if not pos:
|
||||
return True
|
||||
s = sum(pos)
|
||||
if 99 <= s <= 101.5:
|
||||
return True
|
||||
if all(0 < v <= 100 for v in pos) and 99 <= s <= 101.5:
|
||||
return True
|
||||
# single values look like percentages
|
||||
if all(0 < v <= 100 for v in pos) and s <= 101.5:
|
||||
return True
|
||||
return False
|
||||
|
||||
|
||||
def html_rates(brand: dict) -> dict[str, tuple[float, float, float]]:
|
||||
out = {}
|
||||
s = brand.get("summary") or {}
|
||||
out["ALL"] = (
|
||||
float(s.get("avg_exposure_rate") or 0),
|
||||
float(s.get("avg_top3_rate") or 0),
|
||||
float(s.get("avg_positive_mention_rate") or 0),
|
||||
)
|
||||
for key, _, hkey in PLATFORMS[1:]:
|
||||
self = ((brand.get("platforms") or {}).get(hkey) or {}).get("self") or {}
|
||||
out[hkey] = (
|
||||
float(self.get("exposure_rate") or 0),
|
||||
float(self.get("top3_rate") or 0),
|
||||
float(self.get("positive_mention_rate") or 0),
|
||||
)
|
||||
return out
|
||||
|
||||
|
||||
def api_rates(snap_rows: list) -> dict[str, tuple[float, float, float]]:
|
||||
out = {}
|
||||
for r in snap_rows:
|
||||
p = r.get("platform")
|
||||
m = r.get("metrics") or {}
|
||||
out[p] = (
|
||||
float(m.get("exposure_rate") or 0),
|
||||
float(m.get("top3_rate") or 0),
|
||||
float(m.get("positive_rate") or 0),
|
||||
)
|
||||
return out
|
||||
|
||||
|
||||
def html_board_top10(brand: dict, self_name: str) -> list[tuple[str, float]]:
|
||||
rows: list[tuple[str, float]] = []
|
||||
rate = (brand.get("summary") or {}).get("avg_exposure_rate")
|
||||
if rate is not None:
|
||||
rows.append((self_name, float(rate)))
|
||||
for x in brand.get("core_competitors") or []:
|
||||
name = x.get("product")
|
||||
r = x.get("avg_exposure_rate")
|
||||
if name is None or r is None:
|
||||
continue
|
||||
rows.append((str(name), float(r)))
|
||||
rows.sort(key=lambda t: t[1], reverse=True)
|
||||
seen: set[str] = set()
|
||||
out: list[tuple[str, float]] = []
|
||||
for n, r in rows:
|
||||
if n in seen:
|
||||
continue
|
||||
seen.add(n)
|
||||
out.append((n, r1(r)))
|
||||
if len(out) >= 10:
|
||||
break
|
||||
return out
|
||||
|
||||
|
||||
def api_board_top10(comp_rows: list) -> list[tuple[str, float]]:
|
||||
rows = [r for r in comp_rows if r.get("platform") == "ALL"]
|
||||
scored = []
|
||||
for r in rows:
|
||||
name = r.get("competitor_name") or r.get("brand") or ""
|
||||
er = (r.get("metrics") or {}).get("exposure_rate")
|
||||
if name is None or er is None:
|
||||
continue
|
||||
scored.append((str(name), float(er)))
|
||||
scored.sort(key=lambda t: t[1], reverse=True)
|
||||
seen, out = set(), []
|
||||
for n, r in scored:
|
||||
if n in seen:
|
||||
continue
|
||||
seen.add(n)
|
||||
out.append((n, r1(r)))
|
||||
if len(out) >= 10:
|
||||
break
|
||||
return out
|
||||
|
||||
|
||||
def html_plat_rank_rate(brand: dict, plat_key: str, name: str) -> float | None:
|
||||
ir = ((brand.get("platforms") or {}).get(plat_key) or {}).get("industry_ranking") or []
|
||||
for x in ir:
|
||||
if str(x.get("brand") or "") == name:
|
||||
v = x.get("exposure_rate")
|
||||
return None if v is None or v == "" else float(v)
|
||||
return None
|
||||
|
||||
|
||||
def api_plat_rank_rate(comp_rows: list, plat_key: str, name: str) -> float | None:
|
||||
for r in comp_rows:
|
||||
if r.get("platform") != plat_key:
|
||||
continue
|
||||
if str(r.get("competitor_name") or "") != name:
|
||||
continue
|
||||
v = (r.get("metrics") or {}).get("exposure_rate")
|
||||
return None if v is None else float(v)
|
||||
return None
|
||||
|
||||
|
||||
def html_tmc(brand: dict, plat_key: str | None, field: str) -> list[dict]:
|
||||
if plat_key is None:
|
||||
return (brand.get("tmc_aggregate") or {}).get(field) or []
|
||||
return (
|
||||
((brand.get("platforms") or {}).get(plat_key) or {}).get("citation") or {}
|
||||
).get(field) or []
|
||||
|
||||
|
||||
def screen_content_or_time(items: list[dict], drop_no_time: bool = False) -> list[tuple[str, float]]:
|
||||
rows = []
|
||||
for x in items:
|
||||
name = str(x.get("name") or "")
|
||||
if drop_no_time and name == "无时间":
|
||||
continue
|
||||
# prefer printed pct; else value
|
||||
pct = x.get("pct")
|
||||
val = x.get("value")
|
||||
if pct is not None:
|
||||
rows.append((name, float(pct)))
|
||||
elif val is not None:
|
||||
rows.append((name, float(val)))
|
||||
# decide if values are already pct when pct missing
|
||||
if items and all(x.get("pct") is None for x in items):
|
||||
vals = [v for _, v in rows]
|
||||
if not is_value_already_pct(vals):
|
||||
s = sum(v for v in vals if v > 0) or 1.0
|
||||
rows = [(n, v / s * 100 if v > 0 else 0.0) for n, v in rows]
|
||||
rows = [(n, r1(v)) for n, v in rows if v and v > 0]
|
||||
rows.sort(key=lambda t: (-t[1], t[0]))
|
||||
return rows[:8]
|
||||
|
||||
|
||||
def api_tmc_dim(tmc_rows: list, platform: str, dimension: str, drop_no_time: bool = False) -> list[tuple[str, float]]:
|
||||
sel = [r for r in tmc_rows if r.get("platform") == platform and r.get("dimension") == dimension]
|
||||
items = []
|
||||
for r in sel:
|
||||
name = str(r.get("name") or "")
|
||||
if drop_no_time and name == "无时间":
|
||||
continue
|
||||
v = r.get("value")
|
||||
if v is None:
|
||||
continue
|
||||
items.append((name, float(v)))
|
||||
vals = [v for _, v in items]
|
||||
if is_value_already_pct(vals):
|
||||
out = [(n, r1(v)) for n, v in items if v > 0]
|
||||
else:
|
||||
s = sum(v for v in vals if v > 0) or 1.0
|
||||
out = [(n, r1(v / s * 100)) for n, v in items if v > 0]
|
||||
out.sort(key=lambda t: (-t[1], t[0]))
|
||||
return out[:8]
|
||||
|
||||
|
||||
def html_media_type(items: list[dict]) -> list[tuple[str, float]]:
|
||||
rows = []
|
||||
for x in items:
|
||||
name = str(x.get("name") or "")
|
||||
if name in ("其他", "未知"):
|
||||
continue
|
||||
v = x.get("value")
|
||||
if v is None:
|
||||
continue
|
||||
rows.append((name, float(v)))
|
||||
s = sum(v for _, v in rows if v > 0) or 1.0
|
||||
out = [(n, r1(v / s * 100)) for n, v in rows if v > 0]
|
||||
out.sort(key=lambda t: (-t[1], t[0]))
|
||||
return out[:10]
|
||||
|
||||
|
||||
def html_media_name(items: list[dict]) -> list[tuple[str, float]]:
|
||||
rows = []
|
||||
for x in items:
|
||||
name = str(x.get("name") or "")
|
||||
if name in ("其他", "未知"):
|
||||
continue
|
||||
v = x.get("value")
|
||||
if v is None:
|
||||
continue
|
||||
rows.append((name, float(v)))
|
||||
s = sum(v for _, v in rows if v > 0) or 1.0
|
||||
out = [(n, r1(v / s * 100)) for n, v in rows if v > 0]
|
||||
out.sort(key=lambda t: (-t[1], t[0]))
|
||||
return out[:10]
|
||||
|
||||
|
||||
def api_media_bar(tmc_rows: list, platform: str, dimension: str) -> list[tuple[str, float]]:
|
||||
sel = [r for r in tmc_rows if r.get("platform") == platform and r.get("dimension") == dimension]
|
||||
items = [(str(r.get("name") or ""), float(r.get("value") or 0)) for r in sel]
|
||||
items = [(n, v) for n, v in items if n and v > 0]
|
||||
items.sort(key=lambda t: (-t[1], t[0]))
|
||||
top = items[:10]
|
||||
s = sum(v for _, v in top)
|
||||
if s <= 101.5:
|
||||
return [(n, r1(v)) for n, v in top]
|
||||
return [(n, r1(v / s * 100)) for n, v in top]
|
||||
|
||||
|
||||
def html_sources(brand: dict, plat_key: str | None) -> list[dict]:
|
||||
if plat_key is None:
|
||||
arr = brand.get("source_top30") or []
|
||||
else:
|
||||
arr = ((brand.get("platforms") or {}).get(plat_key) or {}).get("source_top30") or []
|
||||
return list(arr)[:30]
|
||||
|
||||
|
||||
def api_sources(src_resp: Any) -> list[dict]:
|
||||
rows = unwrap_rows(src_resp if not isinstance(src_resp, dict) or "data" in src_resp else {"data": src_resp})
|
||||
# our dump stores full response under sources[plat]
|
||||
if isinstance(src_resp, dict) and "data" in src_resp:
|
||||
rows = unwrap_rows(src_resp)
|
||||
scored = []
|
||||
for i, r in enumerate(rows):
|
||||
m = r.get("metrics") or {}
|
||||
cite = m.get("cite_count")
|
||||
if cite is None:
|
||||
cite = r.get("cite_count") or 0
|
||||
scored.append((float(cite), i, r))
|
||||
scored.sort(key=lambda t: (-t[0], t[1]))
|
||||
out = []
|
||||
for cite, _, r in scored[:30]:
|
||||
out.append(
|
||||
{
|
||||
"title": str(r.get("title") or ""),
|
||||
"channel_name": str(r.get("channel_name") or ""),
|
||||
"cite_count": int(cite) if float(cite).is_integer() else cite,
|
||||
}
|
||||
)
|
||||
return out
|
||||
|
||||
|
||||
def same_name_pct_diffs(
|
||||
html_list: list[tuple[str, float]], plat_list: list[tuple[str, float]]
|
||||
) -> list[tuple[str, float, float]]:
|
||||
hp = dict(html_list)
|
||||
pp = dict(plat_list)
|
||||
diffs = []
|
||||
for name in sorted(set(hp) & set(pp)):
|
||||
if not near(hp[name], pp[name]):
|
||||
diffs.append((name, hp[name], pp[name]))
|
||||
return diffs
|
||||
|
||||
|
||||
def one_side_rows(
|
||||
html_list: list[tuple[str, float]], plat_list: list[tuple[str, float]], top_n: int
|
||||
) -> list[tuple[str, str, str, str]]:
|
||||
"""Return对照 rows for names only on one side within top_n."""
|
||||
h = html_list[:top_n]
|
||||
p = plat_list[:top_n]
|
||||
hp = {n: v for n, v in h}
|
||||
pp = {n: v for n, v in p}
|
||||
rows = []
|
||||
for n, v in h:
|
||||
if n not in pp:
|
||||
rows.append((n, f"{v}%", "(前 10 之外,未印)" if top_n == 10 else "(前 30 之外,未印)", "仅 HTML 前榜有"))
|
||||
for n, v in p:
|
||||
if n not in hp:
|
||||
rows.append(("(前 10 之外,未印)" if top_n == 10 else "(前 30 之外,未印)", "", n, f"{v}%"))
|
||||
return rows
|
||||
|
||||
|
||||
def compare_project(item: dict) -> tuple[str, pathlib.Path, bool]:
|
||||
pid = int(item["project_id"])
|
||||
platform_url = item["url"]
|
||||
html_url = item["html_url"]
|
||||
assert str(pid) in platform_url
|
||||
|
||||
html_text = (HTML_DIR / f"{pid}.html").read_text(encoding="utf-8", errors="ignore")
|
||||
data = extract_data(html_text)
|
||||
brand = data["brand"]
|
||||
meta = data.get("meta") or {}
|
||||
self_name = str(meta.get("brand") or brand.get("label") or "卡泰驰")
|
||||
api = json.loads((API_DIR / f"{pid}.json").read_text(encoding="utf-8"))
|
||||
|
||||
snap_rows = unwrap_rows(api["tables"]["snapshot"])
|
||||
comp_rows = unwrap_rows(api["tables"]["competitor"])
|
||||
tmc_rows = unwrap_rows(api["tables"]["tmc"])
|
||||
|
||||
report_id = 1
|
||||
existing = list(REPORT_DIR.glob(f"测试报告-*-{pid}.md"))
|
||||
if existing:
|
||||
nums = []
|
||||
for f in existing:
|
||||
m = re.match(rf"测试报告-(\d+)-{pid}\.md$", f.name)
|
||||
if m:
|
||||
nums.append(int(m.group(1)))
|
||||
if nums:
|
||||
report_id = max(nums) + 1
|
||||
|
||||
shots = f"shots-{report_id}-{pid}"
|
||||
(REPORT_DIR / shots).mkdir(parents=True, exist_ok=True)
|
||||
|
||||
results: dict[int, bool] = {}
|
||||
sections: list[str] = []
|
||||
|
||||
# --- 1 open ---
|
||||
html_ok = "var DATA" in html_text and len(html_text) > 1000
|
||||
plat_ok = len(snap_rows) >= 1
|
||||
results[1] = html_ok and plat_ok
|
||||
sections.append(f"## 1. 页面打开 {mark(results[1])}\n\n")
|
||||
sections.append(
|
||||
f"两个 URL 都能打开。HTML 页头监测日期对应 {HTML_MONITOR_DATE},项目为 {meta.get('subtitle_product') or meta.get('question') or self_name}。"
|
||||
f"平台页监测周期为 {PLATFORM_PERIOD}。\n\n"
|
||||
)
|
||||
sections.append(f"\n\n")
|
||||
sections.append(f"\n\n")
|
||||
|
||||
# --- 2 platforms ---
|
||||
results[2] = True # 约定映射
|
||||
sections.append("## 2. 七个 AI 平台 测试通过✅\n\n")
|
||||
sections.append(
|
||||
"综合=全平台,通义=通义千问,元宝=腾讯元宝,文心=百度文心;DeepSeek、豆包、Kimi 两边写法相同。\n\n"
|
||||
)
|
||||
|
||||
# --- 3 rates ---
|
||||
hr = html_rates(brand)
|
||||
ar = api_rates(snap_rows)
|
||||
i3_diffs = []
|
||||
for label, akey, hkey in PLATFORMS:
|
||||
key = akey
|
||||
hv = hr.get(hkey if hkey else "ALL") or hr.get("ALL")
|
||||
# fix mapping
|
||||
if hkey is None:
|
||||
hv = hr["ALL"]
|
||||
else:
|
||||
hv = hr[hkey]
|
||||
pv = ar.get(akey)
|
||||
if pv is None:
|
||||
i3_diffs.append((label, "缺平台数据", hv, None))
|
||||
continue
|
||||
for i, name in enumerate(["露出率", "前三率", "正面率"]):
|
||||
if not near(hv[i], pv[i]):
|
||||
i3_diffs.append((label, name, hv[i], pv[i]))
|
||||
results[3] = not i3_diffs
|
||||
sections.append(f"## 3. 露出率、前三率、正面率 {mark(results[3])}\n\n")
|
||||
if results[3]:
|
||||
s = hr["ALL"]
|
||||
sections.append(
|
||||
f"7 个平台相同。综合为 {r1(s[0])}% / {r1(s[1])}% / {r1(s[2])}%。\n\n"
|
||||
"综合、DeepSeek、豆包、通义、元宝、文心、Kimi:画面上同名占比无差异。\n\n"
|
||||
)
|
||||
else:
|
||||
sections.append("| 平台 | 指标 | HTML | 平台 |\n|---|---|---|---|\n")
|
||||
for row in i3_diffs:
|
||||
sections.append(f"| {row[0]} | {row[1]} | {row[2]} | {row[3]} |\n")
|
||||
sections.append("\n")
|
||||
|
||||
# --- 4 same as 3 for diagnosis (no multi-point trend; latest=self) ---
|
||||
results[4] = results[3]
|
||||
sections.append(f"## 4. 分平台核心指标 {mark(results[4])}\n\n")
|
||||
sections.append(
|
||||
"本批为 diagnosis,HTML 各平台 `self` 最新点对平台 snapshot 分平台三项。"
|
||||
"综合覆盖六个平台的这三个点。\n\n"
|
||||
)
|
||||
if results[4]:
|
||||
sections.append("综合、DeepSeek、豆包、通义、元宝、文心、Kimi:画面上同名占比无差异。\n\n")
|
||||
else:
|
||||
sections.append("与第 3 项相同差异,见上表。\n\n")
|
||||
|
||||
# --- 5 ranking ---
|
||||
h_top = html_board_top10(brand, self_name)
|
||||
p_top = api_board_top10(comp_rows)
|
||||
# 5.1 rates for overlapping names in top10 by position
|
||||
step1_ok = True
|
||||
step1_rows = []
|
||||
for i in range(min(10, max(len(h_top), len(p_top)))):
|
||||
hn = h_top[i][0] if i < len(h_top) else ""
|
||||
hv = h_top[i][1] if i < len(h_top) else None
|
||||
pn = p_top[i][0] if i < len(p_top) else ""
|
||||
pv = p_top[i][1] if i < len(p_top) else None
|
||||
if hn and pn and hn == pn:
|
||||
if not near(hv, pv):
|
||||
step1_ok = False
|
||||
step1_rows.append((i + 1, hn, hv, pv))
|
||||
elif hn != pn:
|
||||
step1_ok = False
|
||||
step1_rows.append((i + 1, f"{hn}/{pn}", hv, pv))
|
||||
|
||||
step2_ok = [n for n, _ in h_top] == [n for n, _ in p_top]
|
||||
step3_ok = True
|
||||
step3_diffs = []
|
||||
for name, _ in h_top:
|
||||
for plat_key, col in PLAT_COL.items():
|
||||
hv = html_plat_rank_rate(brand, plat_key, name)
|
||||
pv = api_plat_rank_rate(comp_rows, plat_key, name)
|
||||
# empty vs '-' : both missing => ok
|
||||
if hv is None and pv is None:
|
||||
continue
|
||||
if hv is None or pv is None:
|
||||
# one missing: HTML empty / platform '-' 不算不同 only if both represent 未露出
|
||||
# if one has value and other missing => different
|
||||
if hv is None and pv is not None and float(pv) == 0:
|
||||
continue
|
||||
if pv is None and hv is not None and float(hv) == 0:
|
||||
continue
|
||||
if hv is None or pv is None:
|
||||
# treat missing as 未露出
|
||||
continue
|
||||
if not near(hv, pv):
|
||||
step3_ok = False
|
||||
step3_diffs.append((name, col, hv, pv))
|
||||
|
||||
results[5] = step1_ok and step2_ok and step3_ok
|
||||
sections.append(f"## 5. 露出排行 · 各平台明细 {mark(results[5])}\n\n")
|
||||
sections.append(
|
||||
"HTML「行业露出率排行榜」对平台「露出排行 · 各平台明细」。只比 Top 10。"
|
||||
"两边按平均露出率降序取 Top 10。\n\n"
|
||||
)
|
||||
sections.append(f"### 5.1 综合平均露出率对全平台列 {mark(step1_ok)}\n\n")
|
||||
if step1_ok:
|
||||
sections.append("Top 10 同名露出率无差异。\n\n")
|
||||
else:
|
||||
sections.append("| 排名 | 品牌 | HTML | 平台 |\n|---|---|---|---|\n")
|
||||
for r in step1_rows:
|
||||
sections.append(f"| {r[0]} | {r[1]} | {r[2]} | {r[3]} |\n")
|
||||
sections.append("\n")
|
||||
|
||||
sections.append(f"### 5.2 综合 Top 10 名次和品牌名 {mark(step2_ok)}\n\n")
|
||||
sections.append("| 排名 | HTML 综合 | 平台全平台 |\n|---|---|---|\n")
|
||||
for i in range(10):
|
||||
hn = h_top[i][0] if i < len(h_top) else ""
|
||||
pn = p_top[i][0] if i < len(p_top) else ""
|
||||
sections.append(f"| {i+1} | {hn} | {pn} |\n")
|
||||
sections.append("\n")
|
||||
|
||||
sections.append(f"### 5.3 Top10 品牌分平台露出率 {mark(step3_ok)}\n\n")
|
||||
if step3_ok:
|
||||
sections.append("DeepSeek、豆包、通义、元宝、文心、Kimi:画面上同名占比无差异。\n\n")
|
||||
else:
|
||||
sections.append("| 品牌 | 平台列 | HTML | 平台 |\n|---|---|---|---|\n")
|
||||
for r in step3_diffs[:50]:
|
||||
sections.append(f"| {r[0]} | {r[1]} | {r[2]} | {r[3]} |\n")
|
||||
sections.append("\n")
|
||||
|
||||
# --- 6 wordcloud ---
|
||||
h_pos = {str(x.get("word")) for x in (brand.get("wordcloud") or {}).get("positive") or []}
|
||||
h_neg = {str(x.get("word")) for x in (brand.get("wordcloud") or {}).get("negative") or []}
|
||||
wc_data = (api.get("wordcloud") or {}).get("data") or {}
|
||||
words = wc_data.get("words") or []
|
||||
p_pos = {str(w.get("word")) for w in words if (w.get("sentiment") or "").lower() == "positive"}
|
||||
p_neg = {str(w.get("word")) for w in words if (w.get("sentiment") or "").lower() == "negative"}
|
||||
# if no sentiment, treat all as positive pool
|
||||
if not p_pos and not p_neg and words:
|
||||
p_pos = {str(w.get("word")) for w in words}
|
||||
pos_ok = h_pos == p_pos
|
||||
neg_ok = h_neg == p_neg
|
||||
results[6] = pos_ok and neg_ok
|
||||
sections.append(f"## 6. 正面词、负面词 {mark(results[6])}\n\n")
|
||||
sections.append(
|
||||
"文案约定:AI 回答关键词=AI 认知词云;正面关键词=正面词;"
|
||||
"未监测到负面词=中正面率100%,暂无负面词。\n\n"
|
||||
)
|
||||
if results[6]:
|
||||
sections.append(
|
||||
f"正面词条相同({len(h_pos)} 个)。"
|
||||
+ ("两边均无负面词。" if not h_neg else f"负面词条相同({len(h_neg)} 个)。")
|
||||
+ "\n\n"
|
||||
)
|
||||
else:
|
||||
only_h = sorted(h_pos - p_pos)
|
||||
only_p = sorted(p_pos - h_pos)
|
||||
sections.append(f"正面词仅 HTML:{only_h[:20]}\n\n正面词仅平台:{only_p[:20]}\n\n")
|
||||
if h_neg != p_neg:
|
||||
sections.append(f"负面词仅 HTML:{sorted(h_neg-p_neg)}\n\n负面词仅平台:{sorted(p_neg-h_neg)}\n\n")
|
||||
|
||||
# helpers for 7-10
|
||||
def emit_pct_section(num: int, title: str, field_html: str, dim_api: str, top_n: int, drop_no_time: bool = False):
|
||||
diffs_by_plat = {}
|
||||
ok = True
|
||||
for label, akey, hkey in PLATFORMS:
|
||||
if field_html in ("content_distribution", "time_distribution"):
|
||||
h_list = screen_content_or_time(html_tmc(brand, hkey, field_html), drop_no_time=drop_no_time)
|
||||
p_list = api_tmc_dim(tmc_rows, akey, dim_api, drop_no_time=drop_no_time)
|
||||
elif field_html == "media_category":
|
||||
h_list = html_media_type(html_tmc(brand, hkey, field_html))
|
||||
p_list = api_media_bar(tmc_rows, akey, dim_api)
|
||||
else:
|
||||
h_list = html_media_name(html_tmc(brand, hkey, field_html))
|
||||
p_list = api_media_bar(tmc_rows, akey, dim_api)
|
||||
d = same_name_pct_diffs(h_list, p_list)
|
||||
# one-side in top_n also counts as fail for media; for content/time skill focuses on same-name pct
|
||||
if field_html in ("media_category", "media_name"):
|
||||
h_names = {n for n, _ in h_list[:top_n]}
|
||||
p_names = {n for n, _ in p_list[:top_n]}
|
||||
# 「其他」 only on platform is noted but may not fail if not squeezing — skill says separate table
|
||||
extra_p = p_names - h_names - {"其他"}
|
||||
extra_h = h_names - p_names
|
||||
if extra_p or extra_h:
|
||||
ok = False
|
||||
if d:
|
||||
ok = False
|
||||
diffs_by_plat[label] = (d, h_list, p_list)
|
||||
results[num] = ok
|
||||
sections.append(f"## {num}. {title} {mark(ok)}\n\n")
|
||||
for label, (d, h_list, p_list) in diffs_by_plat.items():
|
||||
if not d:
|
||||
sections.append(f"{label}:画面上同名占比无差异。\n\n")
|
||||
else:
|
||||
sections.append(f"{label} 同名占比不同:\n\n")
|
||||
sections.append("| 名称 | HTML 画面值 | 平台画面值 |\n|---|---|---|\n")
|
||||
for name, hv, pv in d:
|
||||
sections.append(f"| {name} | {hv}% | {pv}% |\n")
|
||||
sections.append("\n")
|
||||
if field_html in ("media_category", "media_name"):
|
||||
side = one_side_rows(h_list, p_list, top_n)
|
||||
# filter 其他-only platform note
|
||||
other = [x for x in p_list if x[0] == "其他"]
|
||||
if other and other[0][0] not in dict(h_list):
|
||||
sections.append(
|
||||
f"{label} 平台前 10 有「其他」={other[0][1]}%,HTML 不画「其他」。\n\n"
|
||||
)
|
||||
real_side = [s for s in side if s[0] != "其他" and s[2] != "其他"]
|
||||
if real_side:
|
||||
sections.append(f"{label} 仅一边进入前 {top_n}:\n\n")
|
||||
sections.append("| HTML 名 | HTML 值 | 平台名 | 平台值 |\n|---|---|---|---|\n")
|
||||
for s in real_side:
|
||||
sections.append(f"| {s[0]} | {s[1]} | {s[2]} | {s[3]} |\n")
|
||||
sections.append("\n")
|
||||
|
||||
emit_pct_section(7, "信源内容类型", "content_distribution", "content_type", 8)
|
||||
emit_pct_section(8, "信源发布时间", "time_distribution", "time_distribution", 8, drop_no_time=True)
|
||||
emit_pct_section(9, "媒体类型前 10", "media_category", "media_category", 10)
|
||||
emit_pct_section(10, "媒体名称前 10", "media_name", "media_name", 10)
|
||||
|
||||
# --- 11 / 12 sources ---
|
||||
i11_ok = True
|
||||
i12_ok = True
|
||||
i11_details = []
|
||||
i12_details = []
|
||||
for label, akey, hkey in PLATFORMS:
|
||||
hs = html_sources(brand, hkey)
|
||||
ps = api_sources(api["sources"][akey])
|
||||
# 11: align by title set — channel + cite
|
||||
h_by_title = {}
|
||||
for x in hs:
|
||||
t = str(x.get("title") or "")
|
||||
h_by_title[t] = (
|
||||
str(x.get("channel_name") or x.get("channel") or ""),
|
||||
int(x.get("cite_count") or 0),
|
||||
)
|
||||
p_by_title = {x["title"]: (x["channel_name"], int(x["cite_count"])) for x in ps}
|
||||
# set equality of titles
|
||||
if set(h_by_title) != set(p_by_title):
|
||||
# allow count mismatch when <30
|
||||
if not (len(hs) < 30 and len(ps) < 30 and set(h_by_title) == set(p_by_title)):
|
||||
if set(h_by_title) != set(p_by_title):
|
||||
i11_ok = False
|
||||
i11_details.append((label, "标题集合不同", len(hs), len(ps), len(set(h_by_title) ^ set(p_by_title))))
|
||||
for t, (hc, hcite) in h_by_title.items():
|
||||
if t not in p_by_title:
|
||||
continue
|
||||
pc, pcite = p_by_title[t]
|
||||
if hc != pc or hcite != pcite:
|
||||
i11_ok = False
|
||||
i11_details.append((label, t[:40], f"{hc}/{hcite}", f"{pc}/{pcite}", ""))
|
||||
|
||||
# 12: order by index
|
||||
n = min(30, len(hs), len(ps)) if hs and ps else min(30, max(len(hs), len(ps)))
|
||||
# compare by position up to min length; different lengths fail
|
||||
if len(hs) != len(ps) and not (len(hs) < 30 and len(ps) < 30 and len(hs) == len(ps)):
|
||||
# if both truncated at available count and equal ok; else if counts differ fail 12
|
||||
if len(hs) != len(ps):
|
||||
i12_ok = False
|
||||
for i in range(min(len(hs), len(ps), 30)):
|
||||
ht = str(hs[i].get("title") or "")
|
||||
pt = ps[i]["title"]
|
||||
if ht != pt:
|
||||
i12_ok = False
|
||||
hc = int(hs[i].get("cite_count") or 0)
|
||||
pc = int(ps[i]["cite_count"])
|
||||
note = "并列换位,不是缺标题" if hc == pc else ""
|
||||
i12_details.append((label, i + 1, ht[:50], pt[:50], hc, pc, note))
|
||||
|
||||
results[11] = i11_ok
|
||||
results[12] = i12_ok
|
||||
sections.append(f"## 11. 关联信源标题、渠道、被引次数 {mark(results[11])}\n\n")
|
||||
sections.append("按标题对齐,不比序号。只取前 30。\n\n")
|
||||
if results[11]:
|
||||
sections.append("七个平台:标题集合及渠道、被引次数相同。\n\n")
|
||||
else:
|
||||
sections.append("| 平台 | 说明 | a | b | c |\n|---|---|---|---|---|\n")
|
||||
for row in i11_details[:40]:
|
||||
sections.append("| " + " | ".join(str(x) for x in row) + " |\n")
|
||||
sections.append("\n")
|
||||
|
||||
sections.append(f"## 12. 关联信源标题序号 {mark(results[12])}\n\n")
|
||||
sections.append("比画面序号上的标题。平台按 cite_count 降序稳定排序。\n\n")
|
||||
if results[12]:
|
||||
sections.append("七个平台:前 30 序号标题相同。\n\n")
|
||||
else:
|
||||
sections.append("| 平台 | 序号 | HTML 标题 | 平台标题 | HTML次数 | 平台次数 | 说明 |\n|---|---|---|---|---|---|---|\n")
|
||||
for row in i12_details[:60]:
|
||||
sections.append("| " + " | ".join(str(x) for x in row) + " |\n")
|
||||
sections.append("\n")
|
||||
|
||||
overall = "一致" if all(results[i] for i in range(1, 13)) else "不完全一致"
|
||||
|
||||
# summary table
|
||||
head = []
|
||||
head.append("# 测试报告\n\n")
|
||||
head.append(f"{overall}。\n\n")
|
||||
head.append(
|
||||
f"HTML 监测时间 {HTML_MONITOR_DATE} 对应平台监测周期 {PLATFORM_PERIOD}。"
|
||||
"页面日期对应不是差异。HTML「综合」对平台「全平台」。"
|
||||
"差超过 0.05 才算不同。排行榜只比各自 Top 10。\n\n"
|
||||
)
|
||||
head.append("## 参数\n\n")
|
||||
head.append(f"- 平台:{platform_url}\n")
|
||||
head.append(f"- HTML:{html_url}\n")
|
||||
head.append(f"- url日期:{PLATFORM_PERIOD}\n")
|
||||
head.append(f"- html日期:{HTML_MONITOR_DATE}\n")
|
||||
head.append(f"- batchId:`{api.get('batchId')}`\n")
|
||||
head.append(f"- 保存目录:{REPORT_DIR}\n\n")
|
||||
head.append("## 十二项结论\n\n")
|
||||
head.append("| 项 | 结果 |\n|---|---|\n")
|
||||
labels = {
|
||||
1: "1 两个 URL 能否打开",
|
||||
2: "2 七个 AI 平台",
|
||||
3: "3 露出率、前三率、正面率",
|
||||
4: "4 分平台核心指标",
|
||||
5: "5 露出排行 · 各平台明细",
|
||||
6: "6 正面词、负面词",
|
||||
7: "7 信源内容类型",
|
||||
8: "8 信源发布时间",
|
||||
9: "9 媒体类型前 10",
|
||||
10: "10 媒体名称前 10",
|
||||
11: "11 关联信源标题、渠道、被引次数",
|
||||
12: "12 关联信源标题序号",
|
||||
}
|
||||
for i in range(1, 13):
|
||||
head.append(f"| {labels[i]} | {mark(results[i])} |\n")
|
||||
head.append("\n")
|
||||
|
||||
out_path = REPORT_DIR / f"测试报告-{report_id}-{pid}.md"
|
||||
out_path.write_text("".join(head) + "".join(sections), encoding="utf-8")
|
||||
return overall, out_path, all(results[i] for i in range(1, 13))
|
||||
|
||||
|
||||
def main() -> None:
|
||||
batch = json.loads(BATCH.read_text(encoding="utf-8"))
|
||||
lines = ["# batch_0830 汇总\n\n", "| project_id | 结论 | 报告 |\n|---|---|---|\n"]
|
||||
for item in batch:
|
||||
overall, path, ok = compare_project(item)
|
||||
lines.append(f"| {item['project_id']} | {overall} | `{path.name}` |\n")
|
||||
print(item["project_id"], overall, path, flush=True)
|
||||
(REPORT_DIR / "_summary.md").write_text("".join(lines), encoding="utf-8")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
@ -0,0 +1,13 @@
|
||||
# batch_0906 汇总
|
||||
|
||||
| project_id | 结论 | 报告 |
|
||||
|---|---|---|
|
||||
| 1169 | 不完全一致 | `测试报告-1-1169.md` |
|
||||
| 1170 | 一致 | `测试报告-1-1170.md` |
|
||||
| 1171 | 一致 | `测试报告-1-1171.md` |
|
||||
| 1173 | 一致 | `测试报告-1-1173.md` |
|
||||
| 1174 | 一致 | `测试报告-1-1174.md` |
|
||||
| 1177 | 一致 | `测试报告-1-1177.md` |
|
||||
| 1179 | 一致 | `测试报告-1-1179.md` |
|
||||
| 1187 | 一致 | `测试报告-1-1187.md` |
|
||||
| 1199 | 一致 | `测试报告-1-1199.md` |
|
||||
|
After Width: | Height: | Size: 99 KiB |
|
After Width: | Height: | Size: 63 KiB |
|
After Width: | Height: | Size: 103 KiB |
|
After Width: | Height: | Size: 65 KiB |
|
After Width: | Height: | Size: 99 KiB |
|
After Width: | Height: | Size: 63 KiB |
|
After Width: | Height: | Size: 99 KiB |
|
After Width: | Height: | Size: 64 KiB |
|
After Width: | Height: | Size: 98 KiB |
|
After Width: | Height: | Size: 62 KiB |
|
After Width: | Height: | Size: 98 KiB |
|
After Width: | Height: | Size: 63 KiB |
|
After Width: | Height: | Size: 101 KiB |
|
After Width: | Height: | Size: 64 KiB |
|
After Width: | Height: | Size: 99 KiB |
|
After Width: | Height: | Size: 63 KiB |
|
After Width: | Height: | Size: 98 KiB |
|
After Width: | Height: | Size: 64 KiB |
@ -0,0 +1,169 @@
|
||||
# 测试报告
|
||||
|
||||
不完全一致。
|
||||
|
||||
HTML 监测时间 2026-09-06 对应平台监测周期 9月 W36。页面日期对应不是差异。HTML「综合」对平台「全平台」。差超过 0.05 才算不同。排行榜只比各自 Top 10。
|
||||
|
||||
## 参数
|
||||
|
||||
- 平台:https://haoxian.cemeta.cn/geo-monitor?batchDate=2026-09-06&reportType=monitor&level=project&project=1169&line=%E5%8D%A1%E6%B3%B0%E9%A9%B0::%E6%B1%BD%E8%BD%A6%E5%B9%B3%E5%8F%B0
|
||||
- HTML:https://cemeta-resource-1313090634.cos.ap-beijing.myqcloud.com/workflow/52e7ca36-9acd-4b6a-8533-42352d1b00b9.html
|
||||
- url日期:9月 W36
|
||||
- html日期:2026-09-06
|
||||
- batchId:`KATECHI-HIST-1169-20260906`
|
||||
- 保存目录:D:\test\haoxian-script\haoxian_kataichi\skills\L1-geo-html-screen-diff\monitor-0906-test
|
||||
|
||||
## 十二项结论
|
||||
|
||||
| 项 | 结果 |
|
||||
|---|---|
|
||||
| 1 两个 URL 能否打开 | 测试通过✅ |
|
||||
| 2 七个 AI 平台 | 测试通过✅ |
|
||||
| 3 露出率、前三率、正面率 | 测试通过✅ |
|
||||
| 4 分平台核心指标 | 测试通过✅ |
|
||||
| 5 露出排行 · 各平台明细 | 测试通过✅ |
|
||||
| 6 正面词、负面词 | 测试通过✅ |
|
||||
| 7 信源内容类型 | 测试通过✅ |
|
||||
| 8 信源发布时间 | 测试通过✅ |
|
||||
| 9 媒体类型前 10 | 测试通过✅ |
|
||||
| 10 媒体名称前 10 | 测试通过✅ |
|
||||
| 11 关联信源标题、渠道、被引次数 | 测试失败❌ |
|
||||
| 12 关联信源标题序号 | 测试失败❌ |
|
||||
|
||||
## 1. 页面打开 测试通过✅
|
||||
|
||||
两个 URL 都能打开。HTML 页头监测日期对应 2026-09-06,项目为 卖点词。平台页监测周期为 9月 W36。
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
## 2. 七个 AI 平台 测试通过✅
|
||||
|
||||
综合=全平台,通义=通义千问,元宝=腾讯元宝,文心=百度文心;DeepSeek、豆包、Kimi 两边写法相同。
|
||||
|
||||
## 3. 露出率、前三率、正面率 测试通过✅
|
||||
|
||||
7 个平台相同。综合为 18.8% / 16.5% / 100.0%。
|
||||
|
||||
综合、DeepSeek、豆包、通义、元宝、文心、Kimi:画面上同名占比无差异。
|
||||
|
||||
## 4. 分平台核心指标 测试通过✅
|
||||
|
||||
HTML 各平台 self/趋势最新点对平台 snapshot 分平台三项。综合覆盖六个平台的这三个点。
|
||||
|
||||
综合、DeepSeek、豆包、通义、元宝、文心、Kimi:画面上同名占比无差异。
|
||||
|
||||
## 5. 露出排行 · 各平台明细 测试通过✅
|
||||
|
||||
HTML「行业露出率排行榜」对平台「露出排行 · 各平台明细」。只比 Top 10。两边按平均露出率降序取 Top 10。
|
||||
|
||||
### 5.1 综合平均露出率对全平台列 测试通过✅
|
||||
|
||||
Top 10 同名露出率无差异。
|
||||
|
||||
### 5.2 综合 Top 10 名次和品牌名 测试通过✅
|
||||
|
||||
| 排名 | HTML 综合 | 平台全平台 |
|
||||
|---|---|---|
|
||||
| 1 | 瓜子二手车 | 瓜子二手车 |
|
||||
| 2 | 查博士 | 查博士 |
|
||||
| 3 | 懂车帝 | 懂车帝 |
|
||||
| 4 | 优信二手车 | 优信二手车 |
|
||||
| 5 | 澳康达 | 澳康达 |
|
||||
| 6 | 淘车二手车 | 淘车二手车 |
|
||||
| 7 | 闲鱼 | 闲鱼 |
|
||||
| 8 | 268V | 268V |
|
||||
| 9 | 检车家 | 检车家 |
|
||||
| 10 | 花乡 | 花乡 |
|
||||
|
||||
### 5.3 Top10 品牌分平台露出率 测试通过✅
|
||||
|
||||
DeepSeek、豆包、通义、元宝、文心、Kimi:画面上同名占比无差异。
|
||||
|
||||
## 6. 正面词、负面词 测试通过✅
|
||||
|
||||
文案约定:AI 回答关键词=AI 认知词云;正面关键词=正面词;未监测到负面词=中正面率100%,暂无负面词。
|
||||
|
||||
正面词条相同(20 个)。两边均无负面词。
|
||||
|
||||
## 7. 信源内容类型 测试通过✅
|
||||
|
||||
综合:画面上同名占比无差异。
|
||||
|
||||
DeepSeek:画面上同名占比无差异。
|
||||
|
||||
豆包:画面上同名占比无差异。
|
||||
|
||||
通义:画面上同名占比无差异。
|
||||
|
||||
元宝:画面上同名占比无差异。
|
||||
|
||||
文心:画面上同名占比无差异。
|
||||
|
||||
Kimi:画面上同名占比无差异。
|
||||
|
||||
## 8. 信源发布时间 测试通过✅
|
||||
|
||||
综合:画面上同名占比无差异。
|
||||
|
||||
DeepSeek:画面上同名占比无差异。
|
||||
|
||||
豆包:画面上同名占比无差异。
|
||||
|
||||
通义:画面上同名占比无差异。
|
||||
|
||||
元宝:画面上同名占比无差异。
|
||||
|
||||
文心:画面上同名占比无差异。
|
||||
|
||||
Kimi:画面上同名占比无差异。
|
||||
|
||||
## 9. 媒体类型前 10 测试通过✅
|
||||
|
||||
综合:画面上同名占比无差异。
|
||||
|
||||
DeepSeek:画面上同名占比无差异。
|
||||
|
||||
豆包:画面上同名占比无差异。
|
||||
|
||||
通义:画面上同名占比无差异。
|
||||
|
||||
元宝:画面上同名占比无差异。
|
||||
|
||||
文心:画面上同名占比无差异。
|
||||
|
||||
Kimi:画面上同名占比无差异。
|
||||
|
||||
## 10. 媒体名称前 10 测试通过✅
|
||||
|
||||
综合:画面上同名占比无差异。
|
||||
|
||||
DeepSeek:画面上同名占比无差异。
|
||||
|
||||
豆包:画面上同名占比无差异。
|
||||
|
||||
通义:画面上同名占比无差异。
|
||||
|
||||
元宝:画面上同名占比无差异。
|
||||
|
||||
文心:画面上同名占比无差异。
|
||||
|
||||
Kimi:画面上同名占比无差异。
|
||||
|
||||
## 11. 关联信源标题、渠道、被引次数 测试失败❌
|
||||
|
||||
按标题对齐,不比序号。只取前 30。
|
||||
|
||||
| 平台 | 说明 | a | b | c |
|
||||
|---|---|---|---|---|
|
||||
| 文心 | 标题集合不同 | 30 | 30 | 2 |
|
||||
|
||||
## 12. 关联信源标题序号 测试失败❌
|
||||
|
||||
比画面序号上的标题。平台按 cite_count 降序稳定排序。
|
||||
|
||||
| 平台 | 序号 | HTML 标题 | 平台标题 | HTML次数 | 平台次数 | 说明 |
|
||||
|---|---|---|---|---|---|---|
|
||||
| 文心 | 30 | 一辆2024年买回来的新能源车,表显3万公里,落地价60万,车主把手续都备齐了,直接开到二手车市场准 | 一辆2024年买回来的新能源车,表显3万公里,落地价60万,车主把手续都备齐了,直接开到二手车市场准 | 1 | 1 | 并列换位,不是缺标题 |
|
||||
|
||||
@ -0,0 +1,165 @@
|
||||
# 测试报告
|
||||
|
||||
一致。
|
||||
|
||||
HTML 监测时间 2026-09-06 对应平台监测周期 9月 W36。页面日期对应不是差异。HTML「综合」对平台「全平台」。差超过 0.05 才算不同。排行榜只比各自 Top 10。
|
||||
|
||||
## 参数
|
||||
|
||||
- 平台:https://haoxian.cemeta.cn/geo-monitor?batchDate=2026-09-06&reportType=monitor&level=project&project=1170&line=%E5%8D%A1%E6%B3%B0%E9%A9%B0::%E6%B1%BD%E8%BD%A6%E5%B9%B3%E5%8F%B0
|
||||
- HTML:https://cemeta-resource-1313090634.cos.ap-beijing.myqcloud.com/workflow/a92d07ce-1e57-4dee-a2a5-ad893bd08806.html
|
||||
- url日期:9月 W36
|
||||
- html日期:2026-09-06
|
||||
- batchId:`KATECHI-HIST-1170-20260906`
|
||||
- 保存目录:D:\test\haoxian-script\haoxian_kataichi\skills\L1-geo-html-screen-diff\monitor-0906-test
|
||||
|
||||
## 十二项结论
|
||||
|
||||
| 项 | 结果 |
|
||||
|---|---|
|
||||
| 1 两个 URL 能否打开 | 测试通过✅ |
|
||||
| 2 七个 AI 平台 | 测试通过✅ |
|
||||
| 3 露出率、前三率、正面率 | 测试通过✅ |
|
||||
| 4 分平台核心指标 | 测试通过✅ |
|
||||
| 5 露出排行 · 各平台明细 | 测试通过✅ |
|
||||
| 6 正面词、负面词 | 测试通过✅ |
|
||||
| 7 信源内容类型 | 测试通过✅ |
|
||||
| 8 信源发布时间 | 测试通过✅ |
|
||||
| 9 媒体类型前 10 | 测试通过✅ |
|
||||
| 10 媒体名称前 10 | 测试通过✅ |
|
||||
| 11 关联信源标题、渠道、被引次数 | 测试通过✅ |
|
||||
| 12 关联信源标题序号 | 测试通过✅ |
|
||||
|
||||
## 1. 页面打开 测试通过✅
|
||||
|
||||
两个 URL 都能打开。HTML 页头监测日期对应 2026-09-06,项目为 购买场景词。平台页监测周期为 9月 W36。
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
## 2. 七个 AI 平台 测试通过✅
|
||||
|
||||
综合=全平台,通义=通义千问,元宝=腾讯元宝,文心=百度文心;DeepSeek、豆包、Kimi 两边写法相同。
|
||||
|
||||
## 3. 露出率、前三率、正面率 测试通过✅
|
||||
|
||||
7 个平台相同。综合为 19.8% / 15.6% / 99.7%。
|
||||
|
||||
综合、DeepSeek、豆包、通义、元宝、文心、Kimi:画面上同名占比无差异。
|
||||
|
||||
## 4. 分平台核心指标 测试通过✅
|
||||
|
||||
HTML 各平台 self/趋势最新点对平台 snapshot 分平台三项。综合覆盖六个平台的这三个点。
|
||||
|
||||
综合、DeepSeek、豆包、通义、元宝、文心、Kimi:画面上同名占比无差异。
|
||||
|
||||
## 5. 露出排行 · 各平台明细 测试通过✅
|
||||
|
||||
HTML「行业露出率排行榜」对平台「露出排行 · 各平台明细」。只比 Top 10。两边按平均露出率降序取 Top 10。
|
||||
|
||||
### 5.1 综合平均露出率对全平台列 测试通过✅
|
||||
|
||||
Top 10 同名露出率无差异。
|
||||
|
||||
### 5.2 综合 Top 10 名次和品牌名 测试通过✅
|
||||
|
||||
| 排名 | HTML 综合 | 平台全平台 |
|
||||
|---|---|---|
|
||||
| 1 | 瓜子二手车 | 瓜子二手车 |
|
||||
| 2 | 优信二手车 | 优信二手车 |
|
||||
| 3 | 查博士 | 查博士 |
|
||||
| 4 | 懂车帝 | 懂车帝 |
|
||||
| 5 | 澳康达 | 澳康达 |
|
||||
| 6 | 淘车二手车 | 淘车二手车 |
|
||||
| 7 | 花乡 | 花乡 |
|
||||
| 8 | 人人车 | 人人车 |
|
||||
| 9 | 闲鱼 | 闲鱼 |
|
||||
| 10 | 汽车之家 | 汽车之家 |
|
||||
|
||||
### 5.3 Top10 品牌分平台露出率 测试通过✅
|
||||
|
||||
DeepSeek、豆包、通义、元宝、文心、Kimi:画面上同名占比无差异。
|
||||
|
||||
## 6. 正面词、负面词 测试通过✅
|
||||
|
||||
文案约定:AI 回答关键词=AI 认知词云;正面关键词=正面词;未监测到负面词=中正面率100%,暂无负面词。
|
||||
|
||||
正面词条相同(20 个)。负面词条相同(3 个)。
|
||||
|
||||
## 7. 信源内容类型 测试通过✅
|
||||
|
||||
综合:画面上同名占比无差异。
|
||||
|
||||
DeepSeek:画面上同名占比无差异。
|
||||
|
||||
豆包:画面上同名占比无差异。
|
||||
|
||||
通义:画面上同名占比无差异。
|
||||
|
||||
元宝:画面上同名占比无差异。
|
||||
|
||||
文心:画面上同名占比无差异。
|
||||
|
||||
Kimi:画面上同名占比无差异。
|
||||
|
||||
## 8. 信源发布时间 测试通过✅
|
||||
|
||||
综合:画面上同名占比无差异。
|
||||
|
||||
DeepSeek:画面上同名占比无差异。
|
||||
|
||||
豆包:画面上同名占比无差异。
|
||||
|
||||
通义:画面上同名占比无差异。
|
||||
|
||||
元宝:画面上同名占比无差异。
|
||||
|
||||
文心:画面上同名占比无差异。
|
||||
|
||||
Kimi:画面上同名占比无差异。
|
||||
|
||||
## 9. 媒体类型前 10 测试通过✅
|
||||
|
||||
综合:画面上同名占比无差异。
|
||||
|
||||
DeepSeek:画面上同名占比无差异。
|
||||
|
||||
豆包:画面上同名占比无差异。
|
||||
|
||||
通义:画面上同名占比无差异。
|
||||
|
||||
元宝:画面上同名占比无差异。
|
||||
|
||||
文心:画面上同名占比无差异。
|
||||
|
||||
Kimi:画面上同名占比无差异。
|
||||
|
||||
## 10. 媒体名称前 10 测试通过✅
|
||||
|
||||
综合:画面上同名占比无差异。
|
||||
|
||||
DeepSeek:画面上同名占比无差异。
|
||||
|
||||
豆包:画面上同名占比无差异。
|
||||
|
||||
通义:画面上同名占比无差异。
|
||||
|
||||
元宝:画面上同名占比无差异。
|
||||
|
||||
文心:画面上同名占比无差异。
|
||||
|
||||
Kimi:画面上同名占比无差异。
|
||||
|
||||
## 11. 关联信源标题、渠道、被引次数 测试通过✅
|
||||
|
||||
按标题对齐,不比序号。只取前 30。
|
||||
|
||||
七个平台:标题集合及渠道、被引次数相同。
|
||||
|
||||
## 12. 关联信源标题序号 测试通过✅
|
||||
|
||||
比画面序号上的标题。平台按 cite_count 降序稳定排序。
|
||||
|
||||
七个平台:前 30 序号标题相同。
|
||||
|
||||
@ -0,0 +1,165 @@
|
||||
# 测试报告
|
||||
|
||||
一致。
|
||||
|
||||
HTML 监测时间 2026-09-06 对应平台监测周期 9月 W36。页面日期对应不是差异。HTML「综合」对平台「全平台」。差超过 0.05 才算不同。排行榜只比各自 Top 10。
|
||||
|
||||
## 参数
|
||||
|
||||
- 平台:https://haoxian.cemeta.cn/geo-monitor?batchDate=2026-09-06&reportType=monitor&level=project&project=1171&line=%E5%8D%A1%E6%B3%B0%E9%A9%B0::%E6%B1%BD%E8%BD%A6%E5%B9%B3%E5%8F%B0
|
||||
- HTML:https://cemeta-resource-1313090634.cos.ap-beijing.myqcloud.com/workflow/216ef3e0-5c7a-4304-bf6e-e0d52e6c1c3d.html
|
||||
- url日期:9月 W36
|
||||
- html日期:2026-09-06
|
||||
- batchId:`KATECHI-HIST-1171-20260906`
|
||||
- 保存目录:D:\test\haoxian-script\haoxian_kataichi\skills\L1-geo-html-screen-diff\monitor-0906-test
|
||||
|
||||
## 十二项结论
|
||||
|
||||
| 项 | 结果 |
|
||||
|---|---|
|
||||
| 1 两个 URL 能否打开 | 测试通过✅ |
|
||||
| 2 七个 AI 平台 | 测试通过✅ |
|
||||
| 3 露出率、前三率、正面率 | 测试通过✅ |
|
||||
| 4 分平台核心指标 | 测试通过✅ |
|
||||
| 5 露出排行 · 各平台明细 | 测试通过✅ |
|
||||
| 6 正面词、负面词 | 测试通过✅ |
|
||||
| 7 信源内容类型 | 测试通过✅ |
|
||||
| 8 信源发布时间 | 测试通过✅ |
|
||||
| 9 媒体类型前 10 | 测试通过✅ |
|
||||
| 10 媒体名称前 10 | 测试通过✅ |
|
||||
| 11 关联信源标题、渠道、被引次数 | 测试通过✅ |
|
||||
| 12 关联信源标题序号 | 测试通过✅ |
|
||||
|
||||
## 1. 页面打开 测试通过✅
|
||||
|
||||
两个 URL 都能打开。HTML 页头监测日期对应 2026-09-06,项目为 价格词。平台页监测周期为 9月 W36。
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
## 2. 七个 AI 平台 测试通过✅
|
||||
|
||||
综合=全平台,通义=通义千问,元宝=腾讯元宝,文心=百度文心;DeepSeek、豆包、Kimi 两边写法相同。
|
||||
|
||||
## 3. 露出率、前三率、正面率 测试通过✅
|
||||
|
||||
7 个平台相同。综合为 6.4% / 6.4% / 100.0%。
|
||||
|
||||
综合、DeepSeek、豆包、通义、元宝、文心、Kimi:画面上同名占比无差异。
|
||||
|
||||
## 4. 分平台核心指标 测试通过✅
|
||||
|
||||
HTML 各平台 self/趋势最新点对平台 snapshot 分平台三项。综合覆盖六个平台的这三个点。
|
||||
|
||||
综合、DeepSeek、豆包、通义、元宝、文心、Kimi:画面上同名占比无差异。
|
||||
|
||||
## 5. 露出排行 · 各平台明细 测试通过✅
|
||||
|
||||
HTML「行业露出率排行榜」对平台「露出排行 · 各平台明细」。只比 Top 10。两边按平均露出率降序取 Top 10。
|
||||
|
||||
### 5.1 综合平均露出率对全平台列 测试通过✅
|
||||
|
||||
Top 10 同名露出率无差异。
|
||||
|
||||
### 5.2 综合 Top 10 名次和品牌名 测试通过✅
|
||||
|
||||
| 排名 | HTML 综合 | 平台全平台 |
|
||||
|---|---|---|
|
||||
| 1 | 瓜子二手车 | 瓜子二手车 |
|
||||
| 2 | 懂车帝 | 懂车帝 |
|
||||
| 3 | 查博士 | 查博士 |
|
||||
| 4 | 淘车二手车 | 淘车二手车 |
|
||||
| 5 | 优信二手车 | 优信二手车 |
|
||||
| 6 | 闲鱼 | 闲鱼 |
|
||||
| 7 | 花乡 | 花乡 |
|
||||
| 8 | 人人车 | 人人车 |
|
||||
| 9 | 车300 | 车300 |
|
||||
| 10 | 汽车之家 | 汽车之家 |
|
||||
|
||||
### 5.3 Top10 品牌分平台露出率 测试通过✅
|
||||
|
||||
DeepSeek、豆包、通义、元宝、文心、Kimi:画面上同名占比无差异。
|
||||
|
||||
## 6. 正面词、负面词 测试通过✅
|
||||
|
||||
文案约定:AI 回答关键词=AI 认知词云;正面关键词=正面词;未监测到负面词=中正面率100%,暂无负面词。
|
||||
|
||||
正面词条相同(20 个)。两边均无负面词。
|
||||
|
||||
## 7. 信源内容类型 测试通过✅
|
||||
|
||||
综合:画面上同名占比无差异。
|
||||
|
||||
DeepSeek:画面上同名占比无差异。
|
||||
|
||||
豆包:画面上同名占比无差异。
|
||||
|
||||
通义:画面上同名占比无差异。
|
||||
|
||||
元宝:画面上同名占比无差异。
|
||||
|
||||
文心:画面上同名占比无差异。
|
||||
|
||||
Kimi:画面上同名占比无差异。
|
||||
|
||||
## 8. 信源发布时间 测试通过✅
|
||||
|
||||
综合:画面上同名占比无差异。
|
||||
|
||||
DeepSeek:画面上同名占比无差异。
|
||||
|
||||
豆包:画面上同名占比无差异。
|
||||
|
||||
通义:画面上同名占比无差异。
|
||||
|
||||
元宝:画面上同名占比无差异。
|
||||
|
||||
文心:画面上同名占比无差异。
|
||||
|
||||
Kimi:画面上同名占比无差异。
|
||||
|
||||
## 9. 媒体类型前 10 测试通过✅
|
||||
|
||||
综合:画面上同名占比无差异。
|
||||
|
||||
DeepSeek:画面上同名占比无差异。
|
||||
|
||||
豆包:画面上同名占比无差异。
|
||||
|
||||
通义:画面上同名占比无差异。
|
||||
|
||||
元宝:画面上同名占比无差异。
|
||||
|
||||
文心:画面上同名占比无差异。
|
||||
|
||||
Kimi:画面上同名占比无差异。
|
||||
|
||||
## 10. 媒体名称前 10 测试通过✅
|
||||
|
||||
综合:画面上同名占比无差异。
|
||||
|
||||
DeepSeek:画面上同名占比无差异。
|
||||
|
||||
豆包:画面上同名占比无差异。
|
||||
|
||||
通义:画面上同名占比无差异。
|
||||
|
||||
元宝:画面上同名占比无差异。
|
||||
|
||||
文心:画面上同名占比无差异。
|
||||
|
||||
Kimi:画面上同名占比无差异。
|
||||
|
||||
## 11. 关联信源标题、渠道、被引次数 测试通过✅
|
||||
|
||||
按标题对齐,不比序号。只取前 30。
|
||||
|
||||
七个平台:标题集合及渠道、被引次数相同。
|
||||
|
||||
## 12. 关联信源标题序号 测试通过✅
|
||||
|
||||
比画面序号上的标题。平台按 cite_count 降序稳定排序。
|
||||
|
||||
七个平台:前 30 序号标题相同。
|
||||
|
||||
@ -0,0 +1,165 @@
|
||||
# 测试报告
|
||||
|
||||
一致。
|
||||
|
||||
HTML 监测时间 2026-09-06 对应平台监测周期 9月 W36。页面日期对应不是差异。HTML「综合」对平台「全平台」。差超过 0.05 才算不同。排行榜只比各自 Top 10。
|
||||
|
||||
## 参数
|
||||
|
||||
- 平台:https://haoxian.cemeta.cn/geo-monitor?batchDate=2026-09-06&reportType=monitor&level=project&project=1173&line=%E5%8D%A1%E6%B3%B0%E9%A9%B0::%E6%B1%BD%E8%BD%A6%E5%B9%B3%E5%8F%B0
|
||||
- HTML:https://cemeta-resource-1313090634.cos.ap-beijing.myqcloud.com/workflow/a57a0750-7305-4f27-888e-19387da469c4.html
|
||||
- url日期:9月 W36
|
||||
- html日期:2026-09-06
|
||||
- batchId:`KATECHI-HIST-1173-20260906`
|
||||
- 保存目录:D:\test\haoxian-script\haoxian_kataichi\skills\L1-geo-html-screen-diff\monitor-0906-test
|
||||
|
||||
## 十二项结论
|
||||
|
||||
| 项 | 结果 |
|
||||
|---|---|
|
||||
| 1 两个 URL 能否打开 | 测试通过✅ |
|
||||
| 2 七个 AI 平台 | 测试通过✅ |
|
||||
| 3 露出率、前三率、正面率 | 测试通过✅ |
|
||||
| 4 分平台核心指标 | 测试通过✅ |
|
||||
| 5 露出排行 · 各平台明细 | 测试通过✅ |
|
||||
| 6 正面词、负面词 | 测试通过✅ |
|
||||
| 7 信源内容类型 | 测试通过✅ |
|
||||
| 8 信源发布时间 | 测试通过✅ |
|
||||
| 9 媒体类型前 10 | 测试通过✅ |
|
||||
| 10 媒体名称前 10 | 测试通过✅ |
|
||||
| 11 关联信源标题、渠道、被引次数 | 测试通过✅ |
|
||||
| 12 关联信源标题序号 | 测试通过✅ |
|
||||
|
||||
## 1. 页面打开 测试通过✅
|
||||
|
||||
两个 URL 都能打开。HTML 页头监测日期对应 2026-09-06,项目为 口碑评价。平台页监测周期为 9月 W36。
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
## 2. 七个 AI 平台 测试通过✅
|
||||
|
||||
综合=全平台,通义=通义千问,元宝=腾讯元宝,文心=百度文心;DeepSeek、豆包、Kimi 两边写法相同。
|
||||
|
||||
## 3. 露出率、前三率、正面率 测试通过✅
|
||||
|
||||
7 个平台相同。综合为 100.0% / 99.7% / 87.7%。
|
||||
|
||||
综合、DeepSeek、豆包、通义、元宝、文心、Kimi:画面上同名占比无差异。
|
||||
|
||||
## 4. 分平台核心指标 测试通过✅
|
||||
|
||||
HTML 各平台 self/趋势最新点对平台 snapshot 分平台三项。综合覆盖六个平台的这三个点。
|
||||
|
||||
综合、DeepSeek、豆包、通义、元宝、文心、Kimi:画面上同名占比无差异。
|
||||
|
||||
## 5. 露出排行 · 各平台明细 测试通过✅
|
||||
|
||||
HTML「行业露出率排行榜」对平台「露出排行 · 各平台明细」。只比 Top 10。两边按平均露出率降序取 Top 10。
|
||||
|
||||
### 5.1 综合平均露出率对全平台列 测试通过✅
|
||||
|
||||
Top 10 同名露出率无差异。
|
||||
|
||||
### 5.2 综合 Top 10 名次和品牌名 测试通过✅
|
||||
|
||||
| 排名 | HTML 综合 | 平台全平台 |
|
||||
|---|---|---|
|
||||
| 1 | 卡泰驰 | 卡泰驰 |
|
||||
| 2 | 汽车之家 | 汽车之家 |
|
||||
| 3 | 查博士 | 查博士 |
|
||||
| 4 | 瓜子二手车 | 瓜子二手车 |
|
||||
| 5 | 懂车帝 | 懂车帝 |
|
||||
| 6 | 二手车之家 | 二手车之家 |
|
||||
| 7 | 优信二手车 | 优信二手车 |
|
||||
| 8 | 268V | 268V |
|
||||
| 9 | 澳康达 | 澳康达 |
|
||||
| 10 | 检车家 | 检车家 |
|
||||
|
||||
### 5.3 Top10 品牌分平台露出率 测试通过✅
|
||||
|
||||
DeepSeek、豆包、通义、元宝、文心、Kimi:画面上同名占比无差异。
|
||||
|
||||
## 6. 正面词、负面词 测试通过✅
|
||||
|
||||
文案约定:AI 回答关键词=AI 认知词云;正面关键词=正面词;未监测到负面词=中正面率100%,暂无负面词。
|
||||
|
||||
正面词条相同(20 个)。负面词条相同(20 个)。
|
||||
|
||||
## 7. 信源内容类型 测试通过✅
|
||||
|
||||
综合:画面上同名占比无差异。
|
||||
|
||||
DeepSeek:画面上同名占比无差异。
|
||||
|
||||
豆包:画面上同名占比无差异。
|
||||
|
||||
通义:画面上同名占比无差异。
|
||||
|
||||
元宝:画面上同名占比无差异。
|
||||
|
||||
文心:画面上同名占比无差异。
|
||||
|
||||
Kimi:画面上同名占比无差异。
|
||||
|
||||
## 8. 信源发布时间 测试通过✅
|
||||
|
||||
综合:画面上同名占比无差异。
|
||||
|
||||
DeepSeek:画面上同名占比无差异。
|
||||
|
||||
豆包:画面上同名占比无差异。
|
||||
|
||||
通义:画面上同名占比无差异。
|
||||
|
||||
元宝:画面上同名占比无差异。
|
||||
|
||||
文心:画面上同名占比无差异。
|
||||
|
||||
Kimi:画面上同名占比无差异。
|
||||
|
||||
## 9. 媒体类型前 10 测试通过✅
|
||||
|
||||
综合:画面上同名占比无差异。
|
||||
|
||||
DeepSeek:画面上同名占比无差异。
|
||||
|
||||
豆包:画面上同名占比无差异。
|
||||
|
||||
通义:画面上同名占比无差异。
|
||||
|
||||
元宝:画面上同名占比无差异。
|
||||
|
||||
文心:画面上同名占比无差异。
|
||||
|
||||
Kimi:画面上同名占比无差异。
|
||||
|
||||
## 10. 媒体名称前 10 测试通过✅
|
||||
|
||||
综合:画面上同名占比无差异。
|
||||
|
||||
DeepSeek:画面上同名占比无差异。
|
||||
|
||||
豆包:画面上同名占比无差异。
|
||||
|
||||
通义:画面上同名占比无差异。
|
||||
|
||||
元宝:画面上同名占比无差异。
|
||||
|
||||
文心:画面上同名占比无差异。
|
||||
|
||||
Kimi:画面上同名占比无差异。
|
||||
|
||||
## 11. 关联信源标题、渠道、被引次数 测试通过✅
|
||||
|
||||
按标题对齐,不比序号。只取前 30。
|
||||
|
||||
七个平台:标题集合及渠道、被引次数相同。
|
||||
|
||||
## 12. 关联信源标题序号 测试通过✅
|
||||
|
||||
比画面序号上的标题。平台按 cite_count 降序稳定排序。
|
||||
|
||||
七个平台:前 30 序号标题相同。
|
||||
|
||||
@ -0,0 +1,165 @@
|
||||
# 测试报告
|
||||
|
||||
一致。
|
||||
|
||||
HTML 监测时间 2026-09-06 对应平台监测周期 9月 W36。页面日期对应不是差异。HTML「综合」对平台「全平台」。差超过 0.05 才算不同。排行榜只比各自 Top 10。
|
||||
|
||||
## 参数
|
||||
|
||||
- 平台:https://haoxian.cemeta.cn/geo-monitor?batchDate=2026-09-06&reportType=monitor&level=project&project=1174&line=%E5%8D%A1%E6%B3%B0%E9%A9%B0::%E6%B1%BD%E8%BD%A6%E5%B9%B3%E5%8F%B0
|
||||
- HTML:https://cemeta-resource-1313090634.cos.ap-beijing.myqcloud.com/workflow/8d1398b3-4214-4ef5-887d-d3286371a4b1.html
|
||||
- url日期:9月 W36
|
||||
- html日期:2026-09-06
|
||||
- batchId:`KATECHI-HIST-1174-20260906`
|
||||
- 保存目录:D:\test\haoxian-script\haoxian_kataichi\skills\L1-geo-html-screen-diff\monitor-0906-test
|
||||
|
||||
## 十二项结论
|
||||
|
||||
| 项 | 结果 |
|
||||
|---|---|
|
||||
| 1 两个 URL 能否打开 | 测试通过✅ |
|
||||
| 2 七个 AI 平台 | 测试通过✅ |
|
||||
| 3 露出率、前三率、正面率 | 测试通过✅ |
|
||||
| 4 分平台核心指标 | 测试通过✅ |
|
||||
| 5 露出排行 · 各平台明细 | 测试通过✅ |
|
||||
| 6 正面词、负面词 | 测试通过✅ |
|
||||
| 7 信源内容类型 | 测试通过✅ |
|
||||
| 8 信源发布时间 | 测试通过✅ |
|
||||
| 9 媒体类型前 10 | 测试通过✅ |
|
||||
| 10 媒体名称前 10 | 测试通过✅ |
|
||||
| 11 关联信源标题、渠道、被引次数 | 测试通过✅ |
|
||||
| 12 关联信源标题序号 | 测试通过✅ |
|
||||
|
||||
## 1. 页面打开 测试通过✅
|
||||
|
||||
两个 URL 都能打开。HTML 页头监测日期对应 2026-09-06,项目为 宝马。平台页监测周期为 9月 W36。
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
## 2. 七个 AI 平台 测试通过✅
|
||||
|
||||
综合=全平台,通义=通义千问,元宝=腾讯元宝,文心=百度文心;DeepSeek、豆包、Kimi 两边写法相同。
|
||||
|
||||
## 3. 露出率、前三率、正面率 测试通过✅
|
||||
|
||||
7 个平台相同。综合为 5.0% / 4.8% / 100.0%。
|
||||
|
||||
综合、DeepSeek、豆包、通义、元宝、文心、Kimi:画面上同名占比无差异。
|
||||
|
||||
## 4. 分平台核心指标 测试通过✅
|
||||
|
||||
HTML 各平台 self/趋势最新点对平台 snapshot 分平台三项。综合覆盖六个平台的这三个点。
|
||||
|
||||
综合、DeepSeek、豆包、通义、元宝、文心、Kimi:画面上同名占比无差异。
|
||||
|
||||
## 5. 露出排行 · 各平台明细 测试通过✅
|
||||
|
||||
HTML「行业露出率排行榜」对平台「露出排行 · 各平台明细」。只比 Top 10。两边按平均露出率降序取 Top 10。
|
||||
|
||||
### 5.1 综合平均露出率对全平台列 测试通过✅
|
||||
|
||||
Top 10 同名露出率无差异。
|
||||
|
||||
### 5.2 综合 Top 10 名次和品牌名 测试通过✅
|
||||
|
||||
| 排名 | HTML 综合 | 平台全平台 |
|
||||
|---|---|---|
|
||||
| 1 | 瓜子二手车 | 瓜子二手车 |
|
||||
| 2 | 查博士 | 查博士 |
|
||||
| 3 | 懂车帝 | 懂车帝 |
|
||||
| 4 | 优信二手车 | 优信二手车 |
|
||||
| 5 | 检车家 | 检车家 |
|
||||
| 6 | 闲鱼 | 闲鱼 |
|
||||
| 7 | 澳康达 | 澳康达 |
|
||||
| 8 | 人人车 | 人人车 |
|
||||
| 9 | 花乡 | 花乡 |
|
||||
| 10 | 268V | 268V |
|
||||
|
||||
### 5.3 Top10 品牌分平台露出率 测试通过✅
|
||||
|
||||
DeepSeek、豆包、通义、元宝、文心、Kimi:画面上同名占比无差异。
|
||||
|
||||
## 6. 正面词、负面词 测试通过✅
|
||||
|
||||
文案约定:AI 回答关键词=AI 认知词云;正面关键词=正面词;未监测到负面词=中正面率100%,暂无负面词。
|
||||
|
||||
正面词条相同(20 个)。两边均无负面词。
|
||||
|
||||
## 7. 信源内容类型 测试通过✅
|
||||
|
||||
综合:画面上同名占比无差异。
|
||||
|
||||
DeepSeek:画面上同名占比无差异。
|
||||
|
||||
豆包:画面上同名占比无差异。
|
||||
|
||||
通义:画面上同名占比无差异。
|
||||
|
||||
元宝:画面上同名占比无差异。
|
||||
|
||||
文心:画面上同名占比无差异。
|
||||
|
||||
Kimi:画面上同名占比无差异。
|
||||
|
||||
## 8. 信源发布时间 测试通过✅
|
||||
|
||||
综合:画面上同名占比无差异。
|
||||
|
||||
DeepSeek:画面上同名占比无差异。
|
||||
|
||||
豆包:画面上同名占比无差异。
|
||||
|
||||
通义:画面上同名占比无差异。
|
||||
|
||||
元宝:画面上同名占比无差异。
|
||||
|
||||
文心:画面上同名占比无差异。
|
||||
|
||||
Kimi:画面上同名占比无差异。
|
||||
|
||||
## 9. 媒体类型前 10 测试通过✅
|
||||
|
||||
综合:画面上同名占比无差异。
|
||||
|
||||
DeepSeek:画面上同名占比无差异。
|
||||
|
||||
豆包:画面上同名占比无差异。
|
||||
|
||||
通义:画面上同名占比无差异。
|
||||
|
||||
元宝:画面上同名占比无差异。
|
||||
|
||||
文心:画面上同名占比无差异。
|
||||
|
||||
Kimi:画面上同名占比无差异。
|
||||
|
||||
## 10. 媒体名称前 10 测试通过✅
|
||||
|
||||
综合:画面上同名占比无差异。
|
||||
|
||||
DeepSeek:画面上同名占比无差异。
|
||||
|
||||
豆包:画面上同名占比无差异。
|
||||
|
||||
通义:画面上同名占比无差异。
|
||||
|
||||
元宝:画面上同名占比无差异。
|
||||
|
||||
文心:画面上同名占比无差异。
|
||||
|
||||
Kimi:画面上同名占比无差异。
|
||||
|
||||
## 11. 关联信源标题、渠道、被引次数 测试通过✅
|
||||
|
||||
按标题对齐,不比序号。只取前 30。
|
||||
|
||||
七个平台:标题集合及渠道、被引次数相同。
|
||||
|
||||
## 12. 关联信源标题序号 测试通过✅
|
||||
|
||||
比画面序号上的标题。平台按 cite_count 降序稳定排序。
|
||||
|
||||
七个平台:前 30 序号标题相同。
|
||||
|
||||
@ -0,0 +1,165 @@
|
||||
# 测试报告
|
||||
|
||||
一致。
|
||||
|
||||
HTML 监测时间 2026-09-06 对应平台监测周期 9月 W36。页面日期对应不是差异。HTML「综合」对平台「全平台」。差超过 0.05 才算不同。排行榜只比各自 Top 10。
|
||||
|
||||
## 参数
|
||||
|
||||
- 平台:https://haoxian.cemeta.cn/geo-monitor?batchDate=2026-09-06&reportType=monitor&level=project&project=1177&line=%E5%8D%A1%E6%B3%B0%E9%A9%B0::%E6%B1%BD%E8%BD%A6%E5%B9%B3%E5%8F%B0
|
||||
- HTML:https://cemeta-resource-1313090634.cos.ap-beijing.myqcloud.com/workflow/372c7809-01c5-4593-a976-c6baf78f79aa.html
|
||||
- url日期:9月 W36
|
||||
- html日期:2026-09-06
|
||||
- batchId:`KATECHI-HIST-1177-20260906`
|
||||
- 保存目录:D:\test\haoxian-script\haoxian_kataichi\skills\L1-geo-html-screen-diff\monitor-0906-test
|
||||
|
||||
## 十二项结论
|
||||
|
||||
| 项 | 结果 |
|
||||
|---|---|
|
||||
| 1 两个 URL 能否打开 | 测试通过✅ |
|
||||
| 2 七个 AI 平台 | 测试通过✅ |
|
||||
| 3 露出率、前三率、正面率 | 测试通过✅ |
|
||||
| 4 分平台核心指标 | 测试通过✅ |
|
||||
| 5 露出排行 · 各平台明细 | 测试通过✅ |
|
||||
| 6 正面词、负面词 | 测试通过✅ |
|
||||
| 7 信源内容类型 | 测试通过✅ |
|
||||
| 8 信源发布时间 | 测试通过✅ |
|
||||
| 9 媒体类型前 10 | 测试通过✅ |
|
||||
| 10 媒体名称前 10 | 测试通过✅ |
|
||||
| 11 关联信源标题、渠道、被引次数 | 测试通过✅ |
|
||||
| 12 关联信源标题序号 | 测试通过✅ |
|
||||
|
||||
## 1. 页面打开 测试通过✅
|
||||
|
||||
两个 URL 都能打开。HTML 页头监测日期对应 2026-09-06,项目为 奥迪。平台页监测周期为 9月 W36。
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
## 2. 七个 AI 平台 测试通过✅
|
||||
|
||||
综合=全平台,通义=通义千问,元宝=腾讯元宝,文心=百度文心;DeepSeek、豆包、Kimi 两边写法相同。
|
||||
|
||||
## 3. 露出率、前三率、正面率 测试通过✅
|
||||
|
||||
7 个平台相同。综合为 21.2% / 18.6% / 100.0%。
|
||||
|
||||
综合、DeepSeek、豆包、通义、元宝、文心、Kimi:画面上同名占比无差异。
|
||||
|
||||
## 4. 分平台核心指标 测试通过✅
|
||||
|
||||
HTML 各平台 self/趋势最新点对平台 snapshot 分平台三项。综合覆盖六个平台的这三个点。
|
||||
|
||||
综合、DeepSeek、豆包、通义、元宝、文心、Kimi:画面上同名占比无差异。
|
||||
|
||||
## 5. 露出排行 · 各平台明细 测试通过✅
|
||||
|
||||
HTML「行业露出率排行榜」对平台「露出排行 · 各平台明细」。只比 Top 10。两边按平均露出率降序取 Top 10。
|
||||
|
||||
### 5.1 综合平均露出率对全平台列 测试通过✅
|
||||
|
||||
Top 10 同名露出率无差异。
|
||||
|
||||
### 5.2 综合 Top 10 名次和品牌名 测试通过✅
|
||||
|
||||
| 排名 | HTML 综合 | 平台全平台 |
|
||||
|---|---|---|
|
||||
| 1 | 瓜子二手车 | 瓜子二手车 |
|
||||
| 2 | 查博士 | 查博士 |
|
||||
| 3 | 优信二手车 | 优信二手车 |
|
||||
| 4 | 懂车帝 | 懂车帝 |
|
||||
| 5 | 闲鱼 | 闲鱼 |
|
||||
| 6 | 澳康达 | 澳康达 |
|
||||
| 7 | 卡泰驰 | 卡泰驰 |
|
||||
| 8 | 检车家 | 检车家 |
|
||||
| 9 | 车300 | 车300 |
|
||||
| 10 | 花乡 | 花乡 |
|
||||
|
||||
### 5.3 Top10 品牌分平台露出率 测试通过✅
|
||||
|
||||
DeepSeek、豆包、通义、元宝、文心、Kimi:画面上同名占比无差异。
|
||||
|
||||
## 6. 正面词、负面词 测试通过✅
|
||||
|
||||
文案约定:AI 回答关键词=AI 认知词云;正面关键词=正面词;未监测到负面词=中正面率100%,暂无负面词。
|
||||
|
||||
正面词条相同(20 个)。两边均无负面词。
|
||||
|
||||
## 7. 信源内容类型 测试通过✅
|
||||
|
||||
综合:画面上同名占比无差异。
|
||||
|
||||
DeepSeek:画面上同名占比无差异。
|
||||
|
||||
豆包:画面上同名占比无差异。
|
||||
|
||||
通义:画面上同名占比无差异。
|
||||
|
||||
元宝:画面上同名占比无差异。
|
||||
|
||||
文心:画面上同名占比无差异。
|
||||
|
||||
Kimi:画面上同名占比无差异。
|
||||
|
||||
## 8. 信源发布时间 测试通过✅
|
||||
|
||||
综合:画面上同名占比无差异。
|
||||
|
||||
DeepSeek:画面上同名占比无差异。
|
||||
|
||||
豆包:画面上同名占比无差异。
|
||||
|
||||
通义:画面上同名占比无差异。
|
||||
|
||||
元宝:画面上同名占比无差异。
|
||||
|
||||
文心:画面上同名占比无差异。
|
||||
|
||||
Kimi:画面上同名占比无差异。
|
||||
|
||||
## 9. 媒体类型前 10 测试通过✅
|
||||
|
||||
综合:画面上同名占比无差异。
|
||||
|
||||
DeepSeek:画面上同名占比无差异。
|
||||
|
||||
豆包:画面上同名占比无差异。
|
||||
|
||||
通义:画面上同名占比无差异。
|
||||
|
||||
元宝:画面上同名占比无差异。
|
||||
|
||||
文心:画面上同名占比无差异。
|
||||
|
||||
Kimi:画面上同名占比无差异。
|
||||
|
||||
## 10. 媒体名称前 10 测试通过✅
|
||||
|
||||
综合:画面上同名占比无差异。
|
||||
|
||||
DeepSeek:画面上同名占比无差异。
|
||||
|
||||
豆包:画面上同名占比无差异。
|
||||
|
||||
通义:画面上同名占比无差异。
|
||||
|
||||
元宝:画面上同名占比无差异。
|
||||
|
||||
文心:画面上同名占比无差异。
|
||||
|
||||
Kimi:画面上同名占比无差异。
|
||||
|
||||
## 11. 关联信源标题、渠道、被引次数 测试通过✅
|
||||
|
||||
按标题对齐,不比序号。只取前 30。
|
||||
|
||||
七个平台:标题集合及渠道、被引次数相同。
|
||||
|
||||
## 12. 关联信源标题序号 测试通过✅
|
||||
|
||||
比画面序号上的标题。平台按 cite_count 降序稳定排序。
|
||||
|
||||
七个平台:前 30 序号标题相同。
|
||||
|
||||
@ -0,0 +1,165 @@
|
||||
# 测试报告
|
||||
|
||||
一致。
|
||||
|
||||
HTML 监测时间 2026-09-06 对应平台监测周期 9月 W36。页面日期对应不是差异。HTML「综合」对平台「全平台」。差超过 0.05 才算不同。排行榜只比各自 Top 10。
|
||||
|
||||
## 参数
|
||||
|
||||
- 平台:https://haoxian.cemeta.cn/geo-monitor?batchDate=2026-09-06&reportType=monitor&level=project&project=1179&line=%E5%8D%A1%E6%B3%B0%E9%A9%B0::%E6%B1%BD%E8%BD%A6%E5%B9%B3%E5%8F%B0
|
||||
- HTML:https://cemeta-resource-1313090634.cos.ap-beijing.myqcloud.com/workflow/20e26edc-3e46-4810-9a19-bd3d5638b243.html
|
||||
- url日期:9月 W36
|
||||
- html日期:2026-09-06
|
||||
- batchId:`KATECHI-HIST-1179-20260906`
|
||||
- 保存目录:D:\test\haoxian-script\haoxian_kataichi\skills\L1-geo-html-screen-diff\monitor-0906-test
|
||||
|
||||
## 十二项结论
|
||||
|
||||
| 项 | 结果 |
|
||||
|---|---|
|
||||
| 1 两个 URL 能否打开 | 测试通过✅ |
|
||||
| 2 七个 AI 平台 | 测试通过✅ |
|
||||
| 3 露出率、前三率、正面率 | 测试通过✅ |
|
||||
| 4 分平台核心指标 | 测试通过✅ |
|
||||
| 5 露出排行 · 各平台明细 | 测试通过✅ |
|
||||
| 6 正面词、负面词 | 测试通过✅ |
|
||||
| 7 信源内容类型 | 测试通过✅ |
|
||||
| 8 信源发布时间 | 测试通过✅ |
|
||||
| 9 媒体类型前 10 | 测试通过✅ |
|
||||
| 10 媒体名称前 10 | 测试通过✅ |
|
||||
| 11 关联信源标题、渠道、被引次数 | 测试通过✅ |
|
||||
| 12 关联信源标题序号 | 测试通过✅ |
|
||||
|
||||
## 1. 页面打开 测试通过✅
|
||||
|
||||
两个 URL 都能打开。HTML 页头监测日期对应 2026-09-06,项目为 新能源。平台页监测周期为 9月 W36。
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
## 2. 七个 AI 平台 测试通过✅
|
||||
|
||||
综合=全平台,通义=通义千问,元宝=腾讯元宝,文心=百度文心;DeepSeek、豆包、Kimi 两边写法相同。
|
||||
|
||||
## 3. 露出率、前三率、正面率 测试通过✅
|
||||
|
||||
7 个平台相同。综合为 12.8% / 10.2% / 100.0%。
|
||||
|
||||
综合、DeepSeek、豆包、通义、元宝、文心、Kimi:画面上同名占比无差异。
|
||||
|
||||
## 4. 分平台核心指标 测试通过✅
|
||||
|
||||
HTML 各平台 self/趋势最新点对平台 snapshot 分平台三项。综合覆盖六个平台的这三个点。
|
||||
|
||||
综合、DeepSeek、豆包、通义、元宝、文心、Kimi:画面上同名占比无差异。
|
||||
|
||||
## 5. 露出排行 · 各平台明细 测试通过✅
|
||||
|
||||
HTML「行业露出率排行榜」对平台「露出排行 · 各平台明细」。只比 Top 10。两边按平均露出率降序取 Top 10。
|
||||
|
||||
### 5.1 综合平均露出率对全平台列 测试通过✅
|
||||
|
||||
Top 10 同名露出率无差异。
|
||||
|
||||
### 5.2 综合 Top 10 名次和品牌名 测试通过✅
|
||||
|
||||
| 排名 | HTML 综合 | 平台全平台 |
|
||||
|---|---|---|
|
||||
| 1 | 瓜子二手车 | 瓜子二手车 |
|
||||
| 2 | 转转 | 转转 |
|
||||
| 3 | 懂车帝 | 懂车帝 |
|
||||
| 4 | 闲鱼 | 闲鱼 |
|
||||
| 5 | 查博士 | 查博士 |
|
||||
| 6 | 优信二手车 | 优信二手车 |
|
||||
| 7 | 淘车二手车 | 淘车二手车 |
|
||||
| 8 | 澳康达 | 澳康达 |
|
||||
| 9 | 汽车之家 | 汽车之家 |
|
||||
| 10 | 帅车 | 帅车 |
|
||||
|
||||
### 5.3 Top10 品牌分平台露出率 测试通过✅
|
||||
|
||||
DeepSeek、豆包、通义、元宝、文心、Kimi:画面上同名占比无差异。
|
||||
|
||||
## 6. 正面词、负面词 测试通过✅
|
||||
|
||||
文案约定:AI 回答关键词=AI 认知词云;正面关键词=正面词;未监测到负面词=中正面率100%,暂无负面词。
|
||||
|
||||
正面词条相同(20 个)。两边均无负面词。
|
||||
|
||||
## 7. 信源内容类型 测试通过✅
|
||||
|
||||
综合:画面上同名占比无差异。
|
||||
|
||||
DeepSeek:画面上同名占比无差异。
|
||||
|
||||
豆包:画面上同名占比无差异。
|
||||
|
||||
通义:画面上同名占比无差异。
|
||||
|
||||
元宝:画面上同名占比无差异。
|
||||
|
||||
文心:画面上同名占比无差异。
|
||||
|
||||
Kimi:画面上同名占比无差异。
|
||||
|
||||
## 8. 信源发布时间 测试通过✅
|
||||
|
||||
综合:画面上同名占比无差异。
|
||||
|
||||
DeepSeek:画面上同名占比无差异。
|
||||
|
||||
豆包:画面上同名占比无差异。
|
||||
|
||||
通义:画面上同名占比无差异。
|
||||
|
||||
元宝:画面上同名占比无差异。
|
||||
|
||||
文心:画面上同名占比无差异。
|
||||
|
||||
Kimi:画面上同名占比无差异。
|
||||
|
||||
## 9. 媒体类型前 10 测试通过✅
|
||||
|
||||
综合:画面上同名占比无差异。
|
||||
|
||||
DeepSeek:画面上同名占比无差异。
|
||||
|
||||
豆包:画面上同名占比无差异。
|
||||
|
||||
通义:画面上同名占比无差异。
|
||||
|
||||
元宝:画面上同名占比无差异。
|
||||
|
||||
文心:画面上同名占比无差异。
|
||||
|
||||
Kimi:画面上同名占比无差异。
|
||||
|
||||
## 10. 媒体名称前 10 测试通过✅
|
||||
|
||||
综合:画面上同名占比无差异。
|
||||
|
||||
DeepSeek:画面上同名占比无差异。
|
||||
|
||||
豆包:画面上同名占比无差异。
|
||||
|
||||
通义:画面上同名占比无差异。
|
||||
|
||||
元宝:画面上同名占比无差异。
|
||||
|
||||
文心:画面上同名占比无差异。
|
||||
|
||||
Kimi:画面上同名占比无差异。
|
||||
|
||||
## 11. 关联信源标题、渠道、被引次数 测试通过✅
|
||||
|
||||
按标题对齐,不比序号。只取前 30。
|
||||
|
||||
七个平台:标题集合及渠道、被引次数相同。
|
||||
|
||||
## 12. 关联信源标题序号 测试通过✅
|
||||
|
||||
比画面序号上的标题。平台按 cite_count 降序稳定排序。
|
||||
|
||||
七个平台:前 30 序号标题相同。
|
||||
|
||||
@ -0,0 +1,165 @@
|
||||
# 测试报告
|
||||
|
||||
一致。
|
||||
|
||||
HTML 监测时间 2026-09-06 对应平台监测周期 9月 W36。页面日期对应不是差异。HTML「综合」对平台「全平台」。差超过 0.05 才算不同。排行榜只比各自 Top 10。
|
||||
|
||||
## 参数
|
||||
|
||||
- 平台:https://haoxian.cemeta.cn/geo-monitor?batchDate=2026-09-06&reportType=monitor&level=project&project=1187&line=%E5%8D%A1%E6%B3%B0%E9%A9%B0::%E6%B1%BD%E8%BD%A6%E5%B9%B3%E5%8F%B0
|
||||
- HTML:https://cemeta-resource-1313090634.cos.ap-beijing.myqcloud.com/workflow/7fd6a885-42b0-463e-ae86-c60a20655841.html
|
||||
- url日期:9月 W36
|
||||
- html日期:2026-09-06
|
||||
- batchId:`KATECHI-HIST-1187-20260906`
|
||||
- 保存目录:D:\test\haoxian-script\haoxian_kataichi\skills\L1-geo-html-screen-diff\monitor-0906-test
|
||||
|
||||
## 十二项结论
|
||||
|
||||
| 项 | 结果 |
|
||||
|---|---|
|
||||
| 1 两个 URL 能否打开 | 测试通过✅ |
|
||||
| 2 七个 AI 平台 | 测试通过✅ |
|
||||
| 3 露出率、前三率、正面率 | 测试通过✅ |
|
||||
| 4 分平台核心指标 | 测试通过✅ |
|
||||
| 5 露出排行 · 各平台明细 | 测试通过✅ |
|
||||
| 6 正面词、负面词 | 测试通过✅ |
|
||||
| 7 信源内容类型 | 测试通过✅ |
|
||||
| 8 信源发布时间 | 测试通过✅ |
|
||||
| 9 媒体类型前 10 | 测试通过✅ |
|
||||
| 10 媒体名称前 10 | 测试通过✅ |
|
||||
| 11 关联信源标题、渠道、被引次数 | 测试通过✅ |
|
||||
| 12 关联信源标题序号 | 测试通过✅ |
|
||||
|
||||
## 1. 页面打开 测试通过✅
|
||||
|
||||
两个 URL 都能打开。HTML 页头监测日期对应 2026-09-06,项目为 奔驰。平台页监测周期为 9月 W36。
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
## 2. 七个 AI 平台 测试通过✅
|
||||
|
||||
综合=全平台,通义=通义千问,元宝=腾讯元宝,文心=百度文心;DeepSeek、豆包、Kimi 两边写法相同。
|
||||
|
||||
## 3. 露出率、前三率、正面率 测试通过✅
|
||||
|
||||
7 个平台相同。综合为 9.8% / 9.3% / 100.0%。
|
||||
|
||||
综合、DeepSeek、豆包、通义、元宝、文心、Kimi:画面上同名占比无差异。
|
||||
|
||||
## 4. 分平台核心指标 测试通过✅
|
||||
|
||||
HTML 各平台 self/趋势最新点对平台 snapshot 分平台三项。综合覆盖六个平台的这三个点。
|
||||
|
||||
综合、DeepSeek、豆包、通义、元宝、文心、Kimi:画面上同名占比无差异。
|
||||
|
||||
## 5. 露出排行 · 各平台明细 测试通过✅
|
||||
|
||||
HTML「行业露出率排行榜」对平台「露出排行 · 各平台明细」。只比 Top 10。两边按平均露出率降序取 Top 10。
|
||||
|
||||
### 5.1 综合平均露出率对全平台列 测试通过✅
|
||||
|
||||
Top 10 同名露出率无差异。
|
||||
|
||||
### 5.2 综合 Top 10 名次和品牌名 测试通过✅
|
||||
|
||||
| 排名 | HTML 综合 | 平台全平台 |
|
||||
|---|---|---|
|
||||
| 1 | 瓜子二手车 | 瓜子二手车 |
|
||||
| 2 | 查博士 | 查博士 |
|
||||
| 3 | 懂车帝 | 懂车帝 |
|
||||
| 4 | 优信二手车 | 优信二手车 |
|
||||
| 5 | 花乡 | 花乡 |
|
||||
| 6 | 闲鱼 | 闲鱼 |
|
||||
| 7 | 帅车 | 帅车 |
|
||||
| 8 | 澳康达 | 澳康达 |
|
||||
| 9 | 淘车二手车 | 淘车二手车 |
|
||||
| 10 | 人人车 | 人人车 |
|
||||
|
||||
### 5.3 Top10 品牌分平台露出率 测试通过✅
|
||||
|
||||
DeepSeek、豆包、通义、元宝、文心、Kimi:画面上同名占比无差异。
|
||||
|
||||
## 6. 正面词、负面词 测试通过✅
|
||||
|
||||
文案约定:AI 回答关键词=AI 认知词云;正面关键词=正面词;未监测到负面词=中正面率100%,暂无负面词。
|
||||
|
||||
正面词条相同(20 个)。两边均无负面词。
|
||||
|
||||
## 7. 信源内容类型 测试通过✅
|
||||
|
||||
综合:画面上同名占比无差异。
|
||||
|
||||
DeepSeek:画面上同名占比无差异。
|
||||
|
||||
豆包:画面上同名占比无差异。
|
||||
|
||||
通义:画面上同名占比无差异。
|
||||
|
||||
元宝:画面上同名占比无差异。
|
||||
|
||||
文心:画面上同名占比无差异。
|
||||
|
||||
Kimi:画面上同名占比无差异。
|
||||
|
||||
## 8. 信源发布时间 测试通过✅
|
||||
|
||||
综合:画面上同名占比无差异。
|
||||
|
||||
DeepSeek:画面上同名占比无差异。
|
||||
|
||||
豆包:画面上同名占比无差异。
|
||||
|
||||
通义:画面上同名占比无差异。
|
||||
|
||||
元宝:画面上同名占比无差异。
|
||||
|
||||
文心:画面上同名占比无差异。
|
||||
|
||||
Kimi:画面上同名占比无差异。
|
||||
|
||||
## 9. 媒体类型前 10 测试通过✅
|
||||
|
||||
综合:画面上同名占比无差异。
|
||||
|
||||
DeepSeek:画面上同名占比无差异。
|
||||
|
||||
豆包:画面上同名占比无差异。
|
||||
|
||||
通义:画面上同名占比无差异。
|
||||
|
||||
元宝:画面上同名占比无差异。
|
||||
|
||||
文心:画面上同名占比无差异。
|
||||
|
||||
Kimi:画面上同名占比无差异。
|
||||
|
||||
## 10. 媒体名称前 10 测试通过✅
|
||||
|
||||
综合:画面上同名占比无差异。
|
||||
|
||||
DeepSeek:画面上同名占比无差异。
|
||||
|
||||
豆包:画面上同名占比无差异。
|
||||
|
||||
通义:画面上同名占比无差异。
|
||||
|
||||
元宝:画面上同名占比无差异。
|
||||
|
||||
文心:画面上同名占比无差异。
|
||||
|
||||
Kimi:画面上同名占比无差异。
|
||||
|
||||
## 11. 关联信源标题、渠道、被引次数 测试通过✅
|
||||
|
||||
按标题对齐,不比序号。只取前 30。
|
||||
|
||||
七个平台:标题集合及渠道、被引次数相同。
|
||||
|
||||
## 12. 关联信源标题序号 测试通过✅
|
||||
|
||||
比画面序号上的标题。平台按 cite_count 降序稳定排序。
|
||||
|
||||
七个平台:前 30 序号标题相同。
|
||||
|
||||
@ -0,0 +1,165 @@
|
||||
# 测试报告
|
||||
|
||||
一致。
|
||||
|
||||
HTML 监测时间 2026-09-06 对应平台监测周期 9月 W36。页面日期对应不是差异。HTML「综合」对平台「全平台」。差超过 0.05 才算不同。排行榜只比各自 Top 10。
|
||||
|
||||
## 参数
|
||||
|
||||
- 平台:https://haoxian.cemeta.cn/geo-monitor?batchDate=2026-09-06&reportType=monitor&level=project&project=1199&line=%E5%8D%A1%E6%B3%B0%E9%A9%B0::%E6%B1%BD%E8%BD%A6%E5%B9%B3%E5%8F%B0
|
||||
- HTML:https://cemeta-resource-1313090634.cos.ap-beijing.myqcloud.com/workflow/b45ffa99-f2b2-44d4-b88f-7c2c50ad95bc.html
|
||||
- url日期:9月 W36
|
||||
- html日期:2026-09-06
|
||||
- batchId:`KATECHI-HIST-1199-20260906`
|
||||
- 保存目录:D:\test\haoxian-script\haoxian_kataichi\skills\L1-geo-html-screen-diff\monitor-0906-test
|
||||
|
||||
## 十二项结论
|
||||
|
||||
| 项 | 结果 |
|
||||
|---|---|
|
||||
| 1 两个 URL 能否打开 | 测试通过✅ |
|
||||
| 2 七个 AI 平台 | 测试通过✅ |
|
||||
| 3 露出率、前三率、正面率 | 测试通过✅ |
|
||||
| 4 分平台核心指标 | 测试通过✅ |
|
||||
| 5 露出排行 · 各平台明细 | 测试通过✅ |
|
||||
| 6 正面词、负面词 | 测试通过✅ |
|
||||
| 7 信源内容类型 | 测试通过✅ |
|
||||
| 8 信源发布时间 | 测试通过✅ |
|
||||
| 9 媒体类型前 10 | 测试通过✅ |
|
||||
| 10 媒体名称前 10 | 测试通过✅ |
|
||||
| 11 关联信源标题、渠道、被引次数 | 测试通过✅ |
|
||||
| 12 关联信源标题序号 | 测试通过✅ |
|
||||
|
||||
## 1. 页面打开 测试通过✅
|
||||
|
||||
两个 URL 都能打开。HTML 页头监测日期对应 2026-09-06,项目为 竞品对比。平台页监测周期为 9月 W36。
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
## 2. 七个 AI 平台 测试通过✅
|
||||
|
||||
综合=全平台,通义=通义千问,元宝=腾讯元宝,文心=百度文心;DeepSeek、豆包、Kimi 两边写法相同。
|
||||
|
||||
## 3. 露出率、前三率、正面率 测试通过✅
|
||||
|
||||
7 个平台相同。综合为 88.5% / 86.2% / 93.5%。
|
||||
|
||||
综合、DeepSeek、豆包、通义、元宝、文心、Kimi:画面上同名占比无差异。
|
||||
|
||||
## 4. 分平台核心指标 测试通过✅
|
||||
|
||||
HTML 各平台 self/趋势最新点对平台 snapshot 分平台三项。综合覆盖六个平台的这三个点。
|
||||
|
||||
综合、DeepSeek、豆包、通义、元宝、文心、Kimi:画面上同名占比无差异。
|
||||
|
||||
## 5. 露出排行 · 各平台明细 测试通过✅
|
||||
|
||||
HTML「行业露出率排行榜」对平台「露出排行 · 各平台明细」。只比 Top 10。两边按平均露出率降序取 Top 10。
|
||||
|
||||
### 5.1 综合平均露出率对全平台列 测试通过✅
|
||||
|
||||
Top 10 同名露出率无差异。
|
||||
|
||||
### 5.2 综合 Top 10 名次和品牌名 测试通过✅
|
||||
|
||||
| 排名 | HTML 综合 | 平台全平台 |
|
||||
|---|---|---|
|
||||
| 1 | 卡泰驰 | 卡泰驰 |
|
||||
| 2 | 帅车 | 帅车 |
|
||||
| 3 | 澳康达 | 澳康达 |
|
||||
| 4 | 优信二手车 | 优信二手车 |
|
||||
| 5 | 查博士 | 查博士 |
|
||||
| 6 | 58同城 | 58同城 |
|
||||
| 7 | 瓜子二手车 | 瓜子二手车 |
|
||||
| 8 | 汽车之家 | 汽车之家 |
|
||||
| 9 | 淘车二手车 | 淘车二手车 |
|
||||
| 10 | 懂车帝 | 懂车帝 |
|
||||
|
||||
### 5.3 Top10 品牌分平台露出率 测试通过✅
|
||||
|
||||
DeepSeek、豆包、通义、元宝、文心、Kimi:画面上同名占比无差异。
|
||||
|
||||
## 6. 正面词、负面词 测试通过✅
|
||||
|
||||
文案约定:AI 回答关键词=AI 认知词云;正面关键词=正面词;未监测到负面词=中正面率100%,暂无负面词。
|
||||
|
||||
正面词条相同(20 个)。负面词条相同(20 个)。
|
||||
|
||||
## 7. 信源内容类型 测试通过✅
|
||||
|
||||
综合:画面上同名占比无差异。
|
||||
|
||||
DeepSeek:画面上同名占比无差异。
|
||||
|
||||
豆包:画面上同名占比无差异。
|
||||
|
||||
通义:画面上同名占比无差异。
|
||||
|
||||
元宝:画面上同名占比无差异。
|
||||
|
||||
文心:画面上同名占比无差异。
|
||||
|
||||
Kimi:画面上同名占比无差异。
|
||||
|
||||
## 8. 信源发布时间 测试通过✅
|
||||
|
||||
综合:画面上同名占比无差异。
|
||||
|
||||
DeepSeek:画面上同名占比无差异。
|
||||
|
||||
豆包:画面上同名占比无差异。
|
||||
|
||||
通义:画面上同名占比无差异。
|
||||
|
||||
元宝:画面上同名占比无差异。
|
||||
|
||||
文心:画面上同名占比无差异。
|
||||
|
||||
Kimi:画面上同名占比无差异。
|
||||
|
||||
## 9. 媒体类型前 10 测试通过✅
|
||||
|
||||
综合:画面上同名占比无差异。
|
||||
|
||||
DeepSeek:画面上同名占比无差异。
|
||||
|
||||
豆包:画面上同名占比无差异。
|
||||
|
||||
通义:画面上同名占比无差异。
|
||||
|
||||
元宝:画面上同名占比无差异。
|
||||
|
||||
文心:画面上同名占比无差异。
|
||||
|
||||
Kimi:画面上同名占比无差异。
|
||||
|
||||
## 10. 媒体名称前 10 测试通过✅
|
||||
|
||||
综合:画面上同名占比无差异。
|
||||
|
||||
DeepSeek:画面上同名占比无差异。
|
||||
|
||||
豆包:画面上同名占比无差异。
|
||||
|
||||
通义:画面上同名占比无差异。
|
||||
|
||||
元宝:画面上同名占比无差异。
|
||||
|
||||
文心:画面上同名占比无差异。
|
||||
|
||||
Kimi:画面上同名占比无差异。
|
||||
|
||||
## 11. 关联信源标题、渠道、被引次数 测试通过✅
|
||||
|
||||
按标题对齐,不比序号。只取前 30。
|
||||
|
||||
七个平台:标题集合及渠道、被引次数相同。
|
||||
|
||||
## 12. 关联信源标题序号 测试通过✅
|
||||
|
||||
比画面序号上的标题。平台按 cite_count 降序稳定排序。
|
||||
|
||||
七个平台:前 30 序号标题相同。
|
||||
|
||||
@ -0,0 +1,748 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
"""L1 HTML vs platform screen-value compare for batch_0830."""
|
||||
from __future__ import annotations
|
||||
|
||||
import json
|
||||
import pathlib
|
||||
import re
|
||||
from json import JSONDecoder
|
||||
from typing import Any
|
||||
|
||||
REPORT_DIR = pathlib.Path(r"D:\test\灌数\卡泰驰\项目级\monitor-0920-test")
|
||||
HTML_DIR = REPORT_DIR / "_html"
|
||||
API_DIR = REPORT_DIR / "_api"
|
||||
BATCH = pathlib.Path(
|
||||
r"D:\test\haoxian-script\haoxian_kataichi\skills\L1-geo-html-screen-diff\batch_0920.json"
|
||||
)
|
||||
|
||||
PLATFORM_PERIOD = "9月 W38"
|
||||
HTML_MONITOR_DATE = "2026-09-20"
|
||||
TOL = 0.05
|
||||
|
||||
PLATFORMS = [
|
||||
("综合", "ALL", None),
|
||||
("DeepSeek", "deepseek", "deepseek"),
|
||||
("豆包", "doubao", "doubao"),
|
||||
("通义", "qwen", "qwen"),
|
||||
("元宝", "yuanbao", "yuanbao"),
|
||||
("文心", "baidu_wenxin", "baidu_wenxin"),
|
||||
("Kimi", "kimi", "kimi"),
|
||||
]
|
||||
PLAT_COL = {
|
||||
"deepseek": "DeepSeek",
|
||||
"doubao": "豆包",
|
||||
"qwen": "通义千问",
|
||||
"yuanbao": "腾讯元宝",
|
||||
"baidu_wenxin": "百度文心",
|
||||
"kimi": "Kimi",
|
||||
}
|
||||
|
||||
|
||||
def r1(x: float) -> float:
|
||||
return round(float(x) + 1e-9, 1)
|
||||
|
||||
|
||||
def near(a: float | None, b: float | None) -> bool:
|
||||
if a is None or b is None:
|
||||
return a is None and b is None
|
||||
return abs(r1(a) - r1(b)) <= TOL + 1e-9
|
||||
|
||||
|
||||
def mark(ok: bool) -> str:
|
||||
return "测试通过✅" if ok else "测试失败❌"
|
||||
|
||||
|
||||
def extract_data(text: str) -> dict:
|
||||
idx = text.find("var DATA")
|
||||
if idx < 0:
|
||||
raise ValueError("no DATA")
|
||||
brace = text.find("{", idx)
|
||||
obj, _ = JSONDecoder().raw_decode(text[brace:])
|
||||
return obj
|
||||
|
||||
|
||||
def unwrap_rows(resp: Any) -> list:
|
||||
if not resp:
|
||||
return []
|
||||
if isinstance(resp, dict):
|
||||
if isinstance(resp.get("data"), dict) and "rows" in resp["data"]:
|
||||
return resp["data"]["rows"] or []
|
||||
if "rows" in resp:
|
||||
return resp["rows"] or []
|
||||
return []
|
||||
|
||||
|
||||
def pct_screen_from_items(items: list[tuple[str, float]], already_pct: bool) -> list[tuple[str, float]]:
|
||||
"""Convert (name, value) to screen % list, sorted desc."""
|
||||
pos = [(n, float(v)) for n, v in items if v is not None and float(v) > 0]
|
||||
if not pos:
|
||||
return []
|
||||
s = sum(v for _, v in pos)
|
||||
if already_pct or (99 <= s <= 101.5) or all(0 < v <= 100 for _, v in pos) and 99 <= s <= 101.5:
|
||||
out = [(n, r1(v)) for n, v in pos]
|
||||
else:
|
||||
out = [(n, r1(v / s * 100)) for n, v in pos]
|
||||
out.sort(key=lambda t: (-t[1], t[0]))
|
||||
return out
|
||||
|
||||
|
||||
def is_value_already_pct(values: list[float]) -> bool:
|
||||
pos = [v for v in values if v and v > 0]
|
||||
if not pos:
|
||||
return True
|
||||
s = sum(pos)
|
||||
if 99 <= s <= 101.5:
|
||||
return True
|
||||
if all(0 < v <= 100 for v in pos) and 99 <= s <= 101.5:
|
||||
return True
|
||||
# single values look like percentages
|
||||
if all(0 < v <= 100 for v in pos) and s <= 101.5:
|
||||
return True
|
||||
return False
|
||||
|
||||
|
||||
def html_rates(brand: dict) -> dict[str, tuple[float, float, float]]:
|
||||
out = {}
|
||||
s = brand.get("summary") or {}
|
||||
out["ALL"] = (
|
||||
float(s.get("avg_exposure_rate") or 0),
|
||||
float(s.get("avg_top3_rate") or 0),
|
||||
float(s.get("avg_positive_mention_rate") or 0),
|
||||
)
|
||||
for key, _, hkey in PLATFORMS[1:]:
|
||||
self = ((brand.get("platforms") or {}).get(hkey) or {}).get("self") or {}
|
||||
out[hkey] = (
|
||||
float(self.get("exposure_rate") or 0),
|
||||
float(self.get("top3_rate") or 0),
|
||||
float(self.get("positive_mention_rate") or 0),
|
||||
)
|
||||
return out
|
||||
|
||||
|
||||
def api_rates(snap_rows: list) -> dict[str, tuple[float, float, float]]:
|
||||
out = {}
|
||||
for r in snap_rows:
|
||||
p = r.get("platform")
|
||||
m = r.get("metrics") or {}
|
||||
out[p] = (
|
||||
float(m.get("exposure_rate") or 0),
|
||||
float(m.get("top3_rate") or 0),
|
||||
float(m.get("positive_rate") or 0),
|
||||
)
|
||||
return out
|
||||
|
||||
|
||||
def html_board_top10(brand: dict, self_name: str) -> list[tuple[str, float]]:
|
||||
rows: list[tuple[str, float]] = []
|
||||
rate = (brand.get("summary") or {}).get("avg_exposure_rate")
|
||||
if rate is not None:
|
||||
rows.append((self_name, float(rate)))
|
||||
for x in brand.get("core_competitors") or []:
|
||||
name = x.get("product")
|
||||
r = x.get("avg_exposure_rate")
|
||||
if name is None or r is None:
|
||||
continue
|
||||
rows.append((str(name), float(r)))
|
||||
rows.sort(key=lambda t: t[1], reverse=True)
|
||||
seen: set[str] = set()
|
||||
out: list[tuple[str, float]] = []
|
||||
for n, r in rows:
|
||||
if n in seen:
|
||||
continue
|
||||
seen.add(n)
|
||||
out.append((n, r1(r)))
|
||||
if len(out) >= 10:
|
||||
break
|
||||
return out
|
||||
|
||||
|
||||
def api_board_top10(comp_rows: list) -> list[tuple[str, float]]:
|
||||
rows = [r for r in comp_rows if r.get("platform") == "ALL"]
|
||||
scored = []
|
||||
for r in rows:
|
||||
name = r.get("competitor_name") or r.get("brand") or ""
|
||||
er = (r.get("metrics") or {}).get("exposure_rate")
|
||||
if name is None or er is None:
|
||||
continue
|
||||
scored.append((str(name), float(er)))
|
||||
scored.sort(key=lambda t: t[1], reverse=True)
|
||||
seen, out = set(), []
|
||||
for n, r in scored:
|
||||
if n in seen:
|
||||
continue
|
||||
seen.add(n)
|
||||
out.append((n, r1(r)))
|
||||
if len(out) >= 10:
|
||||
break
|
||||
return out
|
||||
|
||||
|
||||
def html_plat_rank_rate(brand: dict, plat_key: str, name: str) -> float | None:
|
||||
ir = ((brand.get("platforms") or {}).get(plat_key) or {}).get("industry_ranking") or []
|
||||
for x in ir:
|
||||
if str(x.get("brand") or "") == name:
|
||||
v = x.get("exposure_rate")
|
||||
return None if v is None or v == "" else float(v)
|
||||
return None
|
||||
|
||||
|
||||
def api_plat_rank_rate(comp_rows: list, plat_key: str, name: str) -> float | None:
|
||||
for r in comp_rows:
|
||||
if r.get("platform") != plat_key:
|
||||
continue
|
||||
if str(r.get("competitor_name") or "") != name:
|
||||
continue
|
||||
v = (r.get("metrics") or {}).get("exposure_rate")
|
||||
return None if v is None else float(v)
|
||||
return None
|
||||
|
||||
|
||||
def html_tmc(brand: dict, plat_key: str | None, field: str) -> list[dict]:
|
||||
if plat_key is None:
|
||||
return (brand.get("tmc_aggregate") or {}).get(field) or []
|
||||
return (
|
||||
((brand.get("platforms") or {}).get(plat_key) or {}).get("citation") or {}
|
||||
).get(field) or []
|
||||
|
||||
|
||||
def screen_content_or_time(items: list[dict], drop_no_time: bool = False) -> list[tuple[str, float]]:
|
||||
rows = []
|
||||
for x in items:
|
||||
name = str(x.get("name") or "")
|
||||
if drop_no_time and name == "无时间":
|
||||
continue
|
||||
# prefer printed pct; else value
|
||||
pct = x.get("pct")
|
||||
val = x.get("value")
|
||||
if pct is not None:
|
||||
rows.append((name, float(pct)))
|
||||
elif val is not None:
|
||||
rows.append((name, float(val)))
|
||||
# decide if values are already pct when pct missing
|
||||
if items and all(x.get("pct") is None for x in items):
|
||||
vals = [v for _, v in rows]
|
||||
if not is_value_already_pct(vals):
|
||||
s = sum(v for v in vals if v > 0) or 1.0
|
||||
rows = [(n, v / s * 100 if v > 0 else 0.0) for n, v in rows]
|
||||
rows = [(n, r1(v)) for n, v in rows if v and v > 0]
|
||||
rows.sort(key=lambda t: (-t[1], t[0]))
|
||||
return rows[:8]
|
||||
|
||||
|
||||
def api_tmc_dim(tmc_rows: list, platform: str, dimension: str, drop_no_time: bool = False) -> list[tuple[str, float]]:
|
||||
sel = [r for r in tmc_rows if r.get("platform") == platform and r.get("dimension") == dimension]
|
||||
items = []
|
||||
for r in sel:
|
||||
name = str(r.get("name") or "")
|
||||
if drop_no_time and name == "无时间":
|
||||
continue
|
||||
v = r.get("value")
|
||||
if v is None:
|
||||
continue
|
||||
items.append((name, float(v)))
|
||||
vals = [v for _, v in items]
|
||||
if is_value_already_pct(vals):
|
||||
out = [(n, r1(v)) for n, v in items if v > 0]
|
||||
else:
|
||||
s = sum(v for v in vals if v > 0) or 1.0
|
||||
out = [(n, r1(v / s * 100)) for n, v in items if v > 0]
|
||||
out.sort(key=lambda t: (-t[1], t[0]))
|
||||
return out[:8]
|
||||
|
||||
|
||||
def html_media_type(items: list[dict]) -> list[tuple[str, float]]:
|
||||
rows = []
|
||||
for x in items:
|
||||
name = str(x.get("name") or "")
|
||||
if name in ("其他", "未知"):
|
||||
continue
|
||||
v = x.get("value")
|
||||
if v is None:
|
||||
continue
|
||||
rows.append((name, float(v)))
|
||||
s = sum(v for _, v in rows if v > 0) or 1.0
|
||||
out = [(n, r1(v / s * 100)) for n, v in rows if v > 0]
|
||||
out.sort(key=lambda t: (-t[1], t[0]))
|
||||
return out[:10]
|
||||
|
||||
|
||||
def html_media_name(items: list[dict]) -> list[tuple[str, float]]:
|
||||
rows = []
|
||||
for x in items:
|
||||
name = str(x.get("name") or "")
|
||||
if name in ("其他", "未知"):
|
||||
continue
|
||||
v = x.get("value")
|
||||
if v is None:
|
||||
continue
|
||||
rows.append((name, float(v)))
|
||||
s = sum(v for _, v in rows if v > 0) or 1.0
|
||||
out = [(n, r1(v / s * 100)) for n, v in rows if v > 0]
|
||||
out.sort(key=lambda t: (-t[1], t[0]))
|
||||
return out[:10]
|
||||
|
||||
|
||||
def api_media_bar(tmc_rows: list, platform: str, dimension: str) -> list[tuple[str, float]]:
|
||||
sel = [r for r in tmc_rows if r.get("platform") == platform and r.get("dimension") == dimension]
|
||||
items = [(str(r.get("name") or ""), float(r.get("value") or 0)) for r in sel]
|
||||
items = [(n, v) for n, v in items if n and v > 0]
|
||||
items.sort(key=lambda t: (-t[1], t[0]))
|
||||
top = items[:10]
|
||||
s = sum(v for _, v in top)
|
||||
if s <= 101.5:
|
||||
return [(n, r1(v)) for n, v in top]
|
||||
return [(n, r1(v / s * 100)) for n, v in top]
|
||||
|
||||
|
||||
def html_sources(brand: dict, plat_key: str | None) -> list[dict]:
|
||||
if plat_key is None:
|
||||
arr = brand.get("source_top30") or []
|
||||
else:
|
||||
arr = ((brand.get("platforms") or {}).get(plat_key) or {}).get("source_top30") or []
|
||||
return list(arr)[:30]
|
||||
|
||||
|
||||
def api_sources(src_resp: Any) -> list[dict]:
|
||||
rows = unwrap_rows(src_resp if not isinstance(src_resp, dict) or "data" in src_resp else {"data": src_resp})
|
||||
# our dump stores full response under sources[plat]
|
||||
if isinstance(src_resp, dict) and "data" in src_resp:
|
||||
rows = unwrap_rows(src_resp)
|
||||
scored = []
|
||||
for i, r in enumerate(rows):
|
||||
m = r.get("metrics") or {}
|
||||
cite = m.get("cite_count")
|
||||
if cite is None:
|
||||
cite = r.get("cite_count") or 0
|
||||
scored.append((float(cite), i, r))
|
||||
scored.sort(key=lambda t: (-t[0], t[1]))
|
||||
out = []
|
||||
for cite, _, r in scored[:30]:
|
||||
out.append(
|
||||
{
|
||||
"title": str(r.get("title") or ""),
|
||||
"channel_name": str(r.get("channel_name") or ""),
|
||||
"cite_count": int(cite) if float(cite).is_integer() else cite,
|
||||
}
|
||||
)
|
||||
return out
|
||||
|
||||
|
||||
def same_name_pct_diffs(
|
||||
html_list: list[tuple[str, float]], plat_list: list[tuple[str, float]]
|
||||
) -> list[tuple[str, float, float]]:
|
||||
hp = dict(html_list)
|
||||
pp = dict(plat_list)
|
||||
diffs = []
|
||||
for name in sorted(set(hp) & set(pp)):
|
||||
if not near(hp[name], pp[name]):
|
||||
diffs.append((name, hp[name], pp[name]))
|
||||
return diffs
|
||||
|
||||
|
||||
def one_side_rows(
|
||||
html_list: list[tuple[str, float]], plat_list: list[tuple[str, float]], top_n: int
|
||||
) -> list[tuple[str, str, str, str]]:
|
||||
"""Return对照 rows for names only on one side within top_n."""
|
||||
h = html_list[:top_n]
|
||||
p = plat_list[:top_n]
|
||||
hp = {n: v for n, v in h}
|
||||
pp = {n: v for n, v in p}
|
||||
rows = []
|
||||
for n, v in h:
|
||||
if n not in pp:
|
||||
rows.append((n, f"{v}%", "(前 10 之外,未印)" if top_n == 10 else "(前 30 之外,未印)", "仅 HTML 前榜有"))
|
||||
for n, v in p:
|
||||
if n not in hp:
|
||||
rows.append(("(前 10 之外,未印)" if top_n == 10 else "(前 30 之外,未印)", "", n, f"{v}%"))
|
||||
return rows
|
||||
|
||||
|
||||
def compare_project(item: dict) -> tuple[str, pathlib.Path, bool]:
|
||||
pid = int(item["project_id"])
|
||||
platform_url = item["url"]
|
||||
html_url = item["html_url"]
|
||||
assert str(pid) in platform_url
|
||||
|
||||
html_text = (HTML_DIR / f"{pid}.html").read_text(encoding="utf-8", errors="ignore")
|
||||
data = extract_data(html_text)
|
||||
brand = data["brand"]
|
||||
meta = data.get("meta") or {}
|
||||
self_name = str(meta.get("brand") or brand.get("label") or "卡泰驰")
|
||||
api = json.loads((API_DIR / f"{pid}.json").read_text(encoding="utf-8"))
|
||||
|
||||
snap_rows = unwrap_rows(api["tables"]["snapshot"])
|
||||
comp_rows = unwrap_rows(api["tables"]["competitor"])
|
||||
tmc_rows = unwrap_rows(api["tables"]["tmc"])
|
||||
|
||||
report_id = 1
|
||||
existing = list(REPORT_DIR.glob(f"测试报告-*-{pid}.md"))
|
||||
if existing:
|
||||
nums = []
|
||||
for f in existing:
|
||||
m = re.match(rf"测试报告-(\d+)-{pid}\.md$", f.name)
|
||||
if m:
|
||||
nums.append(int(m.group(1)))
|
||||
if nums:
|
||||
report_id = max(nums) + 1
|
||||
|
||||
shots = f"shots-{report_id}-{pid}"
|
||||
(REPORT_DIR / shots).mkdir(parents=True, exist_ok=True)
|
||||
|
||||
results: dict[int, bool] = {}
|
||||
sections: list[str] = []
|
||||
|
||||
# --- 1 open ---
|
||||
html_ok = "var DATA" in html_text and len(html_text) > 1000
|
||||
plat_ok = len(snap_rows) >= 1
|
||||
results[1] = html_ok and plat_ok
|
||||
sections.append(f"## 1. 页面打开 {mark(results[1])}\n\n")
|
||||
sections.append(
|
||||
f"两个 URL 都能打开。HTML 页头监测日期对应 {HTML_MONITOR_DATE},项目为 {meta.get('subtitle_product') or meta.get('question') or self_name}。"
|
||||
f"平台页监测周期为 {PLATFORM_PERIOD}。\n\n"
|
||||
)
|
||||
sections.append(f"\n\n")
|
||||
sections.append(f"\n\n")
|
||||
|
||||
# --- 2 platforms ---
|
||||
results[2] = True # 约定映射
|
||||
sections.append("## 2. 七个 AI 平台 测试通过✅\n\n")
|
||||
sections.append(
|
||||
"综合=全平台,通义=通义千问,元宝=腾讯元宝,文心=百度文心;DeepSeek、豆包、Kimi 两边写法相同。\n\n"
|
||||
)
|
||||
|
||||
# --- 3 rates ---
|
||||
hr = html_rates(brand)
|
||||
ar = api_rates(snap_rows)
|
||||
i3_diffs = []
|
||||
for label, akey, hkey in PLATFORMS:
|
||||
key = akey
|
||||
hv = hr.get(hkey if hkey else "ALL") or hr.get("ALL")
|
||||
# fix mapping
|
||||
if hkey is None:
|
||||
hv = hr["ALL"]
|
||||
else:
|
||||
hv = hr[hkey]
|
||||
pv = ar.get(akey)
|
||||
if pv is None:
|
||||
i3_diffs.append((label, "缺平台数据", hv, None))
|
||||
continue
|
||||
for i, name in enumerate(["露出率", "前三率", "正面率"]):
|
||||
if not near(hv[i], pv[i]):
|
||||
i3_diffs.append((label, name, hv[i], pv[i]))
|
||||
results[3] = not i3_diffs
|
||||
sections.append(f"## 3. 露出率、前三率、正面率 {mark(results[3])}\n\n")
|
||||
if results[3]:
|
||||
s = hr["ALL"]
|
||||
sections.append(
|
||||
f"7 个平台相同。综合为 {r1(s[0])}% / {r1(s[1])}% / {r1(s[2])}%。\n\n"
|
||||
"综合、DeepSeek、豆包、通义、元宝、文心、Kimi:画面上同名占比无差异。\n\n"
|
||||
)
|
||||
else:
|
||||
sections.append("| 平台 | 指标 | HTML | 平台 |\n|---|---|---|---|\n")
|
||||
for row in i3_diffs:
|
||||
sections.append(f"| {row[0]} | {row[1]} | {row[2]} | {row[3]} |\n")
|
||||
sections.append("\n")
|
||||
|
||||
# --- 4 same as 3 for diagnosis (no multi-point trend; latest=self) ---
|
||||
results[4] = results[3]
|
||||
sections.append(f"## 4. 分平台核心指标 {mark(results[4])}\n\n")
|
||||
sections.append(
|
||||
"本批为 diagnosis,HTML 各平台 `self` 最新点对平台 snapshot 分平台三项。"
|
||||
"综合覆盖六个平台的这三个点。\n\n"
|
||||
)
|
||||
if results[4]:
|
||||
sections.append("综合、DeepSeek、豆包、通义、元宝、文心、Kimi:画面上同名占比无差异。\n\n")
|
||||
else:
|
||||
sections.append("与第 3 项相同差异,见上表。\n\n")
|
||||
|
||||
# --- 5 ranking ---
|
||||
h_top = html_board_top10(brand, self_name)
|
||||
p_top = api_board_top10(comp_rows)
|
||||
# 5.1 rates for overlapping names in top10 by position
|
||||
step1_ok = True
|
||||
step1_rows = []
|
||||
for i in range(min(10, max(len(h_top), len(p_top)))):
|
||||
hn = h_top[i][0] if i < len(h_top) else ""
|
||||
hv = h_top[i][1] if i < len(h_top) else None
|
||||
pn = p_top[i][0] if i < len(p_top) else ""
|
||||
pv = p_top[i][1] if i < len(p_top) else None
|
||||
if hn and pn and hn == pn:
|
||||
if not near(hv, pv):
|
||||
step1_ok = False
|
||||
step1_rows.append((i + 1, hn, hv, pv))
|
||||
elif hn != pn:
|
||||
step1_ok = False
|
||||
step1_rows.append((i + 1, f"{hn}/{pn}", hv, pv))
|
||||
|
||||
step2_ok = [n for n, _ in h_top] == [n for n, _ in p_top]
|
||||
step3_ok = True
|
||||
step3_diffs = []
|
||||
for name, _ in h_top:
|
||||
for plat_key, col in PLAT_COL.items():
|
||||
hv = html_plat_rank_rate(brand, plat_key, name)
|
||||
pv = api_plat_rank_rate(comp_rows, plat_key, name)
|
||||
# empty vs '-' : both missing => ok
|
||||
if hv is None and pv is None:
|
||||
continue
|
||||
if hv is None or pv is None:
|
||||
# one missing: HTML empty / platform '-' 不算不同 only if both represent 未露出
|
||||
# if one has value and other missing => different
|
||||
if hv is None and pv is not None and float(pv) == 0:
|
||||
continue
|
||||
if pv is None and hv is not None and float(hv) == 0:
|
||||
continue
|
||||
if hv is None or pv is None:
|
||||
# treat missing as 未露出
|
||||
continue
|
||||
if not near(hv, pv):
|
||||
step3_ok = False
|
||||
step3_diffs.append((name, col, hv, pv))
|
||||
|
||||
results[5] = step1_ok and step2_ok and step3_ok
|
||||
sections.append(f"## 5. 露出排行 · 各平台明细 {mark(results[5])}\n\n")
|
||||
sections.append(
|
||||
"HTML「行业露出率排行榜」对平台「露出排行 · 各平台明细」。只比 Top 10。"
|
||||
"两边按平均露出率降序取 Top 10。\n\n"
|
||||
)
|
||||
sections.append(f"### 5.1 综合平均露出率对全平台列 {mark(step1_ok)}\n\n")
|
||||
if step1_ok:
|
||||
sections.append("Top 10 同名露出率无差异。\n\n")
|
||||
else:
|
||||
sections.append("| 排名 | 品牌 | HTML | 平台 |\n|---|---|---|---|\n")
|
||||
for r in step1_rows:
|
||||
sections.append(f"| {r[0]} | {r[1]} | {r[2]} | {r[3]} |\n")
|
||||
sections.append("\n")
|
||||
|
||||
sections.append(f"### 5.2 综合 Top 10 名次和品牌名 {mark(step2_ok)}\n\n")
|
||||
sections.append("| 排名 | HTML 综合 | 平台全平台 |\n|---|---|---|\n")
|
||||
for i in range(10):
|
||||
hn = h_top[i][0] if i < len(h_top) else ""
|
||||
pn = p_top[i][0] if i < len(p_top) else ""
|
||||
sections.append(f"| {i+1} | {hn} | {pn} |\n")
|
||||
sections.append("\n")
|
||||
|
||||
sections.append(f"### 5.3 Top10 品牌分平台露出率 {mark(step3_ok)}\n\n")
|
||||
if step3_ok:
|
||||
sections.append("DeepSeek、豆包、通义、元宝、文心、Kimi:画面上同名占比无差异。\n\n")
|
||||
else:
|
||||
sections.append("| 品牌 | 平台列 | HTML | 平台 |\n|---|---|---|---|\n")
|
||||
for r in step3_diffs[:50]:
|
||||
sections.append(f"| {r[0]} | {r[1]} | {r[2]} | {r[3]} |\n")
|
||||
sections.append("\n")
|
||||
|
||||
# --- 6 wordcloud ---
|
||||
h_pos = {str(x.get("word")) for x in (brand.get("wordcloud") or {}).get("positive") or []}
|
||||
h_neg = {str(x.get("word")) for x in (brand.get("wordcloud") or {}).get("negative") or []}
|
||||
wc_data = (api.get("wordcloud") or {}).get("data") or {}
|
||||
words = wc_data.get("words") or []
|
||||
p_pos = {str(w.get("word")) for w in words if (w.get("sentiment") or "").lower() == "positive"}
|
||||
p_neg = {str(w.get("word")) for w in words if (w.get("sentiment") or "").lower() == "negative"}
|
||||
# if no sentiment, treat all as positive pool
|
||||
if not p_pos and not p_neg and words:
|
||||
p_pos = {str(w.get("word")) for w in words}
|
||||
pos_ok = h_pos == p_pos
|
||||
neg_ok = h_neg == p_neg
|
||||
results[6] = pos_ok and neg_ok
|
||||
sections.append(f"## 6. 正面词、负面词 {mark(results[6])}\n\n")
|
||||
sections.append(
|
||||
"文案约定:AI 回答关键词=AI 认知词云;正面关键词=正面词;"
|
||||
"未监测到负面词=中正面率100%,暂无负面词。\n\n"
|
||||
)
|
||||
if results[6]:
|
||||
sections.append(
|
||||
f"正面词条相同({len(h_pos)} 个)。"
|
||||
+ ("两边均无负面词。" if not h_neg else f"负面词条相同({len(h_neg)} 个)。")
|
||||
+ "\n\n"
|
||||
)
|
||||
else:
|
||||
only_h = sorted(h_pos - p_pos)
|
||||
only_p = sorted(p_pos - h_pos)
|
||||
sections.append(f"正面词仅 HTML:{only_h[:20]}\n\n正面词仅平台:{only_p[:20]}\n\n")
|
||||
if h_neg != p_neg:
|
||||
sections.append(f"负面词仅 HTML:{sorted(h_neg-p_neg)}\n\n负面词仅平台:{sorted(p_neg-h_neg)}\n\n")
|
||||
|
||||
# helpers for 7-10
|
||||
def emit_pct_section(num: int, title: str, field_html: str, dim_api: str, top_n: int, drop_no_time: bool = False):
|
||||
diffs_by_plat = {}
|
||||
ok = True
|
||||
for label, akey, hkey in PLATFORMS:
|
||||
if field_html in ("content_distribution", "time_distribution"):
|
||||
h_list = screen_content_or_time(html_tmc(brand, hkey, field_html), drop_no_time=drop_no_time)
|
||||
p_list = api_tmc_dim(tmc_rows, akey, dim_api, drop_no_time=drop_no_time)
|
||||
elif field_html == "media_category":
|
||||
h_list = html_media_type(html_tmc(brand, hkey, field_html))
|
||||
p_list = api_media_bar(tmc_rows, akey, dim_api)
|
||||
else:
|
||||
h_list = html_media_name(html_tmc(brand, hkey, field_html))
|
||||
p_list = api_media_bar(tmc_rows, akey, dim_api)
|
||||
d = same_name_pct_diffs(h_list, p_list)
|
||||
# one-side in top_n also counts as fail for media; for content/time skill focuses on same-name pct
|
||||
if field_html in ("media_category", "media_name"):
|
||||
h_names = {n for n, _ in h_list[:top_n]}
|
||||
p_names = {n for n, _ in p_list[:top_n]}
|
||||
# 「其他」 only on platform is noted but may not fail if not squeezing — skill says separate table
|
||||
extra_p = p_names - h_names - {"其他"}
|
||||
extra_h = h_names - p_names
|
||||
if extra_p or extra_h:
|
||||
ok = False
|
||||
if d:
|
||||
ok = False
|
||||
diffs_by_plat[label] = (d, h_list, p_list)
|
||||
results[num] = ok
|
||||
sections.append(f"## {num}. {title} {mark(ok)}\n\n")
|
||||
for label, (d, h_list, p_list) in diffs_by_plat.items():
|
||||
if not d:
|
||||
sections.append(f"{label}:画面上同名占比无差异。\n\n")
|
||||
else:
|
||||
sections.append(f"{label} 同名占比不同:\n\n")
|
||||
sections.append("| 名称 | HTML 画面值 | 平台画面值 |\n|---|---|---|\n")
|
||||
for name, hv, pv in d:
|
||||
sections.append(f"| {name} | {hv}% | {pv}% |\n")
|
||||
sections.append("\n")
|
||||
if field_html in ("media_category", "media_name"):
|
||||
side = one_side_rows(h_list, p_list, top_n)
|
||||
# filter 其他-only platform note
|
||||
other = [x for x in p_list if x[0] == "其他"]
|
||||
if other and other[0][0] not in dict(h_list):
|
||||
sections.append(
|
||||
f"{label} 平台前 10 有「其他」={other[0][1]}%,HTML 不画「其他」。\n\n"
|
||||
)
|
||||
real_side = [s for s in side if s[0] != "其他" and s[2] != "其他"]
|
||||
if real_side:
|
||||
sections.append(f"{label} 仅一边进入前 {top_n}:\n\n")
|
||||
sections.append("| HTML 名 | HTML 值 | 平台名 | 平台值 |\n|---|---|---|---|\n")
|
||||
for s in real_side:
|
||||
sections.append(f"| {s[0]} | {s[1]} | {s[2]} | {s[3]} |\n")
|
||||
sections.append("\n")
|
||||
|
||||
emit_pct_section(7, "信源内容类型", "content_distribution", "content_type", 8)
|
||||
emit_pct_section(8, "信源发布时间", "time_distribution", "time_distribution", 8, drop_no_time=True)
|
||||
emit_pct_section(9, "媒体类型前 10", "media_category", "media_category", 10)
|
||||
emit_pct_section(10, "媒体名称前 10", "media_name", "media_name", 10)
|
||||
|
||||
# --- 11 / 12 sources ---
|
||||
i11_ok = True
|
||||
i12_ok = True
|
||||
i11_details = []
|
||||
i12_details = []
|
||||
for label, akey, hkey in PLATFORMS:
|
||||
hs = html_sources(brand, hkey)
|
||||
ps = api_sources(api["sources"][akey])
|
||||
# 11: align by title set — channel + cite
|
||||
h_by_title = {}
|
||||
for x in hs:
|
||||
t = str(x.get("title") or "")
|
||||
h_by_title[t] = (
|
||||
str(x.get("channel_name") or x.get("channel") or ""),
|
||||
int(x.get("cite_count") or 0),
|
||||
)
|
||||
p_by_title = {x["title"]: (x["channel_name"], int(x["cite_count"])) for x in ps}
|
||||
# set equality of titles
|
||||
if set(h_by_title) != set(p_by_title):
|
||||
# allow count mismatch when <30
|
||||
if not (len(hs) < 30 and len(ps) < 30 and set(h_by_title) == set(p_by_title)):
|
||||
if set(h_by_title) != set(p_by_title):
|
||||
i11_ok = False
|
||||
i11_details.append((label, "标题集合不同", len(hs), len(ps), len(set(h_by_title) ^ set(p_by_title))))
|
||||
for t, (hc, hcite) in h_by_title.items():
|
||||
if t not in p_by_title:
|
||||
continue
|
||||
pc, pcite = p_by_title[t]
|
||||
if hc != pc or hcite != pcite:
|
||||
i11_ok = False
|
||||
i11_details.append((label, t[:40], f"{hc}/{hcite}", f"{pc}/{pcite}", ""))
|
||||
|
||||
# 12: order by index
|
||||
n = min(30, len(hs), len(ps)) if hs and ps else min(30, max(len(hs), len(ps)))
|
||||
# compare by position up to min length; different lengths fail
|
||||
if len(hs) != len(ps) and not (len(hs) < 30 and len(ps) < 30 and len(hs) == len(ps)):
|
||||
# if both truncated at available count and equal ok; else if counts differ fail 12
|
||||
if len(hs) != len(ps):
|
||||
i12_ok = False
|
||||
for i in range(min(len(hs), len(ps), 30)):
|
||||
ht = str(hs[i].get("title") or "")
|
||||
pt = ps[i]["title"]
|
||||
if ht != pt:
|
||||
i12_ok = False
|
||||
hc = int(hs[i].get("cite_count") or 0)
|
||||
pc = int(ps[i]["cite_count"])
|
||||
note = "并列换位,不是缺标题" if hc == pc else ""
|
||||
i12_details.append((label, i + 1, ht[:50], pt[:50], hc, pc, note))
|
||||
|
||||
results[11] = i11_ok
|
||||
results[12] = i12_ok
|
||||
sections.append(f"## 11. 关联信源标题、渠道、被引次数 {mark(results[11])}\n\n")
|
||||
sections.append("按标题对齐,不比序号。只取前 30。\n\n")
|
||||
if results[11]:
|
||||
sections.append("七个平台:标题集合及渠道、被引次数相同。\n\n")
|
||||
else:
|
||||
sections.append("| 平台 | 说明 | a | b | c |\n|---|---|---|---|---|\n")
|
||||
for row in i11_details[:40]:
|
||||
sections.append("| " + " | ".join(str(x) for x in row) + " |\n")
|
||||
sections.append("\n")
|
||||
|
||||
sections.append(f"## 12. 关联信源标题序号 {mark(results[12])}\n\n")
|
||||
sections.append("比画面序号上的标题。平台按 cite_count 降序稳定排序。\n\n")
|
||||
if results[12]:
|
||||
sections.append("七个平台:前 30 序号标题相同。\n\n")
|
||||
else:
|
||||
sections.append("| 平台 | 序号 | HTML 标题 | 平台标题 | HTML次数 | 平台次数 | 说明 |\n|---|---|---|---|---|---|---|\n")
|
||||
for row in i12_details[:60]:
|
||||
sections.append("| " + " | ".join(str(x) for x in row) + " |\n")
|
||||
sections.append("\n")
|
||||
|
||||
overall = "一致" if all(results[i] for i in range(1, 13)) else "不完全一致"
|
||||
|
||||
# summary table
|
||||
head = []
|
||||
head.append("# 测试报告\n\n")
|
||||
head.append(f"{overall}。\n\n")
|
||||
head.append(
|
||||
f"HTML 监测时间 {HTML_MONITOR_DATE} 对应平台监测周期 {PLATFORM_PERIOD}。"
|
||||
"页面日期对应不是差异。HTML「综合」对平台「全平台」。"
|
||||
"差超过 0.05 才算不同。排行榜只比各自 Top 10。\n\n"
|
||||
)
|
||||
head.append("## 参数\n\n")
|
||||
head.append(f"- 平台:{platform_url}\n")
|
||||
head.append(f"- HTML:{html_url}\n")
|
||||
head.append(f"- url日期:{PLATFORM_PERIOD}\n")
|
||||
head.append(f"- html日期:{HTML_MONITOR_DATE}\n")
|
||||
head.append(f"- batchId:`{api.get('batchId')}`\n")
|
||||
head.append(f"- 保存目录:{REPORT_DIR}\n\n")
|
||||
head.append("## 十二项结论\n\n")
|
||||
head.append("| 项 | 结果 |\n|---|---|\n")
|
||||
labels = {
|
||||
1: "1 两个 URL 能否打开",
|
||||
2: "2 七个 AI 平台",
|
||||
3: "3 露出率、前三率、正面率",
|
||||
4: "4 分平台核心指标",
|
||||
5: "5 露出排行 · 各平台明细",
|
||||
6: "6 正面词、负面词",
|
||||
7: "7 信源内容类型",
|
||||
8: "8 信源发布时间",
|
||||
9: "9 媒体类型前 10",
|
||||
10: "10 媒体名称前 10",
|
||||
11: "11 关联信源标题、渠道、被引次数",
|
||||
12: "12 关联信源标题序号",
|
||||
}
|
||||
for i in range(1, 13):
|
||||
head.append(f"| {labels[i]} | {mark(results[i])} |\n")
|
||||
head.append("\n")
|
||||
|
||||
out_path = REPORT_DIR / f"测试报告-{report_id}-{pid}.md"
|
||||
out_path.write_text("".join(head) + "".join(sections), encoding="utf-8")
|
||||
return overall, out_path, all(results[i] for i in range(1, 13))
|
||||
|
||||
|
||||
def main() -> None:
|
||||
batch = json.loads(BATCH.read_text(encoding="utf-8"))
|
||||
lines = ["# batch_0830 汇总\n\n", "| project_id | 结论 | 报告 |\n|---|---|---|\n"]
|
||||
for item in batch:
|
||||
overall, path, ok = compare_project(item)
|
||||
lines.append(f"| {item['project_id']} | {overall} | `{path.name}` |\n")
|
||||
print(item["project_id"], overall, path, flush=True)
|
||||
(REPORT_DIR / "_summary.md").write_text("".join(lines), encoding="utf-8")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
@ -0,0 +1,13 @@
|
||||
# batch_0920 汇总
|
||||
|
||||
| project_id | 结论 | 报告 |
|
||||
|---|---|---|
|
||||
| 1169 | 一致 | `测试报告-1-1169.md` |
|
||||
| 1170 | 不完全一致 | `测试报告-1-1170.md` |
|
||||
| 1171 | 一致 | `测试报告-1-1171.md` |
|
||||
| 1173 | 一致 | `测试报告-1-1173.md` |
|
||||
| 1174 | 一致 | `测试报告-1-1174.md` |
|
||||
| 1177 | 一致 | `测试报告-1-1177.md` |
|
||||
| 1179 | 一致 | `测试报告-1-1179.md` |
|
||||
| 1187 | 一致 | `测试报告-1-1187.md` |
|
||||
| 1199 | 一致 | `测试报告-1-1199.md` |
|
||||
|
After Width: | Height: | Size: 154 KiB |
|
After Width: | Height: | Size: 64 KiB |
|
After Width: | Height: | Size: 118 KiB |
|
After Width: | Height: | Size: 65 KiB |
|
After Width: | Height: | Size: 114 KiB |
|
After Width: | Height: | Size: 63 KiB |
|
After Width: | Height: | Size: 114 KiB |
|
After Width: | Height: | Size: 64 KiB |
|
After Width: | Height: | Size: 112 KiB |
|
After Width: | Height: | Size: 62 KiB |
|
After Width: | Height: | Size: 115 KiB |
|
After Width: | Height: | Size: 63 KiB |
|
After Width: | Height: | Size: 116 KiB |
|
After Width: | Height: | Size: 64 KiB |
|
After Width: | Height: | Size: 116 KiB |
|
After Width: | Height: | Size: 63 KiB |
|
After Width: | Height: | Size: 112 KiB |
|
After Width: | Height: | Size: 64 KiB |
@ -0,0 +1,165 @@
|
||||
# 测试报告
|
||||
|
||||
一致。
|
||||
|
||||
HTML 监测时间 2026-09-20 对应平台监测周期 9月 W38。页面日期对应不是差异。HTML「综合」对平台「全平台」。差超过 0.05 才算不同。排行榜只比各自 Top 10。
|
||||
|
||||
## 参数
|
||||
|
||||
- 平台:https://haoxian.cemeta.cn/geo-monitor?batchDate=2026-09-20&reportType=monitor&level=project&project=1169&line=%E5%8D%A1%E6%B3%B0%E9%A9%B0::%E6%B1%BD%E8%BD%A6%E5%B9%B3%E5%8F%B0
|
||||
- HTML:https://cemeta-resource-1313090634.cos.ap-beijing.myqcloud.com/workflow/3899e673-cd92-4670-8203-566cee53a121.html
|
||||
- url日期:9月 W38
|
||||
- html日期:2026-09-20
|
||||
- batchId:`KATECHI-HIST-1169-20260920`
|
||||
- 保存目录:D:\test\haoxian-script\haoxian_kataichi\skills\L1-geo-html-screen-diff\monitor-0920-test
|
||||
|
||||
## 十二项结论
|
||||
|
||||
| 项 | 结果 |
|
||||
|---|---|
|
||||
| 1 两个 URL 能否打开 | 测试通过✅ |
|
||||
| 2 七个 AI 平台 | 测试通过✅ |
|
||||
| 3 露出率、前三率、正面率 | 测试通过✅ |
|
||||
| 4 分平台核心指标 | 测试通过✅ |
|
||||
| 5 露出排行 · 各平台明细 | 测试通过✅ |
|
||||
| 6 正面词、负面词 | 测试通过✅ |
|
||||
| 7 信源内容类型 | 测试通过✅ |
|
||||
| 8 信源发布时间 | 测试通过✅ |
|
||||
| 9 媒体类型前 10 | 测试通过✅ |
|
||||
| 10 媒体名称前 10 | 测试通过✅ |
|
||||
| 11 关联信源标题、渠道、被引次数 | 测试通过✅ |
|
||||
| 12 关联信源标题序号 | 测试通过✅ |
|
||||
|
||||
## 1. 页面打开 测试通过✅
|
||||
|
||||
两个 URL 都能打开。HTML 页头监测日期对应 2026-09-20,项目为 卖点词。平台页监测周期为 9月 W38。
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
## 2. 七个 AI 平台 测试通过✅
|
||||
|
||||
综合=全平台,通义=通义千问,元宝=腾讯元宝,文心=百度文心;DeepSeek、豆包、Kimi 两边写法相同。
|
||||
|
||||
## 3. 露出率、前三率、正面率 测试通过✅
|
||||
|
||||
7 个平台相同。综合为 29.6% / 26.8% / 99.2%。
|
||||
|
||||
综合、DeepSeek、豆包、通义、元宝、文心、Kimi:画面上同名占比无差异。
|
||||
|
||||
## 4. 分平台核心指标 测试通过✅
|
||||
|
||||
HTML 各平台 self/趋势最新点对平台 snapshot 分平台三项。综合覆盖六个平台的这三个点。
|
||||
|
||||
综合、DeepSeek、豆包、通义、元宝、文心、Kimi:画面上同名占比无差异。
|
||||
|
||||
## 5. 露出排行 · 各平台明细 测试通过✅
|
||||
|
||||
HTML「行业露出率排行榜」对平台「露出排行 · 各平台明细」。只比 Top 10。两边按平均露出率降序取 Top 10。
|
||||
|
||||
### 5.1 综合平均露出率对全平台列 测试通过✅
|
||||
|
||||
Top 10 同名露出率无差异。
|
||||
|
||||
### 5.2 综合 Top 10 名次和品牌名 测试通过✅
|
||||
|
||||
| 排名 | HTML 综合 | 平台全平台 |
|
||||
|---|---|---|
|
||||
| 1 | 瓜子二手车 | 瓜子二手车 |
|
||||
| 2 | 查博士 | 查博士 |
|
||||
| 3 | 懂车帝 | 懂车帝 |
|
||||
| 4 | 优信二手车 | 优信二手车 |
|
||||
| 5 | 花乡 | 花乡 |
|
||||
| 6 | 卡泰驰 | 卡泰驰 |
|
||||
| 7 | 澳康达 | 澳康达 |
|
||||
| 8 | 淘车二手车 | 淘车二手车 |
|
||||
| 9 | 268V | 268V |
|
||||
| 10 | 闲鱼 | 闲鱼 |
|
||||
|
||||
### 5.3 Top10 品牌分平台露出率 测试通过✅
|
||||
|
||||
DeepSeek、豆包、通义、元宝、文心、Kimi:画面上同名占比无差异。
|
||||
|
||||
## 6. 正面词、负面词 测试通过✅
|
||||
|
||||
文案约定:AI 回答关键词=AI 认知词云;正面关键词=正面词;未监测到负面词=中正面率100%,暂无负面词。
|
||||
|
||||
正面词条相同(20 个)。负面词条相同(2 个)。
|
||||
|
||||
## 7. 信源内容类型 测试通过✅
|
||||
|
||||
综合:画面上同名占比无差异。
|
||||
|
||||
DeepSeek:画面上同名占比无差异。
|
||||
|
||||
豆包:画面上同名占比无差异。
|
||||
|
||||
通义:画面上同名占比无差异。
|
||||
|
||||
元宝:画面上同名占比无差异。
|
||||
|
||||
文心:画面上同名占比无差异。
|
||||
|
||||
Kimi:画面上同名占比无差异。
|
||||
|
||||
## 8. 信源发布时间 测试通过✅
|
||||
|
||||
综合:画面上同名占比无差异。
|
||||
|
||||
DeepSeek:画面上同名占比无差异。
|
||||
|
||||
豆包:画面上同名占比无差异。
|
||||
|
||||
通义:画面上同名占比无差异。
|
||||
|
||||
元宝:画面上同名占比无差异。
|
||||
|
||||
文心:画面上同名占比无差异。
|
||||
|
||||
Kimi:画面上同名占比无差异。
|
||||
|
||||
## 9. 媒体类型前 10 测试通过✅
|
||||
|
||||
综合:画面上同名占比无差异。
|
||||
|
||||
DeepSeek:画面上同名占比无差异。
|
||||
|
||||
豆包:画面上同名占比无差异。
|
||||
|
||||
通义:画面上同名占比无差异。
|
||||
|
||||
元宝:画面上同名占比无差异。
|
||||
|
||||
文心:画面上同名占比无差异。
|
||||
|
||||
Kimi:画面上同名占比无差异。
|
||||
|
||||
## 10. 媒体名称前 10 测试通过✅
|
||||
|
||||
综合:画面上同名占比无差异。
|
||||
|
||||
DeepSeek:画面上同名占比无差异。
|
||||
|
||||
豆包:画面上同名占比无差异。
|
||||
|
||||
通义:画面上同名占比无差异。
|
||||
|
||||
元宝:画面上同名占比无差异。
|
||||
|
||||
文心:画面上同名占比无差异。
|
||||
|
||||
Kimi:画面上同名占比无差异。
|
||||
|
||||
## 11. 关联信源标题、渠道、被引次数 测试通过✅
|
||||
|
||||
按标题对齐,不比序号。只取前 30。
|
||||
|
||||
七个平台:标题集合及渠道、被引次数相同。
|
||||
|
||||
## 12. 关联信源标题序号 测试通过✅
|
||||
|
||||
比画面序号上的标题。平台按 cite_count 降序稳定排序。
|
||||
|
||||
七个平台:前 30 序号标题相同。
|
||||
|
||||
@ -0,0 +1,171 @@
|
||||
# 测试报告
|
||||
|
||||
不完全一致。
|
||||
|
||||
HTML 监测时间 2026-09-20 对应平台监测周期 9月 W38。页面日期对应不是差异。HTML「综合」对平台「全平台」。差超过 0.05 才算不同。排行榜只比各自 Top 10。
|
||||
|
||||
## 参数
|
||||
|
||||
- 平台:https://haoxian.cemeta.cn/geo-monitor?batchDate=2026-09-20&reportType=monitor&level=project&project=1170&line=%E5%8D%A1%E6%B3%B0%E9%A9%B0::%E6%B1%BD%E8%BD%A6%E5%B9%B3%E5%8F%B0
|
||||
- HTML:https://cemeta-resource-1313090634.cos.ap-beijing.myqcloud.com/workflow/b4007bdb-5138-4097-ba18-79b53fdc9c35.html
|
||||
- url日期:9月 W38
|
||||
- html日期:2026-09-20
|
||||
- batchId:`KATECHI-HIST-1170-20260920`
|
||||
- 保存目录:D:\test\haoxian-script\haoxian_kataichi\skills\L1-geo-html-screen-diff\monitor-0920-test
|
||||
|
||||
## 十二项结论
|
||||
|
||||
| 项 | 结果 |
|
||||
|---|---|
|
||||
| 1 两个 URL 能否打开 | 测试通过✅ |
|
||||
| 2 七个 AI 平台 | 测试通过✅ |
|
||||
| 3 露出率、前三率、正面率 | 测试通过✅ |
|
||||
| 4 分平台核心指标 | 测试通过✅ |
|
||||
| 5 露出排行 · 各平台明细 | 测试通过✅ |
|
||||
| 6 正面词、负面词 | 测试通过✅ |
|
||||
| 7 信源内容类型 | 测试通过✅ |
|
||||
| 8 信源发布时间 | 测试通过✅ |
|
||||
| 9 媒体类型前 10 | 测试失败❌ |
|
||||
| 10 媒体名称前 10 | 测试通过✅ |
|
||||
| 11 关联信源标题、渠道、被引次数 | 测试通过✅ |
|
||||
| 12 关联信源标题序号 | 测试通过✅ |
|
||||
|
||||
## 1. 页面打开 测试通过✅
|
||||
|
||||
两个 URL 都能打开。HTML 页头监测日期对应 2026-09-20,项目为 购买场景词。平台页监测周期为 9月 W38。
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
## 2. 七个 AI 平台 测试通过✅
|
||||
|
||||
综合=全平台,通义=通义千问,元宝=腾讯元宝,文心=百度文心;DeepSeek、豆包、Kimi 两边写法相同。
|
||||
|
||||
## 3. 露出率、前三率、正面率 测试通过✅
|
||||
|
||||
7 个平台相同。综合为 25.7% / 22.4% / 99.7%。
|
||||
|
||||
综合、DeepSeek、豆包、通义、元宝、文心、Kimi:画面上同名占比无差异。
|
||||
|
||||
## 4. 分平台核心指标 测试通过✅
|
||||
|
||||
HTML 各平台 self/趋势最新点对平台 snapshot 分平台三项。综合覆盖六个平台的这三个点。
|
||||
|
||||
综合、DeepSeek、豆包、通义、元宝、文心、Kimi:画面上同名占比无差异。
|
||||
|
||||
## 5. 露出排行 · 各平台明细 测试通过✅
|
||||
|
||||
HTML「行业露出率排行榜」对平台「露出排行 · 各平台明细」。只比 Top 10。两边按平均露出率降序取 Top 10。
|
||||
|
||||
### 5.1 综合平均露出率对全平台列 测试通过✅
|
||||
|
||||
Top 10 同名露出率无差异。
|
||||
|
||||
### 5.2 综合 Top 10 名次和品牌名 测试通过✅
|
||||
|
||||
| 排名 | HTML 综合 | 平台全平台 |
|
||||
|---|---|---|
|
||||
| 1 | 瓜子二手车 | 瓜子二手车 |
|
||||
| 2 | 花乡 | 花乡 |
|
||||
| 3 | 优信二手车 | 优信二手车 |
|
||||
| 4 | 懂车帝 | 懂车帝 |
|
||||
| 5 | 查博士 | 查博士 |
|
||||
| 6 | 淘车二手车 | 淘车二手车 |
|
||||
| 7 | 澳康达 | 澳康达 |
|
||||
| 8 | 闲鱼 | 闲鱼 |
|
||||
| 9 | 卡泰驰 | 卡泰驰 |
|
||||
| 10 | 汽车之家 | 汽车之家 |
|
||||
|
||||
### 5.3 Top10 品牌分平台露出率 测试通过✅
|
||||
|
||||
DeepSeek、豆包、通义、元宝、文心、Kimi:画面上同名占比无差异。
|
||||
|
||||
## 6. 正面词、负面词 测试通过✅
|
||||
|
||||
文案约定:AI 回答关键词=AI 认知词云;正面关键词=正面词;未监测到负面词=中正面率100%,暂无负面词。
|
||||
|
||||
正面词条相同(20 个)。负面词条相同(6 个)。
|
||||
|
||||
## 7. 信源内容类型 测试通过✅
|
||||
|
||||
综合:画面上同名占比无差异。
|
||||
|
||||
DeepSeek:画面上同名占比无差异。
|
||||
|
||||
豆包:画面上同名占比无差异。
|
||||
|
||||
通义:画面上同名占比无差异。
|
||||
|
||||
元宝:画面上同名占比无差异。
|
||||
|
||||
文心:画面上同名占比无差异。
|
||||
|
||||
Kimi:画面上同名占比无差异。
|
||||
|
||||
## 8. 信源发布时间 测试通过✅
|
||||
|
||||
综合:画面上同名占比无差异。
|
||||
|
||||
DeepSeek:画面上同名占比无差异。
|
||||
|
||||
豆包:画面上同名占比无差异。
|
||||
|
||||
通义:画面上同名占比无差异。
|
||||
|
||||
元宝:画面上同名占比无差异。
|
||||
|
||||
文心:画面上同名占比无差异。
|
||||
|
||||
Kimi:画面上同名占比无差异。
|
||||
|
||||
## 9. 媒体类型前 10 测试失败❌
|
||||
|
||||
综合:画面上同名占比无差异。
|
||||
|
||||
DeepSeek:画面上同名占比无差异。
|
||||
|
||||
豆包:画面上同名占比无差异。
|
||||
|
||||
通义:画面上同名占比无差异。
|
||||
|
||||
元宝:画面上同名占比无差异。
|
||||
|
||||
文心:画面上同名占比无差异。
|
||||
|
||||
文心 仅一边进入前 10:
|
||||
|
||||
| HTML 名 | HTML 值 | 平台名 | 平台值 |
|
||||
|---|---|---|---|
|
||||
| 政府机构官网 | 0.0% | (前 10 之外,未印) | 仅 HTML 前榜有 |
|
||||
|
||||
Kimi:画面上同名占比无差异。
|
||||
|
||||
## 10. 媒体名称前 10 测试通过✅
|
||||
|
||||
综合:画面上同名占比无差异。
|
||||
|
||||
DeepSeek:画面上同名占比无差异。
|
||||
|
||||
豆包:画面上同名占比无差异。
|
||||
|
||||
通义:画面上同名占比无差异。
|
||||
|
||||
元宝:画面上同名占比无差异。
|
||||
|
||||
文心:画面上同名占比无差异。
|
||||
|
||||
Kimi:画面上同名占比无差异。
|
||||
|
||||
## 11. 关联信源标题、渠道、被引次数 测试通过✅
|
||||
|
||||
按标题对齐,不比序号。只取前 30。
|
||||
|
||||
七个平台:标题集合及渠道、被引次数相同。
|
||||
|
||||
## 12. 关联信源标题序号 测试通过✅
|
||||
|
||||
比画面序号上的标题。平台按 cite_count 降序稳定排序。
|
||||
|
||||
七个平台:前 30 序号标题相同。
|
||||
|
||||
@ -0,0 +1,165 @@
|
||||
# 测试报告
|
||||
|
||||
一致。
|
||||
|
||||
HTML 监测时间 2026-09-20 对应平台监测周期 9月 W38。页面日期对应不是差异。HTML「综合」对平台「全平台」。差超过 0.05 才算不同。排行榜只比各自 Top 10。
|
||||
|
||||
## 参数
|
||||
|
||||
- 平台:https://haoxian.cemeta.cn/geo-monitor?batchDate=2026-09-20&reportType=monitor&level=project&project=1171&line=%E5%8D%A1%E6%B3%B0%E9%A9%B0::%E6%B1%BD%E8%BD%A6%E5%B9%B3%E5%8F%B0
|
||||
- HTML:https://cemeta-resource-1313090634.cos.ap-beijing.myqcloud.com/workflow/90f82b55-5c3d-480e-991f-c96d6dfc96dc.html
|
||||
- url日期:9月 W38
|
||||
- html日期:2026-09-20
|
||||
- batchId:`KATECHI-HIST-1171-20260920`
|
||||
- 保存目录:D:\test\haoxian-script\haoxian_kataichi\skills\L1-geo-html-screen-diff\monitor-0920-test
|
||||
|
||||
## 十二项结论
|
||||
|
||||
| 项 | 结果 |
|
||||
|---|---|
|
||||
| 1 两个 URL 能否打开 | 测试通过✅ |
|
||||
| 2 七个 AI 平台 | 测试通过✅ |
|
||||
| 3 露出率、前三率、正面率 | 测试通过✅ |
|
||||
| 4 分平台核心指标 | 测试通过✅ |
|
||||
| 5 露出排行 · 各平台明细 | 测试通过✅ |
|
||||
| 6 正面词、负面词 | 测试通过✅ |
|
||||
| 7 信源内容类型 | 测试通过✅ |
|
||||
| 8 信源发布时间 | 测试通过✅ |
|
||||
| 9 媒体类型前 10 | 测试通过✅ |
|
||||
| 10 媒体名称前 10 | 测试通过✅ |
|
||||
| 11 关联信源标题、渠道、被引次数 | 测试通过✅ |
|
||||
| 12 关联信源标题序号 | 测试通过✅ |
|
||||
|
||||
## 1. 页面打开 测试通过✅
|
||||
|
||||
两个 URL 都能打开。HTML 页头监测日期对应 2026-09-20,项目为 价格词。平台页监测周期为 9月 W38。
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
## 2. 七个 AI 平台 测试通过✅
|
||||
|
||||
综合=全平台,通义=通义千问,元宝=腾讯元宝,文心=百度文心;DeepSeek、豆包、Kimi 两边写法相同。
|
||||
|
||||
## 3. 露出率、前三率、正面率 测试通过✅
|
||||
|
||||
7 个平台相同。综合为 10.1% / 9.5% / 100.0%。
|
||||
|
||||
综合、DeepSeek、豆包、通义、元宝、文心、Kimi:画面上同名占比无差异。
|
||||
|
||||
## 4. 分平台核心指标 测试通过✅
|
||||
|
||||
HTML 各平台 self/趋势最新点对平台 snapshot 分平台三项。综合覆盖六个平台的这三个点。
|
||||
|
||||
综合、DeepSeek、豆包、通义、元宝、文心、Kimi:画面上同名占比无差异。
|
||||
|
||||
## 5. 露出排行 · 各平台明细 测试通过✅
|
||||
|
||||
HTML「行业露出率排行榜」对平台「露出排行 · 各平台明细」。只比 Top 10。两边按平均露出率降序取 Top 10。
|
||||
|
||||
### 5.1 综合平均露出率对全平台列 测试通过✅
|
||||
|
||||
Top 10 同名露出率无差异。
|
||||
|
||||
### 5.2 综合 Top 10 名次和品牌名 测试通过✅
|
||||
|
||||
| 排名 | HTML 综合 | 平台全平台 |
|
||||
|---|---|---|
|
||||
| 1 | 瓜子二手车 | 瓜子二手车 |
|
||||
| 2 | 懂车帝 | 懂车帝 |
|
||||
| 3 | 花乡 | 花乡 |
|
||||
| 4 | 闲鱼 | 闲鱼 |
|
||||
| 5 | 查博士 | 查博士 |
|
||||
| 6 | 淘车二手车 | 淘车二手车 |
|
||||
| 7 | 优信二手车 | 优信二手车 |
|
||||
| 8 | 人人车 | 人人车 |
|
||||
| 9 | 天天拍车 | 天天拍车 |
|
||||
| 10 | 汽车之家 | 汽车之家 |
|
||||
|
||||
### 5.3 Top10 品牌分平台露出率 测试通过✅
|
||||
|
||||
DeepSeek、豆包、通义、元宝、文心、Kimi:画面上同名占比无差异。
|
||||
|
||||
## 6. 正面词、负面词 测试通过✅
|
||||
|
||||
文案约定:AI 回答关键词=AI 认知词云;正面关键词=正面词;未监测到负面词=中正面率100%,暂无负面词。
|
||||
|
||||
正面词条相同(20 个)。两边均无负面词。
|
||||
|
||||
## 7. 信源内容类型 测试通过✅
|
||||
|
||||
综合:画面上同名占比无差异。
|
||||
|
||||
DeepSeek:画面上同名占比无差异。
|
||||
|
||||
豆包:画面上同名占比无差异。
|
||||
|
||||
通义:画面上同名占比无差异。
|
||||
|
||||
元宝:画面上同名占比无差异。
|
||||
|
||||
文心:画面上同名占比无差异。
|
||||
|
||||
Kimi:画面上同名占比无差异。
|
||||
|
||||
## 8. 信源发布时间 测试通过✅
|
||||
|
||||
综合:画面上同名占比无差异。
|
||||
|
||||
DeepSeek:画面上同名占比无差异。
|
||||
|
||||
豆包:画面上同名占比无差异。
|
||||
|
||||
通义:画面上同名占比无差异。
|
||||
|
||||
元宝:画面上同名占比无差异。
|
||||
|
||||
文心:画面上同名占比无差异。
|
||||
|
||||
Kimi:画面上同名占比无差异。
|
||||
|
||||
## 9. 媒体类型前 10 测试通过✅
|
||||
|
||||
综合:画面上同名占比无差异。
|
||||
|
||||
DeepSeek:画面上同名占比无差异。
|
||||
|
||||
豆包:画面上同名占比无差异。
|
||||
|
||||
通义:画面上同名占比无差异。
|
||||
|
||||
元宝:画面上同名占比无差异。
|
||||
|
||||
文心:画面上同名占比无差异。
|
||||
|
||||
Kimi:画面上同名占比无差异。
|
||||
|
||||
## 10. 媒体名称前 10 测试通过✅
|
||||
|
||||
综合:画面上同名占比无差异。
|
||||
|
||||
DeepSeek:画面上同名占比无差异。
|
||||
|
||||
豆包:画面上同名占比无差异。
|
||||
|
||||
通义:画面上同名占比无差异。
|
||||
|
||||
元宝:画面上同名占比无差异。
|
||||
|
||||
文心:画面上同名占比无差异。
|
||||
|
||||
Kimi:画面上同名占比无差异。
|
||||
|
||||
## 11. 关联信源标题、渠道、被引次数 测试通过✅
|
||||
|
||||
按标题对齐,不比序号。只取前 30。
|
||||
|
||||
七个平台:标题集合及渠道、被引次数相同。
|
||||
|
||||
## 12. 关联信源标题序号 测试通过✅
|
||||
|
||||
比画面序号上的标题。平台按 cite_count 降序稳定排序。
|
||||
|
||||
七个平台:前 30 序号标题相同。
|
||||
|
||||
@ -0,0 +1,165 @@
|
||||
# 测试报告
|
||||
|
||||
一致。
|
||||
|
||||
HTML 监测时间 2026-09-20 对应平台监测周期 9月 W38。页面日期对应不是差异。HTML「综合」对平台「全平台」。差超过 0.05 才算不同。排行榜只比各自 Top 10。
|
||||
|
||||
## 参数
|
||||
|
||||
- 平台:https://haoxian.cemeta.cn/geo-monitor?batchDate=2026-09-20&reportType=monitor&level=project&project=1173&line=%E5%8D%A1%E6%B3%B0%E9%A9%B0::%E6%B1%BD%E8%BD%A6%E5%B9%B3%E5%8F%B0
|
||||
- HTML:https://cemeta-resource-1313090634.cos.ap-beijing.myqcloud.com/workflow/8507f96c-d167-45f9-bd78-0958bc99fba0.html
|
||||
- url日期:9月 W38
|
||||
- html日期:2026-09-20
|
||||
- batchId:`KATECHI-HIST-1173-20260920`
|
||||
- 保存目录:D:\test\haoxian-script\haoxian_kataichi\skills\L1-geo-html-screen-diff\monitor-0920-test
|
||||
|
||||
## 十二项结论
|
||||
|
||||
| 项 | 结果 |
|
||||
|---|---|
|
||||
| 1 两个 URL 能否打开 | 测试通过✅ |
|
||||
| 2 七个 AI 平台 | 测试通过✅ |
|
||||
| 3 露出率、前三率、正面率 | 测试通过✅ |
|
||||
| 4 分平台核心指标 | 测试通过✅ |
|
||||
| 5 露出排行 · 各平台明细 | 测试通过✅ |
|
||||
| 6 正面词、负面词 | 测试通过✅ |
|
||||
| 7 信源内容类型 | 测试通过✅ |
|
||||
| 8 信源发布时间 | 测试通过✅ |
|
||||
| 9 媒体类型前 10 | 测试通过✅ |
|
||||
| 10 媒体名称前 10 | 测试通过✅ |
|
||||
| 11 关联信源标题、渠道、被引次数 | 测试通过✅ |
|
||||
| 12 关联信源标题序号 | 测试通过✅ |
|
||||
|
||||
## 1. 页面打开 测试通过✅
|
||||
|
||||
两个 URL 都能打开。HTML 页头监测日期对应 2026-09-20,项目为 口碑评价。平台页监测周期为 9月 W38。
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
## 2. 七个 AI 平台 测试通过✅
|
||||
|
||||
综合=全平台,通义=通义千问,元宝=腾讯元宝,文心=百度文心;DeepSeek、豆包、Kimi 两边写法相同。
|
||||
|
||||
## 3. 露出率、前三率、正面率 测试通过✅
|
||||
|
||||
7 个平台相同。综合为 95.0% / 95.0% / 86.5%。
|
||||
|
||||
综合、DeepSeek、豆包、通义、元宝、文心、Kimi:画面上同名占比无差异。
|
||||
|
||||
## 4. 分平台核心指标 测试通过✅
|
||||
|
||||
HTML 各平台 self/趋势最新点对平台 snapshot 分平台三项。综合覆盖六个平台的这三个点。
|
||||
|
||||
综合、DeepSeek、豆包、通义、元宝、文心、Kimi:画面上同名占比无差异。
|
||||
|
||||
## 5. 露出排行 · 各平台明细 测试通过✅
|
||||
|
||||
HTML「行业露出率排行榜」对平台「露出排行 · 各平台明细」。只比 Top 10。两边按平均露出率降序取 Top 10。
|
||||
|
||||
### 5.1 综合平均露出率对全平台列 测试通过✅
|
||||
|
||||
Top 10 同名露出率无差异。
|
||||
|
||||
### 5.2 综合 Top 10 名次和品牌名 测试通过✅
|
||||
|
||||
| 排名 | HTML 综合 | 平台全平台 |
|
||||
|---|---|---|
|
||||
| 1 | 卡泰驰 | 卡泰驰 |
|
||||
| 2 | 汽车之家 | 汽车之家 |
|
||||
| 3 | 查博士 | 查博士 |
|
||||
| 4 | 懂车帝 | 懂车帝 |
|
||||
| 5 | 瓜子二手车 | 瓜子二手车 |
|
||||
| 6 | 二手车之家 | 二手车之家 |
|
||||
| 7 | 优信二手车 | 优信二手车 |
|
||||
| 8 | 检车家 | 检车家 |
|
||||
| 9 | 澳康达 | 澳康达 |
|
||||
| 10 | 268V | 268V |
|
||||
|
||||
### 5.3 Top10 品牌分平台露出率 测试通过✅
|
||||
|
||||
DeepSeek、豆包、通义、元宝、文心、Kimi:画面上同名占比无差异。
|
||||
|
||||
## 6. 正面词、负面词 测试通过✅
|
||||
|
||||
文案约定:AI 回答关键词=AI 认知词云;正面关键词=正面词;未监测到负面词=中正面率100%,暂无负面词。
|
||||
|
||||
正面词条相同(20 个)。负面词条相同(20 个)。
|
||||
|
||||
## 7. 信源内容类型 测试通过✅
|
||||
|
||||
综合:画面上同名占比无差异。
|
||||
|
||||
DeepSeek:画面上同名占比无差异。
|
||||
|
||||
豆包:画面上同名占比无差异。
|
||||
|
||||
通义:画面上同名占比无差异。
|
||||
|
||||
元宝:画面上同名占比无差异。
|
||||
|
||||
文心:画面上同名占比无差异。
|
||||
|
||||
Kimi:画面上同名占比无差异。
|
||||
|
||||
## 8. 信源发布时间 测试通过✅
|
||||
|
||||
综合:画面上同名占比无差异。
|
||||
|
||||
DeepSeek:画面上同名占比无差异。
|
||||
|
||||
豆包:画面上同名占比无差异。
|
||||
|
||||
通义:画面上同名占比无差异。
|
||||
|
||||
元宝:画面上同名占比无差异。
|
||||
|
||||
文心:画面上同名占比无差异。
|
||||
|
||||
Kimi:画面上同名占比无差异。
|
||||
|
||||
## 9. 媒体类型前 10 测试通过✅
|
||||
|
||||
综合:画面上同名占比无差异。
|
||||
|
||||
DeepSeek:画面上同名占比无差异。
|
||||
|
||||
豆包:画面上同名占比无差异。
|
||||
|
||||
通义:画面上同名占比无差异。
|
||||
|
||||
元宝:画面上同名占比无差异。
|
||||
|
||||
文心:画面上同名占比无差异。
|
||||
|
||||
Kimi:画面上同名占比无差异。
|
||||
|
||||
## 10. 媒体名称前 10 测试通过✅
|
||||
|
||||
综合:画面上同名占比无差异。
|
||||
|
||||
DeepSeek:画面上同名占比无差异。
|
||||
|
||||
豆包:画面上同名占比无差异。
|
||||
|
||||
通义:画面上同名占比无差异。
|
||||
|
||||
元宝:画面上同名占比无差异。
|
||||
|
||||
文心:画面上同名占比无差异。
|
||||
|
||||
Kimi:画面上同名占比无差异。
|
||||
|
||||
## 11. 关联信源标题、渠道、被引次数 测试通过✅
|
||||
|
||||
按标题对齐,不比序号。只取前 30。
|
||||
|
||||
七个平台:标题集合及渠道、被引次数相同。
|
||||
|
||||
## 12. 关联信源标题序号 测试通过✅
|
||||
|
||||
比画面序号上的标题。平台按 cite_count 降序稳定排序。
|
||||
|
||||
七个平台:前 30 序号标题相同。
|
||||
|
||||
@ -0,0 +1,165 @@
|
||||
# 测试报告
|
||||
|
||||
一致。
|
||||
|
||||
HTML 监测时间 2026-09-20 对应平台监测周期 9月 W38。页面日期对应不是差异。HTML「综合」对平台「全平台」。差超过 0.05 才算不同。排行榜只比各自 Top 10。
|
||||
|
||||
## 参数
|
||||
|
||||
- 平台:https://haoxian.cemeta.cn/geo-monitor?batchDate=2026-09-20&reportType=monitor&level=project&project=1174&line=%E5%8D%A1%E6%B3%B0%E9%A9%B0::%E6%B1%BD%E8%BD%A6%E5%B9%B3%E5%8F%B0
|
||||
- HTML:https://cemeta-resource-1313090634.cos.ap-beijing.myqcloud.com/workflow/03a274fd-74e2-4fc8-bcc5-88b5286016f8.html
|
||||
- url日期:9月 W38
|
||||
- html日期:2026-09-20
|
||||
- batchId:`KATECHI-HIST-1174-20260920`
|
||||
- 保存目录:D:\test\haoxian-script\haoxian_kataichi\skills\L1-geo-html-screen-diff\monitor-0920-test
|
||||
|
||||
## 十二项结论
|
||||
|
||||
| 项 | 结果 |
|
||||
|---|---|
|
||||
| 1 两个 URL 能否打开 | 测试通过✅ |
|
||||
| 2 七个 AI 平台 | 测试通过✅ |
|
||||
| 3 露出率、前三率、正面率 | 测试通过✅ |
|
||||
| 4 分平台核心指标 | 测试通过✅ |
|
||||
| 5 露出排行 · 各平台明细 | 测试通过✅ |
|
||||
| 6 正面词、负面词 | 测试通过✅ |
|
||||
| 7 信源内容类型 | 测试通过✅ |
|
||||
| 8 信源发布时间 | 测试通过✅ |
|
||||
| 9 媒体类型前 10 | 测试通过✅ |
|
||||
| 10 媒体名称前 10 | 测试通过✅ |
|
||||
| 11 关联信源标题、渠道、被引次数 | 测试通过✅ |
|
||||
| 12 关联信源标题序号 | 测试通过✅ |
|
||||
|
||||
## 1. 页面打开 测试通过✅
|
||||
|
||||
两个 URL 都能打开。HTML 页头监测日期对应 2026-09-20,项目为 宝马。平台页监测周期为 9月 W38。
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
## 2. 七个 AI 平台 测试通过✅
|
||||
|
||||
综合=全平台,通义=通义千问,元宝=腾讯元宝,文心=百度文心;DeepSeek、豆包、Kimi 两边写法相同。
|
||||
|
||||
## 3. 露出率、前三率、正面率 测试通过✅
|
||||
|
||||
7 个平台相同。综合为 13.8% / 12.6% / 100.0%。
|
||||
|
||||
综合、DeepSeek、豆包、通义、元宝、文心、Kimi:画面上同名占比无差异。
|
||||
|
||||
## 4. 分平台核心指标 测试通过✅
|
||||
|
||||
HTML 各平台 self/趋势最新点对平台 snapshot 分平台三项。综合覆盖六个平台的这三个点。
|
||||
|
||||
综合、DeepSeek、豆包、通义、元宝、文心、Kimi:画面上同名占比无差异。
|
||||
|
||||
## 5. 露出排行 · 各平台明细 测试通过✅
|
||||
|
||||
HTML「行业露出率排行榜」对平台「露出排行 · 各平台明细」。只比 Top 10。两边按平均露出率降序取 Top 10。
|
||||
|
||||
### 5.1 综合平均露出率对全平台列 测试通过✅
|
||||
|
||||
Top 10 同名露出率无差异。
|
||||
|
||||
### 5.2 综合 Top 10 名次和品牌名 测试通过✅
|
||||
|
||||
| 排名 | HTML 综合 | 平台全平台 |
|
||||
|---|---|---|
|
||||
| 1 | 瓜子二手车 | 瓜子二手车 |
|
||||
| 2 | 懂车帝 | 懂车帝 |
|
||||
| 3 | 查博士 | 查博士 |
|
||||
| 4 | 优信二手车 | 优信二手车 |
|
||||
| 5 | 花乡 | 花乡 |
|
||||
| 6 | 268V | 268V |
|
||||
| 7 | 汽车之家 | 汽车之家 |
|
||||
| 8 | 闲鱼 | 闲鱼 |
|
||||
| 9 | 澳康达 | 澳康达 |
|
||||
| 10 | 卡泰驰 | 卡泰驰 |
|
||||
|
||||
### 5.3 Top10 品牌分平台露出率 测试通过✅
|
||||
|
||||
DeepSeek、豆包、通义、元宝、文心、Kimi:画面上同名占比无差异。
|
||||
|
||||
## 6. 正面词、负面词 测试通过✅
|
||||
|
||||
文案约定:AI 回答关键词=AI 认知词云;正面关键词=正面词;未监测到负面词=中正面率100%,暂无负面词。
|
||||
|
||||
正面词条相同(20 个)。两边均无负面词。
|
||||
|
||||
## 7. 信源内容类型 测试通过✅
|
||||
|
||||
综合:画面上同名占比无差异。
|
||||
|
||||
DeepSeek:画面上同名占比无差异。
|
||||
|
||||
豆包:画面上同名占比无差异。
|
||||
|
||||
通义:画面上同名占比无差异。
|
||||
|
||||
元宝:画面上同名占比无差异。
|
||||
|
||||
文心:画面上同名占比无差异。
|
||||
|
||||
Kimi:画面上同名占比无差异。
|
||||
|
||||
## 8. 信源发布时间 测试通过✅
|
||||
|
||||
综合:画面上同名占比无差异。
|
||||
|
||||
DeepSeek:画面上同名占比无差异。
|
||||
|
||||
豆包:画面上同名占比无差异。
|
||||
|
||||
通义:画面上同名占比无差异。
|
||||
|
||||
元宝:画面上同名占比无差异。
|
||||
|
||||
文心:画面上同名占比无差异。
|
||||
|
||||
Kimi:画面上同名占比无差异。
|
||||
|
||||
## 9. 媒体类型前 10 测试通过✅
|
||||
|
||||
综合:画面上同名占比无差异。
|
||||
|
||||
DeepSeek:画面上同名占比无差异。
|
||||
|
||||
豆包:画面上同名占比无差异。
|
||||
|
||||
通义:画面上同名占比无差异。
|
||||
|
||||
元宝:画面上同名占比无差异。
|
||||
|
||||
文心:画面上同名占比无差异。
|
||||
|
||||
Kimi:画面上同名占比无差异。
|
||||
|
||||
## 10. 媒体名称前 10 测试通过✅
|
||||
|
||||
综合:画面上同名占比无差异。
|
||||
|
||||
DeepSeek:画面上同名占比无差异。
|
||||
|
||||
豆包:画面上同名占比无差异。
|
||||
|
||||
通义:画面上同名占比无差异。
|
||||
|
||||
元宝:画面上同名占比无差异。
|
||||
|
||||
文心:画面上同名占比无差异。
|
||||
|
||||
Kimi:画面上同名占比无差异。
|
||||
|
||||
## 11. 关联信源标题、渠道、被引次数 测试通过✅
|
||||
|
||||
按标题对齐,不比序号。只取前 30。
|
||||
|
||||
七个平台:标题集合及渠道、被引次数相同。
|
||||
|
||||
## 12. 关联信源标题序号 测试通过✅
|
||||
|
||||
比画面序号上的标题。平台按 cite_count 降序稳定排序。
|
||||
|
||||
七个平台:前 30 序号标题相同。
|
||||
|
||||
@ -0,0 +1,165 @@
|
||||
# 测试报告
|
||||
|
||||
一致。
|
||||
|
||||
HTML 监测时间 2026-09-20 对应平台监测周期 9月 W38。页面日期对应不是差异。HTML「综合」对平台「全平台」。差超过 0.05 才算不同。排行榜只比各自 Top 10。
|
||||
|
||||
## 参数
|
||||
|
||||
- 平台:https://haoxian.cemeta.cn/geo-monitor?batchDate=2026-09-20&reportType=monitor&level=project&project=1177&line=%E5%8D%A1%E6%B3%B0%E9%A9%B0::%E6%B1%BD%E8%BD%A6%E5%B9%B3%E5%8F%B0
|
||||
- HTML:https://cemeta-resource-1313090634.cos.ap-beijing.myqcloud.com/workflow/a5fc2516-2de6-41ab-85a1-67a94bde2181.html
|
||||
- url日期:9月 W38
|
||||
- html日期:2026-09-20
|
||||
- batchId:`KATECHI-HIST-1177-20260920`
|
||||
- 保存目录:D:\test\haoxian-script\haoxian_kataichi\skills\L1-geo-html-screen-diff\monitor-0920-test
|
||||
|
||||
## 十二项结论
|
||||
|
||||
| 项 | 结果 |
|
||||
|---|---|
|
||||
| 1 两个 URL 能否打开 | 测试通过✅ |
|
||||
| 2 七个 AI 平台 | 测试通过✅ |
|
||||
| 3 露出率、前三率、正面率 | 测试通过✅ |
|
||||
| 4 分平台核心指标 | 测试通过✅ |
|
||||
| 5 露出排行 · 各平台明细 | 测试通过✅ |
|
||||
| 6 正面词、负面词 | 测试通过✅ |
|
||||
| 7 信源内容类型 | 测试通过✅ |
|
||||
| 8 信源发布时间 | 测试通过✅ |
|
||||
| 9 媒体类型前 10 | 测试通过✅ |
|
||||
| 10 媒体名称前 10 | 测试通过✅ |
|
||||
| 11 关联信源标题、渠道、被引次数 | 测试通过✅ |
|
||||
| 12 关联信源标题序号 | 测试通过✅ |
|
||||
|
||||
## 1. 页面打开 测试通过✅
|
||||
|
||||
两个 URL 都能打开。HTML 页头监测日期对应 2026-09-20,项目为 奥迪。平台页监测周期为 9月 W38。
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
## 2. 七个 AI 平台 测试通过✅
|
||||
|
||||
综合=全平台,通义=通义千问,元宝=腾讯元宝,文心=百度文心;DeepSeek、豆包、Kimi 两边写法相同。
|
||||
|
||||
## 3. 露出率、前三率、正面率 测试通过✅
|
||||
|
||||
7 个平台相同。综合为 35.5% / 34.5% / 100.0%。
|
||||
|
||||
综合、DeepSeek、豆包、通义、元宝、文心、Kimi:画面上同名占比无差异。
|
||||
|
||||
## 4. 分平台核心指标 测试通过✅
|
||||
|
||||
HTML 各平台 self/趋势最新点对平台 snapshot 分平台三项。综合覆盖六个平台的这三个点。
|
||||
|
||||
综合、DeepSeek、豆包、通义、元宝、文心、Kimi:画面上同名占比无差异。
|
||||
|
||||
## 5. 露出排行 · 各平台明细 测试通过✅
|
||||
|
||||
HTML「行业露出率排行榜」对平台「露出排行 · 各平台明细」。只比 Top 10。两边按平均露出率降序取 Top 10。
|
||||
|
||||
### 5.1 综合平均露出率对全平台列 测试通过✅
|
||||
|
||||
Top 10 同名露出率无差异。
|
||||
|
||||
### 5.2 综合 Top 10 名次和品牌名 测试通过✅
|
||||
|
||||
| 排名 | HTML 综合 | 平台全平台 |
|
||||
|---|---|---|
|
||||
| 1 | 瓜子二手车 | 瓜子二手车 |
|
||||
| 2 | 澳康达 | 澳康达 |
|
||||
| 3 | 卡泰驰 | 卡泰驰 |
|
||||
| 4 | 查博士 | 查博士 |
|
||||
| 5 | 懂车帝 | 懂车帝 |
|
||||
| 6 | 优信二手车 | 优信二手车 |
|
||||
| 7 | 闲鱼 | 闲鱼 |
|
||||
| 8 | 花乡 | 花乡 |
|
||||
| 9 | 检车家 | 检车家 |
|
||||
| 10 | 268V | 268V |
|
||||
|
||||
### 5.3 Top10 品牌分平台露出率 测试通过✅
|
||||
|
||||
DeepSeek、豆包、通义、元宝、文心、Kimi:画面上同名占比无差异。
|
||||
|
||||
## 6. 正面词、负面词 测试通过✅
|
||||
|
||||
文案约定:AI 回答关键词=AI 认知词云;正面关键词=正面词;未监测到负面词=中正面率100%,暂无负面词。
|
||||
|
||||
正面词条相同(20 个)。两边均无负面词。
|
||||
|
||||
## 7. 信源内容类型 测试通过✅
|
||||
|
||||
综合:画面上同名占比无差异。
|
||||
|
||||
DeepSeek:画面上同名占比无差异。
|
||||
|
||||
豆包:画面上同名占比无差异。
|
||||
|
||||
通义:画面上同名占比无差异。
|
||||
|
||||
元宝:画面上同名占比无差异。
|
||||
|
||||
文心:画面上同名占比无差异。
|
||||
|
||||
Kimi:画面上同名占比无差异。
|
||||
|
||||
## 8. 信源发布时间 测试通过✅
|
||||
|
||||
综合:画面上同名占比无差异。
|
||||
|
||||
DeepSeek:画面上同名占比无差异。
|
||||
|
||||
豆包:画面上同名占比无差异。
|
||||
|
||||
通义:画面上同名占比无差异。
|
||||
|
||||
元宝:画面上同名占比无差异。
|
||||
|
||||
文心:画面上同名占比无差异。
|
||||
|
||||
Kimi:画面上同名占比无差异。
|
||||
|
||||
## 9. 媒体类型前 10 测试通过✅
|
||||
|
||||
综合:画面上同名占比无差异。
|
||||
|
||||
DeepSeek:画面上同名占比无差异。
|
||||
|
||||
豆包:画面上同名占比无差异。
|
||||
|
||||
通义:画面上同名占比无差异。
|
||||
|
||||
元宝:画面上同名占比无差异。
|
||||
|
||||
文心:画面上同名占比无差异。
|
||||
|
||||
Kimi:画面上同名占比无差异。
|
||||
|
||||
## 10. 媒体名称前 10 测试通过✅
|
||||
|
||||
综合:画面上同名占比无差异。
|
||||
|
||||
DeepSeek:画面上同名占比无差异。
|
||||
|
||||
豆包:画面上同名占比无差异。
|
||||
|
||||
通义:画面上同名占比无差异。
|
||||
|
||||
元宝:画面上同名占比无差异。
|
||||
|
||||
文心:画面上同名占比无差异。
|
||||
|
||||
Kimi:画面上同名占比无差异。
|
||||
|
||||
## 11. 关联信源标题、渠道、被引次数 测试通过✅
|
||||
|
||||
按标题对齐,不比序号。只取前 30。
|
||||
|
||||
七个平台:标题集合及渠道、被引次数相同。
|
||||
|
||||
## 12. 关联信源标题序号 测试通过✅
|
||||
|
||||
比画面序号上的标题。平台按 cite_count 降序稳定排序。
|
||||
|
||||
七个平台:前 30 序号标题相同。
|
||||
|
||||
@ -0,0 +1,165 @@
|
||||
# 测试报告
|
||||
|
||||
一致。
|
||||
|
||||
HTML 监测时间 2026-09-20 对应平台监测周期 9月 W38。页面日期对应不是差异。HTML「综合」对平台「全平台」。差超过 0.05 才算不同。排行榜只比各自 Top 10。
|
||||
|
||||
## 参数
|
||||
|
||||
- 平台:https://haoxian.cemeta.cn/geo-monitor?batchDate=2026-09-20&reportType=monitor&level=project&project=1179&line=%E5%8D%A1%E6%B3%B0%E9%A9%B0::%E6%B1%BD%E8%BD%A6%E5%B9%B3%E5%8F%B0
|
||||
- HTML:https://cemeta-resource-1313090634.cos.ap-beijing.myqcloud.com/workflow/74a34826-4088-4b8e-8b7d-4fdf12007e8b.html
|
||||
- url日期:9月 W38
|
||||
- html日期:2026-09-20
|
||||
- batchId:`KATECHI-HIST-1179-20260920`
|
||||
- 保存目录:D:\test\haoxian-script\haoxian_kataichi\skills\L1-geo-html-screen-diff\monitor-0920-test
|
||||
|
||||
## 十二项结论
|
||||
|
||||
| 项 | 结果 |
|
||||
|---|---|
|
||||
| 1 两个 URL 能否打开 | 测试通过✅ |
|
||||
| 2 七个 AI 平台 | 测试通过✅ |
|
||||
| 3 露出率、前三率、正面率 | 测试通过✅ |
|
||||
| 4 分平台核心指标 | 测试通过✅ |
|
||||
| 5 露出排行 · 各平台明细 | 测试通过✅ |
|
||||
| 6 正面词、负面词 | 测试通过✅ |
|
||||
| 7 信源内容类型 | 测试通过✅ |
|
||||
| 8 信源发布时间 | 测试通过✅ |
|
||||
| 9 媒体类型前 10 | 测试通过✅ |
|
||||
| 10 媒体名称前 10 | 测试通过✅ |
|
||||
| 11 关联信源标题、渠道、被引次数 | 测试通过✅ |
|
||||
| 12 关联信源标题序号 | 测试通过✅ |
|
||||
|
||||
## 1. 页面打开 测试通过✅
|
||||
|
||||
两个 URL 都能打开。HTML 页头监测日期对应 2026-09-20,项目为 新能源。平台页监测周期为 9月 W38。
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
## 2. 七个 AI 平台 测试通过✅
|
||||
|
||||
综合=全平台,通义=通义千问,元宝=腾讯元宝,文心=百度文心;DeepSeek、豆包、Kimi 两边写法相同。
|
||||
|
||||
## 3. 露出率、前三率、正面率 测试通过✅
|
||||
|
||||
7 个平台相同。综合为 20.0% / 17.4% / 100.0%。
|
||||
|
||||
综合、DeepSeek、豆包、通义、元宝、文心、Kimi:画面上同名占比无差异。
|
||||
|
||||
## 4. 分平台核心指标 测试通过✅
|
||||
|
||||
HTML 各平台 self/趋势最新点对平台 snapshot 分平台三项。综合覆盖六个平台的这三个点。
|
||||
|
||||
综合、DeepSeek、豆包、通义、元宝、文心、Kimi:画面上同名占比无差异。
|
||||
|
||||
## 5. 露出排行 · 各平台明细 测试通过✅
|
||||
|
||||
HTML「行业露出率排行榜」对平台「露出排行 · 各平台明细」。只比 Top 10。两边按平均露出率降序取 Top 10。
|
||||
|
||||
### 5.1 综合平均露出率对全平台列 测试通过✅
|
||||
|
||||
Top 10 同名露出率无差异。
|
||||
|
||||
### 5.2 综合 Top 10 名次和品牌名 测试通过✅
|
||||
|
||||
| 排名 | HTML 综合 | 平台全平台 |
|
||||
|---|---|---|
|
||||
| 1 | 瓜子二手车 | 瓜子二手车 |
|
||||
| 2 | 懂车帝 | 懂车帝 |
|
||||
| 3 | 转转 | 转转 |
|
||||
| 4 | 查博士 | 查博士 |
|
||||
| 5 | 淘车二手车 | 淘车二手车 |
|
||||
| 6 | 闲鱼 | 闲鱼 |
|
||||
| 7 | 优信二手车 | 优信二手车 |
|
||||
| 8 | 花乡 | 花乡 |
|
||||
| 9 | 卡泰驰 | 卡泰驰 |
|
||||
| 10 | 帅车 | 帅车 |
|
||||
|
||||
### 5.3 Top10 品牌分平台露出率 测试通过✅
|
||||
|
||||
DeepSeek、豆包、通义、元宝、文心、Kimi:画面上同名占比无差异。
|
||||
|
||||
## 6. 正面词、负面词 测试通过✅
|
||||
|
||||
文案约定:AI 回答关键词=AI 认知词云;正面关键词=正面词;未监测到负面词=中正面率100%,暂无负面词。
|
||||
|
||||
正面词条相同(20 个)。两边均无负面词。
|
||||
|
||||
## 7. 信源内容类型 测试通过✅
|
||||
|
||||
综合:画面上同名占比无差异。
|
||||
|
||||
DeepSeek:画面上同名占比无差异。
|
||||
|
||||
豆包:画面上同名占比无差异。
|
||||
|
||||
通义:画面上同名占比无差异。
|
||||
|
||||
元宝:画面上同名占比无差异。
|
||||
|
||||
文心:画面上同名占比无差异。
|
||||
|
||||
Kimi:画面上同名占比无差异。
|
||||
|
||||
## 8. 信源发布时间 测试通过✅
|
||||
|
||||
综合:画面上同名占比无差异。
|
||||
|
||||
DeepSeek:画面上同名占比无差异。
|
||||
|
||||
豆包:画面上同名占比无差异。
|
||||
|
||||
通义:画面上同名占比无差异。
|
||||
|
||||
元宝:画面上同名占比无差异。
|
||||
|
||||
文心:画面上同名占比无差异。
|
||||
|
||||
Kimi:画面上同名占比无差异。
|
||||
|
||||
## 9. 媒体类型前 10 测试通过✅
|
||||
|
||||
综合:画面上同名占比无差异。
|
||||
|
||||
DeepSeek:画面上同名占比无差异。
|
||||
|
||||
豆包:画面上同名占比无差异。
|
||||
|
||||
通义:画面上同名占比无差异。
|
||||
|
||||
元宝:画面上同名占比无差异。
|
||||
|
||||
文心:画面上同名占比无差异。
|
||||
|
||||
Kimi:画面上同名占比无差异。
|
||||
|
||||
## 10. 媒体名称前 10 测试通过✅
|
||||
|
||||
综合:画面上同名占比无差异。
|
||||
|
||||
DeepSeek:画面上同名占比无差异。
|
||||
|
||||
豆包:画面上同名占比无差异。
|
||||
|
||||
通义:画面上同名占比无差异。
|
||||
|
||||
元宝:画面上同名占比无差异。
|
||||
|
||||
文心:画面上同名占比无差异。
|
||||
|
||||
Kimi:画面上同名占比无差异。
|
||||
|
||||
## 11. 关联信源标题、渠道、被引次数 测试通过✅
|
||||
|
||||
按标题对齐,不比序号。只取前 30。
|
||||
|
||||
七个平台:标题集合及渠道、被引次数相同。
|
||||
|
||||
## 12. 关联信源标题序号 测试通过✅
|
||||
|
||||
比画面序号上的标题。平台按 cite_count 降序稳定排序。
|
||||
|
||||
七个平台:前 30 序号标题相同。
|
||||
|
||||
@ -0,0 +1,165 @@
|
||||
# 测试报告
|
||||
|
||||
一致。
|
||||
|
||||
HTML 监测时间 2026-09-20 对应平台监测周期 9月 W38。页面日期对应不是差异。HTML「综合」对平台「全平台」。差超过 0.05 才算不同。排行榜只比各自 Top 10。
|
||||
|
||||
## 参数
|
||||
|
||||
- 平台:https://haoxian.cemeta.cn/geo-monitor?batchDate=2026-09-20&reportType=monitor&level=project&project=1187&line=%E5%8D%A1%E6%B3%B0%E9%A9%B0::%E6%B1%BD%E8%BD%A6%E5%B9%B3%E5%8F%B0
|
||||
- HTML:https://cemeta-resource-1313090634.cos.ap-beijing.myqcloud.com/workflow/ef43ba7c-5d22-4df7-99b9-9697d5095f67.html
|
||||
- url日期:9月 W38
|
||||
- html日期:2026-09-20
|
||||
- batchId:`KATECHI-HIST-1187-20260920`
|
||||
- 保存目录:D:\test\haoxian-script\haoxian_kataichi\skills\L1-geo-html-screen-diff\monitor-0920-test
|
||||
|
||||
## 十二项结论
|
||||
|
||||
| 项 | 结果 |
|
||||
|---|---|
|
||||
| 1 两个 URL 能否打开 | 测试通过✅ |
|
||||
| 2 七个 AI 平台 | 测试通过✅ |
|
||||
| 3 露出率、前三率、正面率 | 测试通过✅ |
|
||||
| 4 分平台核心指标 | 测试通过✅ |
|
||||
| 5 露出排行 · 各平台明细 | 测试通过✅ |
|
||||
| 6 正面词、负面词 | 测试通过✅ |
|
||||
| 7 信源内容类型 | 测试通过✅ |
|
||||
| 8 信源发布时间 | 测试通过✅ |
|
||||
| 9 媒体类型前 10 | 测试通过✅ |
|
||||
| 10 媒体名称前 10 | 测试通过✅ |
|
||||
| 11 关联信源标题、渠道、被引次数 | 测试通过✅ |
|
||||
| 12 关联信源标题序号 | 测试通过✅ |
|
||||
|
||||
## 1. 页面打开 测试通过✅
|
||||
|
||||
两个 URL 都能打开。HTML 页头监测日期对应 2026-09-20,项目为 奔驰。平台页监测周期为 9月 W38。
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
## 2. 七个 AI 平台 测试通过✅
|
||||
|
||||
综合=全平台,通义=通义千问,元宝=腾讯元宝,文心=百度文心;DeepSeek、豆包、Kimi 两边写法相同。
|
||||
|
||||
## 3. 露出率、前三率、正面率 测试通过✅
|
||||
|
||||
7 个平台相同。综合为 28.8% / 28.3% / 96.7%。
|
||||
|
||||
综合、DeepSeek、豆包、通义、元宝、文心、Kimi:画面上同名占比无差异。
|
||||
|
||||
## 4. 分平台核心指标 测试通过✅
|
||||
|
||||
HTML 各平台 self/趋势最新点对平台 snapshot 分平台三项。综合覆盖六个平台的这三个点。
|
||||
|
||||
综合、DeepSeek、豆包、通义、元宝、文心、Kimi:画面上同名占比无差异。
|
||||
|
||||
## 5. 露出排行 · 各平台明细 测试通过✅
|
||||
|
||||
HTML「行业露出率排行榜」对平台「露出排行 · 各平台明细」。只比 Top 10。两边按平均露出率降序取 Top 10。
|
||||
|
||||
### 5.1 综合平均露出率对全平台列 测试通过✅
|
||||
|
||||
Top 10 同名露出率无差异。
|
||||
|
||||
### 5.2 综合 Top 10 名次和品牌名 测试通过✅
|
||||
|
||||
| 排名 | HTML 综合 | 平台全平台 |
|
||||
|---|---|---|
|
||||
| 1 | 瓜子二手车 | 瓜子二手车 |
|
||||
| 2 | 查博士 | 查博士 |
|
||||
| 3 | 懂车帝 | 懂车帝 |
|
||||
| 4 | 花乡 | 花乡 |
|
||||
| 5 | 卡泰驰 | 卡泰驰 |
|
||||
| 6 | 澳康达 | 澳康达 |
|
||||
| 7 | 优信二手车 | 优信二手车 |
|
||||
| 8 | 闲鱼 | 闲鱼 |
|
||||
| 9 | 检车家 | 检车家 |
|
||||
| 10 | 人人车 | 人人车 |
|
||||
|
||||
### 5.3 Top10 品牌分平台露出率 测试通过✅
|
||||
|
||||
DeepSeek、豆包、通义、元宝、文心、Kimi:画面上同名占比无差异。
|
||||
|
||||
## 6. 正面词、负面词 测试通过✅
|
||||
|
||||
文案约定:AI 回答关键词=AI 认知词云;正面关键词=正面词;未监测到负面词=中正面率100%,暂无负面词。
|
||||
|
||||
正面词条相同(20 个)。负面词条相同(3 个)。
|
||||
|
||||
## 7. 信源内容类型 测试通过✅
|
||||
|
||||
综合:画面上同名占比无差异。
|
||||
|
||||
DeepSeek:画面上同名占比无差异。
|
||||
|
||||
豆包:画面上同名占比无差异。
|
||||
|
||||
通义:画面上同名占比无差异。
|
||||
|
||||
元宝:画面上同名占比无差异。
|
||||
|
||||
文心:画面上同名占比无差异。
|
||||
|
||||
Kimi:画面上同名占比无差异。
|
||||
|
||||
## 8. 信源发布时间 测试通过✅
|
||||
|
||||
综合:画面上同名占比无差异。
|
||||
|
||||
DeepSeek:画面上同名占比无差异。
|
||||
|
||||
豆包:画面上同名占比无差异。
|
||||
|
||||
通义:画面上同名占比无差异。
|
||||
|
||||
元宝:画面上同名占比无差异。
|
||||
|
||||
文心:画面上同名占比无差异。
|
||||
|
||||
Kimi:画面上同名占比无差异。
|
||||
|
||||
## 9. 媒体类型前 10 测试通过✅
|
||||
|
||||
综合:画面上同名占比无差异。
|
||||
|
||||
DeepSeek:画面上同名占比无差异。
|
||||
|
||||
豆包:画面上同名占比无差异。
|
||||
|
||||
通义:画面上同名占比无差异。
|
||||
|
||||
元宝:画面上同名占比无差异。
|
||||
|
||||
文心:画面上同名占比无差异。
|
||||
|
||||
Kimi:画面上同名占比无差异。
|
||||
|
||||
## 10. 媒体名称前 10 测试通过✅
|
||||
|
||||
综合:画面上同名占比无差异。
|
||||
|
||||
DeepSeek:画面上同名占比无差异。
|
||||
|
||||
豆包:画面上同名占比无差异。
|
||||
|
||||
通义:画面上同名占比无差异。
|
||||
|
||||
元宝:画面上同名占比无差异。
|
||||
|
||||
文心:画面上同名占比无差异。
|
||||
|
||||
Kimi:画面上同名占比无差异。
|
||||
|
||||
## 11. 关联信源标题、渠道、被引次数 测试通过✅
|
||||
|
||||
按标题对齐,不比序号。只取前 30。
|
||||
|
||||
七个平台:标题集合及渠道、被引次数相同。
|
||||
|
||||
## 12. 关联信源标题序号 测试通过✅
|
||||
|
||||
比画面序号上的标题。平台按 cite_count 降序稳定排序。
|
||||
|
||||
七个平台:前 30 序号标题相同。
|
||||
|
||||
@ -0,0 +1,165 @@
|
||||
# 测试报告
|
||||
|
||||
一致。
|
||||
|
||||
HTML 监测时间 2026-09-20 对应平台监测周期 9月 W38。页面日期对应不是差异。HTML「综合」对平台「全平台」。差超过 0.05 才算不同。排行榜只比各自 Top 10。
|
||||
|
||||
## 参数
|
||||
|
||||
- 平台:https://haoxian.cemeta.cn/geo-monitor?batchDate=2026-09-20&reportType=monitor&level=project&project=1199&line=%E5%8D%A1%E6%B3%B0%E9%A9%B0::%E6%B1%BD%E8%BD%A6%E5%B9%B3%E5%8F%B0
|
||||
- HTML:https://cemeta-resource-1313090634.cos.ap-beijing.myqcloud.com/workflow/bc21a4ab-c882-4868-adfb-829c649bf6a0.html
|
||||
- url日期:9月 W38
|
||||
- html日期:2026-09-20
|
||||
- batchId:`KATECHI-HIST-1199-20260920`
|
||||
- 保存目录:D:\test\haoxian-script\haoxian_kataichi\skills\L1-geo-html-screen-diff\monitor-0920-test
|
||||
|
||||
## 十二项结论
|
||||
|
||||
| 项 | 结果 |
|
||||
|---|---|
|
||||
| 1 两个 URL 能否打开 | 测试通过✅ |
|
||||
| 2 七个 AI 平台 | 测试通过✅ |
|
||||
| 3 露出率、前三率、正面率 | 测试通过✅ |
|
||||
| 4 分平台核心指标 | 测试通过✅ |
|
||||
| 5 露出排行 · 各平台明细 | 测试通过✅ |
|
||||
| 6 正面词、负面词 | 测试通过✅ |
|
||||
| 7 信源内容类型 | 测试通过✅ |
|
||||
| 8 信源发布时间 | 测试通过✅ |
|
||||
| 9 媒体类型前 10 | 测试通过✅ |
|
||||
| 10 媒体名称前 10 | 测试通过✅ |
|
||||
| 11 关联信源标题、渠道、被引次数 | 测试通过✅ |
|
||||
| 12 关联信源标题序号 | 测试通过✅ |
|
||||
|
||||
## 1. 页面打开 测试通过✅
|
||||
|
||||
两个 URL 都能打开。HTML 页头监测日期对应 2026-09-20,项目为 竞品对比。平台页监测周期为 9月 W38。
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
## 2. 七个 AI 平台 测试通过✅
|
||||
|
||||
综合=全平台,通义=通义千问,元宝=腾讯元宝,文心=百度文心;DeepSeek、豆包、Kimi 两边写法相同。
|
||||
|
||||
## 3. 露出率、前三率、正面率 测试通过✅
|
||||
|
||||
7 个平台相同。综合为 86.2% / 82.2% / 89.1%。
|
||||
|
||||
综合、DeepSeek、豆包、通义、元宝、文心、Kimi:画面上同名占比无差异。
|
||||
|
||||
## 4. 分平台核心指标 测试通过✅
|
||||
|
||||
HTML 各平台 self/趋势最新点对平台 snapshot 分平台三项。综合覆盖六个平台的这三个点。
|
||||
|
||||
综合、DeepSeek、豆包、通义、元宝、文心、Kimi:画面上同名占比无差异。
|
||||
|
||||
## 5. 露出排行 · 各平台明细 测试通过✅
|
||||
|
||||
HTML「行业露出率排行榜」对平台「露出排行 · 各平台明细」。只比 Top 10。两边按平均露出率降序取 Top 10。
|
||||
|
||||
### 5.1 综合平均露出率对全平台列 测试通过✅
|
||||
|
||||
Top 10 同名露出率无差异。
|
||||
|
||||
### 5.2 综合 Top 10 名次和品牌名 测试通过✅
|
||||
|
||||
| 排名 | HTML 综合 | 平台全平台 |
|
||||
|---|---|---|
|
||||
| 1 | 卡泰驰 | 卡泰驰 |
|
||||
| 2 | 帅车 | 帅车 |
|
||||
| 3 | 汽车之家 | 汽车之家 |
|
||||
| 4 | 查博士 | 查博士 |
|
||||
| 5 | 58同城 | 58同城 |
|
||||
| 6 | 车王 | 车王 |
|
||||
| 7 | 瓜子二手车 | 瓜子二手车 |
|
||||
| 8 | 澳康达 | 澳康达 |
|
||||
| 9 | 优信二手车 | 优信二手车 |
|
||||
| 10 | 懂车帝 | 懂车帝 |
|
||||
|
||||
### 5.3 Top10 品牌分平台露出率 测试通过✅
|
||||
|
||||
DeepSeek、豆包、通义、元宝、文心、Kimi:画面上同名占比无差异。
|
||||
|
||||
## 6. 正面词、负面词 测试通过✅
|
||||
|
||||
文案约定:AI 回答关键词=AI 认知词云;正面关键词=正面词;未监测到负面词=中正面率100%,暂无负面词。
|
||||
|
||||
正面词条相同(20 个)。负面词条相同(20 个)。
|
||||
|
||||
## 7. 信源内容类型 测试通过✅
|
||||
|
||||
综合:画面上同名占比无差异。
|
||||
|
||||
DeepSeek:画面上同名占比无差异。
|
||||
|
||||
豆包:画面上同名占比无差异。
|
||||
|
||||
通义:画面上同名占比无差异。
|
||||
|
||||
元宝:画面上同名占比无差异。
|
||||
|
||||
文心:画面上同名占比无差异。
|
||||
|
||||
Kimi:画面上同名占比无差异。
|
||||
|
||||
## 8. 信源发布时间 测试通过✅
|
||||
|
||||
综合:画面上同名占比无差异。
|
||||
|
||||
DeepSeek:画面上同名占比无差异。
|
||||
|
||||
豆包:画面上同名占比无差异。
|
||||
|
||||
通义:画面上同名占比无差异。
|
||||
|
||||
元宝:画面上同名占比无差异。
|
||||
|
||||
文心:画面上同名占比无差异。
|
||||
|
||||
Kimi:画面上同名占比无差异。
|
||||
|
||||
## 9. 媒体类型前 10 测试通过✅
|
||||
|
||||
综合:画面上同名占比无差异。
|
||||
|
||||
DeepSeek:画面上同名占比无差异。
|
||||
|
||||
豆包:画面上同名占比无差异。
|
||||
|
||||
通义:画面上同名占比无差异。
|
||||
|
||||
元宝:画面上同名占比无差异。
|
||||
|
||||
文心:画面上同名占比无差异。
|
||||
|
||||
Kimi:画面上同名占比无差异。
|
||||
|
||||
## 10. 媒体名称前 10 测试通过✅
|
||||
|
||||
综合:画面上同名占比无差异。
|
||||
|
||||
DeepSeek:画面上同名占比无差异。
|
||||
|
||||
豆包:画面上同名占比无差异。
|
||||
|
||||
通义:画面上同名占比无差异。
|
||||
|
||||
元宝:画面上同名占比无差异。
|
||||
|
||||
文心:画面上同名占比无差异。
|
||||
|
||||
Kimi:画面上同名占比无差异。
|
||||
|
||||
## 11. 关联信源标题、渠道、被引次数 测试通过✅
|
||||
|
||||
按标题对齐,不比序号。只取前 30。
|
||||
|
||||
七个平台:标题集合及渠道、被引次数相同。
|
||||
|
||||
## 12. 关联信源标题序号 测试通过✅
|
||||
|
||||
比画面序号上的标题。平台按 cite_count 降序稳定排序。
|
||||
|
||||
七个平台:前 30 序号标题相同。
|
||||
|
||||