# coding=utf-8 """ AI 分析结果格式化模块 将 AI 分析结果格式化为各推送渠道的样式 """ import html as html_lib from .analyzer import AIAnalysisResult def _escape_html(text: str) -> str: """转义 HTML 特殊字符,防止 XSS 攻击""" return html_lib.escape(text) if text else "" def render_ai_analysis_markdown(result: AIAnalysisResult) -> str: """渲染为通用 Markdown 格式(Telegram、企业微信、ntfy、Bark、Slack)""" if not result.success: return f"⚠️ AI 分析失败: {result.error}" lines = ["**✨ AI 热点分析**", ""] if result.summary: lines.extend(["**趋势概述**", result.summary, ""]) if result.keyword_analysis: lines.extend(["**热度走势**", result.keyword_analysis, ""]) if result.sentiment: lines.extend(["**情感倾向**", result.sentiment, ""]) if result.cross_platform: lines.extend(["**跨平台关联**", result.cross_platform, ""]) if result.impact: lines.extend(["**潜在影响**", result.impact, ""]) if result.signals: lines.extend(["**值得关注**", result.signals, ""]) if result.conclusion: lines.extend(["**总结建议**", result.conclusion]) return "\n".join(lines) def render_ai_analysis_feishu(result: AIAnalysisResult) -> str: """渲染为飞书卡片 Markdown 格式""" if not result.success: return f"⚠️ AI 分析失败: {result.error}" lines = ["**✨ AI 热点分析**", ""] if result.summary: lines.extend(["**趋势概述**", result.summary, ""]) if result.keyword_analysis: lines.extend(["**热度走势**", result.keyword_analysis, ""]) if result.sentiment: lines.extend(["**情感倾向**", result.sentiment, ""]) if result.cross_platform: lines.extend(["**跨平台关联**", result.cross_platform, ""]) if result.impact: lines.extend(["**潜在影响**", result.impact, ""]) if result.signals: lines.extend(["**值得关注**", result.signals, ""]) if result.conclusion: lines.extend(["**总结建议**", result.conclusion]) return "\n".join(lines) def render_ai_analysis_dingtalk(result: AIAnalysisResult) -> str: """渲染为钉钉 Markdown 格式""" if not result.success: return f"⚠️ AI 分析失败: {result.error}" lines = ["### ✨ AI 热点分析", ""] if result.summary: lines.extend(["#### 趋势概述", result.summary, ""]) if result.keyword_analysis: lines.extend(["#### 热度走势", result.keyword_analysis, ""]) if result.sentiment: lines.extend(["#### 情感倾向", result.sentiment, ""]) if result.cross_platform: lines.extend(["#### 跨平台关联", result.cross_platform, ""]) if result.impact: lines.extend(["#### 潜在影响", result.impact, ""]) if result.signals: lines.extend(["#### 值得关注", result.signals, ""]) if result.conclusion: lines.extend(["#### 总结建议", result.conclusion]) return "\n".join(lines) def render_ai_analysis_html(result: AIAnalysisResult) -> str: """渲染为 HTML 格式(邮件)""" if not result.success: return f'
{_escape_html(result.summary)}
', '{_escape_html(result.keyword_analysis)}
', '{_escape_html(result.sentiment)}
', '{_escape_html(result.cross_platform)}
', '{_escape_html(result.impact)}
', '{_escape_html(result.signals)}
', '{_escape_html(result.conclusion)}
', '