-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathworkflow.sh
More file actions
executable file
·175 lines (134 loc) · 7.88 KB
/
workflow.sh
File metadata and controls
executable file
·175 lines (134 loc) · 7.88 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
#!/bin/bash
# 公众号文章生成完整工作流
# 包含:生成 → 审稿 → 重写 → 转HTML → 二次审稿 → 自我学习
set -e # 遇到错误立即退出
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
cd "$SCRIPT_DIR"
# 加载环境变量
if [ -f "config/getnote.env" ]; then
source config/getnote.env
fi
# 颜色输出
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
echo -e "${BLUE}======================================================================${NC}"
echo -e "${BLUE}🚀 公众号文章自动化生成工作流${NC}"
echo -e "${BLUE}======================================================================${NC}\n"
# 解析参数
TOPIC="$1"
CATEGORY="${2:-职场}"
WORD_COUNT="${3:-2000}"
SKIP_IMAGES="${4:-false}"
if [ -z "$TOPIC" ]; then
echo -e "${RED}❌ 使用方法: $0 <主题> [分类] [字数] [skip_images]${NC}"
echo -e "\n示例:"
echo -e " $0 \"职场沟通技巧\" 职场 2000"
echo -e " $0 \"时间管理\" 效率 1500 true\n"
exit 1
fi
echo -e "${GREEN}📋 工作流配置:${NC}"
echo -e " 主题: ${TOPIC}"
echo -e " 分类: ${CATEGORY}"
echo -e " 字数: ${WORD_COUNT}"
echo -e " 生成配图: $([ "$SKIP_IMAGES" = "true" ] && echo "否" || echo "是")\n"
# ============ 步骤 1: 生成初稿 ============
echo -e "${YELLOW}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}"
echo -e "${YELLOW}📝 步骤 1/6: 生成初稿${NC}"
echo -e "${YELLOW}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}\n"
python main.py "$TOPIC" -c "$CATEGORY" -w "$WORD_COUNT" --no-feishu
# 找到最新生成的 HTML 文件
LATEST_HTML=$(ls -t output/article_*.html 2>/dev/null | head -1)
if [ -z "$LATEST_HTML" ]; then
echo -e "${RED}❌ 未找到生成的文章${NC}"
exit 1
fi
echo -e "\n${GREEN}✅ 初稿生成完成: $LATEST_HTML${NC}\n"
# ============ 步骤 2: 首次审稿 ============
echo -e "${YELLOW}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}"
echo -e "${YELLOW}🔍 步骤 2/6: 首次审稿${NC}"
echo -e "${YELLOW}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}\n"
python editor_review.py "$LATEST_HTML"
REVIEW_FILE="${LATEST_HTML%.html}_review.md"
if [ ! -f "$REVIEW_FILE" ]; then
echo -e "${RED}❌ 审稿报告未生成${NC}"
exit 1
fi
# 提取分数
SCORE=$(grep "总分" "$REVIEW_FILE" | grep -oE '[0-9]+' | head -1)
echo -e "\n${BLUE}📊 首次评分: ${SCORE}/100${NC}\n"
# 判断是否需要重写
if [ "$SCORE" -lt 70 ]; then
echo -e "${YELLOW}⚠️ 分数低于70,需要重写${NC}\n"
NEED_REWRITE=true
elif [ "$SCORE" -lt 85 ]; then
echo -e "${YELLOW}⚠️ 分数低于85,建议重写${NC}\n"
NEED_REWRITE=true
else
echo -e "${GREEN}✅ 分数优秀,可直接发布${NC}\n"
NEED_REWRITE=false
fi
# ============ 步骤 3: 基于审稿重写 ============
if [ "$NEED_REWRITE" = true ]; then
echo -e "${YELLOW}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}"
echo -e "${YELLOW}✍️ 步骤 3/6: 基于审稿重写${NC}"
echo -e "${YELLOW}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}\n"
python rewrite_with_persona.py "$REVIEW_FILE" "$LATEST_HTML"
REWRITTEN_MD="${LATEST_HTML%.html}_rewritten.md"
if [ ! -f "$REWRITTEN_MD" ]; then
echo -e "${RED}❌ 重写文件未生成${NC}"
exit 1
fi
echo -e "\n${GREEN}✅ 重写完成: $REWRITTEN_MD${NC}\n"
# ============ 步骤 4: 转换为 HTML ============
echo -e "${YELLOW}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}"
echo -e "${YELLOW}🔄 步骤 4/6: 转换为 HTML 并配图${NC}"
echo -e "${YELLOW}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}\n"
if [ "$SKIP_IMAGES" = "true" ]; then
python md_to_html.py "$REWRITTEN_MD" --no-images
else
python md_to_html.py "$REWRITTEN_MD"
fi
FINAL_HTML="${REWRITTEN_MD%.md}_final.html"
if [ ! -f "$FINAL_HTML" ]; then
echo -e "${RED}❌ HTML 文件未生成${NC}"
exit 1
fi
echo -e "\n${GREEN}✅ HTML 生成完成: $FINAL_HTML${NC}\n"
# ============ 步骤 5: 二次审稿 ============
echo -e "${YELLOW}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}"
echo -e "${YELLOW}🔍 步骤 5/6: 二次审稿${NC}"
echo -e "${YELLOW}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}\n"
python editor_review.py "$FINAL_HTML"
FINAL_REVIEW="${FINAL_HTML%.html}_review.md"
FINAL_SCORE=$(grep "总分" "$FINAL_REVIEW" | grep -oE '[0-9]+' | head -1)
echo -e "\n${BLUE}📊 二次评分: ${FINAL_SCORE}/100${NC}"
echo -e "${GREEN}📈 分数提升: +$((FINAL_SCORE - SCORE)) 分${NC}\n"
# ============ 步骤 6: 自我学习 ============
echo -e "${YELLOW}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}"
echo -e "${YELLOW}🧠 步骤 6/6: 自我学习与优化${NC}"
echo -e "${YELLOW}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}\n"
python self_learning.py "$FINAL_REVIEW"
echo -e "\n${GREEN}✅ 自我学习完成,配置已更新${NC}\n"
RESULT_FILE="$FINAL_HTML"
else
RESULT_FILE="$LATEST_HTML"
fi
# ============ 完成 ============
echo -e "${GREEN}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}"
echo -e "${GREEN}🎉 工作流执行完成!${NC}"
echo -e "${GREEN}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}\n"
echo -e "${BLUE}📁 最终文件: ${NC}$RESULT_FILE"
echo -e "${BLUE}📊 最终评分: ${NC}${FINAL_SCORE:-$SCORE}/100\n"
echo -e "${YELLOW}💡 下一步操作:${NC}"
echo -e " 1. 预览文章: ${GREEN}open $RESULT_FILE${NC}"
echo -e " 2. 查看检查清单: ${GREEN}cat config/pre_publish_checklist.md${NC}"
echo -e " 3. 查看学习日志: ${GREEN}tail -1 config/learning_log.jsonl | jq${NC}\n"
# 自动打开预览(可选)
read -p "是否打开预览?(y/n) " -n 1 -r
echo
if [[ $REPLY =~ ^[Yy]$ ]]; then
open "$RESULT_FILE"
fi