Files
nanocode/skills/xiaohongshu_integration/weekly_data_analysis.sh
T
Ubuntu 32b43f85bd a
2026-07-03 16:58:28 +08:00

153 lines
4.9 KiB
Bash
Executable File

#!/bin/bash
# 每周数据分析脚本
# 每周一09:00执行,生成周报并发送到QQBot
echo "============================================================"
echo "📊 小红书数据周报分析"
echo "============================================================"
echo "执行时间: $(date '+%Y-%m-%d %H:%M:%S')"
echo ""
WORK_DIR="/home/ubuntu/.nanobot/workspace/skills/xiaohongshu_integration"
cd "$WORK_DIR" || exit 1
# 日志文件
LOG_DIR="/home/ubuntu/.nanobot/workspace/xiaohongshu_logs"
mkdir -p "$LOG_DIR"
LOG_FILE="$LOG_DIR/weekly_analysis_$(date '+%Y%m%d_%H%M%S').log"
log() {
local timestamp=$(date '+%Y-%m-%d %H:%M:%S')
local message="[$timestamp] $1"
echo "$message"
echo "$message" >> "$LOG_FILE"
}
log "开始每周数据分析"
# 1. 生成周报
log "1. 生成7天数据周报..."
WEEKLY_REPORT=$(python3 data_analyzer.py report --days 7 2>&1)
REPORT_EXIT_CODE=$?
if [ $REPORT_EXIT_CODE -eq 0 ]; then
log "✅ 周报生成成功"
# 保存周报到文件
REPORT_FILE="$LOG_DIR/weekly_report_$(date '+%Y%m%d').txt"
echo "$WEEKLY_REPORT" > "$REPORT_FILE"
log "周报已保存: $REPORT_FILE"
# 2. 发送周报到QQBot
log "2. 发送周报到QQBot..."
python3 qqbot_integration.py report "$REPORT_FILE" >> "$LOG_FILE" 2>&1
QQ_REPORT_EXIT_CODE=$?
if [ $QQ_REPORT_EXIT_CODE -eq 0 ]; then
log "✅ 周报已发送到QQBot"
else
log "⚠️ 发送周报到QQBot失败"
fi
else
log "❌ 周报生成失败"
echo "$WEEKLY_REPORT" >> "$LOG_FILE"
fi
# 3. 生成月报(每月第一天)
DAY_OF_MONTH=$(date '+%d')
if [ "$DAY_OF_MONTH" = "01" ]; then
log "3. 生成30天数据月报..."
MONTHLY_REPORT=$(python3 data_analyzer.py report --days 30 2>&1)
if [ $? -eq 0 ]; then
MONTHLY_FILE="$LOG_DIR/monthly_report_$(date '+%Y%m').txt"
echo "$MONTHLY_REPORT" > "$MONTHLY_FILE"
log "✅ 月报已保存: $MONTHLY_FILE"
# 发送月报到QQBot
log "发送月报到QQBot..."
python3 qqbot_integration.py report "$MONTHLY_FILE" >> "$LOG_FILE" 2>&1
else
log "❌ 月报生成失败"
fi
else
log "3. 跳过月报生成(非每月第一天)"
fi
# 4. 检查A/B测试待处理数据
log "4. 检查A/B测试待处理数据..."
PENDING_TESTS=$(python3 image_ab_test.py check 2>&1)
if echo "$PENDING_TESTS" | grep -q "待检查"; then
log "⚠️ 发现待处理的A/B测试"
echo "$PENDING_TESTS" >> "$LOG_FILE"
# 发送提醒
ALERT_MESSAGE="发现待处理的A/B测试数据,需要手动检查互动效果"
python3 -c "
import sys
sys.path.append('.')
from qqbot_integration import QQBotIntegration
qqbot = QQBotIntegration()
qqbot.send_cookie_alert('DAILY_REPORT', '$ALERT_MESSAGE', {
'检查时间': '$(date '+%Y-%m-%d %H:%M:%S')',
'提醒类型': 'A/B测试数据待处理',
'建议': '运行: python3 image_ab_test.py check'
})
" >> "$LOG_FILE" 2>&1
else
log "✅ 无待处理的A/B测试"
fi
# 5. 生成A/B测试报告
log "5. 生成A/B测试报告..."
AB_TEST_REPORT=$(python3 image_ab_test.py report --days 7 2>&1)
if [ $? -eq 0 ]; then
AB_TEST_FILE="$LOG_DIR/ab_test_report_$(date '+%Y%m%d').txt"
echo "$AB_TEST_REPORT" > "$AB_TEST_FILE"
log "✅ A/B测试报告已保存: $AB_TEST_FILE"
# 如果数据足够,发送简要报告
if echo "$AB_TEST_REPORT" | grep -q "测试数" && echo "$AB_TEST_REPORT" | grep -q "测试数: [0-9]" && [ $(echo "$AB_TEST_REPORT" | grep -o "测试数: [0-9]*" | grep -o "[0-9]*") -gt 5 ]; then
BRIEF_REPORT="📊 A/B测试周报摘要\n"
BRIEF_REPORT+=$(echo "$AB_TEST_REPORT" | grep -A5 "推荐风格" | head -10)
python3 -c "
import sys
sys.path.append('.')
from qqbot_integration import QQBotIntegration
qqbot = QQBotIntegration()
qqbot.send_cookie_alert('DAILY_REPORT', '$BRIEF_REPORT', {
'报告类型': 'A/B测试周报',
'数据周期': '7天'
})
" >> "$LOG_FILE" 2>&1
fi
else
log "⚠️ A/B测试报告生成失败"
fi
# 6. 清理旧数据
log "6. 清理旧数据..."
find "$LOG_DIR" -name "*.log" -type f -mtime +90 -delete 2>/dev/null || true
find "$LOG_DIR" -name "weekly_report_*.txt" -type f -mtime +30 -delete 2>/dev/null || true
find "$LOG_DIR" -name "monthly_report_*.txt" -type f -mtime +180 -delete 2>/dev/null || true
find "/home/ubuntu/.nanobot/workspace/xiaohongshu_analysis" -name "*.png" -type f -mtime +30 -delete 2>/dev/null || true
log "旧数据清理完成"
echo ""
echo "============================================================"
echo "🎯 每周数据分析完成"
echo "============================================================"
echo "日志文件: $LOG_FILE"
echo "周报文件: $REPORT_FILE"
if [ "$DAY_OF_MONTH" = "01" ]; then
echo "月报文件: $MONTHLY_FILE"
fi
echo "A/B测试报告: $AB_TEST_FILE"
echo "下次执行: 下周一09:00"
echo "============================================================"
exit 0