run_all_with_config.sh 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240
  1. #!/bin/bash
  2. # 数据处理脚本执行脚本(支持多账号配置)
  3. # 使用方式:
  4. # 1. 处理单个账号: ./run_all_with_config.sh 阿里多多酱
  5. # 2. 处理所有启用的账号: ./run_all_with_config.sh --all
  6. # 3. 使用环境变量: ACCOUNT_NAME=阿里多多酱 ./run_all_with_config.sh
  7. set -e # 遇到错误立即退出
  8. # 获取脚本所在目录的绝对路径
  9. SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
  10. # 项目根目录
  11. PROJECT_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)"
  12. # 切换到项目根目录
  13. cd "$PROJECT_ROOT"
  14. # 颜色定义
  15. GREEN='\033[0;32m'
  16. RED='\033[0;31m'
  17. YELLOW='\033[1;33m'
  18. BLUE='\033[0;34m'
  19. NC='\033[0m' # No Color
  20. # 打印带颜色的消息
  21. print_info() {
  22. echo -e "${BLUE}[INFO]${NC} $1"
  23. }
  24. print_success() {
  25. echo -e "${GREEN}[SUCCESS]${NC} $1"
  26. }
  27. print_error() {
  28. echo -e "${RED}[ERROR]${NC} $1"
  29. }
  30. print_warning() {
  31. echo -e "${YELLOW}[WARNING]${NC} $1"
  32. }
  33. # 处理单个账号的函数
  34. process_account() {
  35. local account_name=$1
  36. echo ""
  37. echo "=========================================="
  38. echo "处理账号: $account_name"
  39. echo "=========================================="
  40. # 设置环境变量
  41. export ACCOUNT_NAME="$account_name"
  42. # 检查路径配置
  43. print_info "检查路径配置..."
  44. python script/data_processing/path_config.py "$account_name"
  45. if [ $? -ne 0 ]; then
  46. print_error "路径配置检查失败,跳过账号: $account_name"
  47. return 1
  48. fi
  49. echo ""
  50. print_info "开始处理数据..."
  51. echo ""
  52. # 步骤1: 提取特征分类映射
  53. print_info "[1/5] 正在提取特征分类映射..."
  54. python script/data_processing/extract_feature_categories.py
  55. if [ $? -eq 0 ]; then
  56. print_success "特征分类映射提取完成"
  57. else
  58. print_error "特征分类映射提取失败"
  59. return 1
  60. fi
  61. echo ""
  62. # 步骤2: 提取特征帖子来源
  63. print_info "[2/5] 正在提取特征帖子来源..."
  64. python script/data_processing/extract_features_from_posts.py
  65. if [ $? -eq 0 ]; then
  66. print_success "特征帖子来源提取完成"
  67. else
  68. print_error "特征帖子来源提取失败"
  69. return 1
  70. fi
  71. echo ""
  72. # 步骤3: 提取当前帖子解构任务列表
  73. print_info "[3/5] 正在提取当前帖子解构任务列表..."
  74. python script/data_processing/extract_current_posts.py
  75. if [ $? -eq 0 ]; then
  76. print_success "当前帖子解构任务列表提取完成"
  77. else
  78. print_error "当前帖子解构任务列表提取失败"
  79. return 1
  80. fi
  81. echo ""
  82. # 步骤4: 匹配灵感特征
  83. print_info "[4/5] 正在匹配灵感特征..."
  84. python script/data_processing/match_inspiration_features.py
  85. if [ $? -eq 0 ]; then
  86. print_success "灵感特征匹配完成"
  87. else
  88. print_error "灵感特征匹配失败"
  89. return 1
  90. fi
  91. echo ""
  92. # 步骤5: 可视化结果
  93. print_info "[5/5] 正在生成可视化结果..."
  94. python script/data_processing/visualize_how_results.py
  95. if [ $? -eq 0 ]; then
  96. print_success "可视化结果生成完成"
  97. else
  98. print_error "可视化结果生成失败"
  99. return 1
  100. fi
  101. echo ""
  102. print_success "账号 $account_name 处理完成!"
  103. return 0
  104. }
  105. # 获取所有启用的账号
  106. get_enabled_accounts() {
  107. python -c "
  108. import json
  109. from pathlib import Path
  110. config_file = Path('config/accounts.json')
  111. with open(config_file) as f:
  112. config = json.load(f)
  113. accounts = [acc['name'] for acc in config.get('accounts', []) if acc.get('enabled', True)]
  114. print(' '.join(accounts))
  115. "
  116. }
  117. # 获取默认账号
  118. get_default_account() {
  119. python -c "
  120. import json
  121. from pathlib import Path
  122. config_file = Path('config/accounts.json')
  123. with open(config_file) as f:
  124. config = json.load(f)
  125. default = config.get('default_account', '')
  126. print(default)
  127. "
  128. }
  129. # 主逻辑
  130. main() {
  131. echo "=========================================="
  132. echo "数据处理流程"
  133. echo "项目根目录: $PROJECT_ROOT"
  134. echo "=========================================="
  135. # 解析参数
  136. if [ "$1" == "--all" ]; then
  137. # 处理所有启用的账号
  138. print_info "处理所有启用的账号..."
  139. accounts=$(get_enabled_accounts)
  140. if [ -z "$accounts" ]; then
  141. print_error "没有找到启用的账号"
  142. exit 1
  143. fi
  144. print_info "找到启用的账号: $accounts"
  145. success_count=0
  146. fail_count=0
  147. for account in $accounts; do
  148. if process_account "$account"; then
  149. ((success_count++))
  150. else
  151. ((fail_count++))
  152. fi
  153. done
  154. echo ""
  155. echo "=========================================="
  156. print_info "批量处理完成"
  157. print_success "成功: $success_count 个账号"
  158. if [ $fail_count -gt 0 ]; then
  159. print_error "失败: $fail_count 个账号"
  160. fi
  161. echo "=========================================="
  162. if [ $fail_count -gt 0 ]; then
  163. exit 1
  164. fi
  165. elif [ -n "$1" ]; then
  166. # 处理指定的账号
  167. process_account "$1"
  168. elif [ -n "$ACCOUNT_NAME" ]; then
  169. # 使用环境变量指定的账号
  170. print_info "使用环境变量 ACCOUNT_NAME=$ACCOUNT_NAME"
  171. process_account "$ACCOUNT_NAME"
  172. else
  173. # 尝试使用默认账号
  174. default_account=$(get_default_account)
  175. if [ -n "$default_account" ]; then
  176. print_info "使用默认账号: $default_account"
  177. process_account "$default_account"
  178. exit $?
  179. fi
  180. # 显示用法
  181. echo "用法:"
  182. echo " 1. 处理单个账号:"
  183. echo " $0 <账号名>"
  184. echo " 例如: $0 阿里多多酱"
  185. echo ""
  186. echo " 2. 处理所有启用的账号:"
  187. echo " $0 --all"
  188. echo ""
  189. echo " 3. 使用环境变量:"
  190. echo " ACCOUNT_NAME=阿里多多酱 $0"
  191. echo ""
  192. # 显示可用账号
  193. accounts=$(get_enabled_accounts)
  194. if [ -n "$accounts" ]; then
  195. echo "当前启用的账号:"
  196. for account in $accounts; do
  197. echo " - $account"
  198. done
  199. fi
  200. exit 1
  201. fi
  202. }
  203. # 运行主函数
  204. main "$@"