server酱+vps,打造抖音用户视频更新监控系统!

适用于 Ubuntu/CentOS/Debian 等主流 Linux 发行版。


:books: 抖音用户视频更新监控系统

:white_check_mark: 微信推送 | :white_check_mark: 自动清理日志 | :white_check_mark: systemd 托管


:toolbox: 一、准备工作

1. 准备事项

# 安装依赖(Ubuntu/Debian)
sudo apt update && sudo apt install -y curl jq

# CentOS/RHEL
sudo yum install -y curl jq

:file_folder: 二、创建项目目录与脚本

# 创建项目目录
sudo mkdir -p /opt/douyin_monitor/log
sudo mkdir -p /opt/douyin_monitor/state

# 创建用户配置文件
sudo tee /opt/douyin_monitor/users.conf << 'EOF'
# 格式:sec_user_id|昵称
MS4wLjABAAAAL6z-C5MVaIclPFu9sugIIc3-NlH6v0V4uPu_Xtvte4M|阿直
MS4wLjABAAAA4MjTvxSsNOjHfi9kfyRdu0KMKRHA1dPNv1WQQwW0OKY|阿Z想开了
MSxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx|需要监听用户昵称
EOF

:repeat_button: 每行一个用户:sec_user_id|昵称,支持注释 #


:scroll: 三、部署主监控脚本

sudo tee /opt/douyin_monitor/douyin_monitor.sh << 'EOF'
#!/bin/bash

# ========================================
# 抖音多用户视频更新监听脚本(15-40秒动态间隔检测)
# ========================================

# =================== 配置区域 ===================
API_URL="http://your-server-ip/api/douyin/web/fetch_user_post_videos"
SENDKEY="SCTxxxxxxxxxxxxxxxxxxxxxxxxx"  # 替换为你的 Server酱 SendKey
COUNT=10
MAX_CURSOR=0

# 路径配置
WORK_DIR="/opt/douyin_monitor"
USERS_CONF="$WORK_DIR/users.conf"
STATE_DIR="$WORK_DIR/state"
LOG_FILE="$WORK_DIR/log/monitor.log"

# 创建必要目录
mkdir -p "$STATE_DIR" "$WORK_DIR/log"

# =================== 日志函数 ===================
log() {
    echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" | tee -a "$LOG_FILE"
}

# =================== 推送通知 ===================
send_notification() {
    local title="$1"
    local content="$2"
    local url="https://sctapi.ftqq.com/${SENDKEY}.send"

    curl -s -X POST "$url" \
        -d "title=${title}" \
        -d "desp=${content}" \
        >> "$LOG_FILE" 2>&1
}

# =================== 检查用户更新 ===================
check_user() {
    local sec_user_id="$1"
    local nickname="$2"

    log "正在检查用户: $nickname (sec_user_id: $sec_user_id)"

    local response
    response=$(curl -s -G \
        --data-urlencode "sec_user_id=$sec_user_id" \
        --data-urlencode "max_cursor=$MAX_CURSOR" \
        --data-urlencode "count=$COUNT" \
        "$API_URL")

    if ! echo "$response" | jq -e '.code == 200' >/dev/null; then
        log "❌ 接口请求失败($nickname): $(echo "$response" | jq -r '.msg // "unknown"')"
        return 1
    fi

    local latest_aweme
    latest_aweme=$(echo "$response" | jq -r '
        .data.aweme_list[]?
        | select(.create_time != null and .aweme_id != null)
        | select(.is_top != 1)
        | .create_time |= tonumber
        | .
    ' 2>/dev/null | \
    jq -s 'sort_by(-.create_time) | .[0] // empty' 2>&1)

    if [ -z "$latest_aweme" ] || [ "$latest_aweme" = "null" ]; then
        log "⚠️ 未获取到有效非置顶视频数据($nickname)"
        return 1
    fi

    local new_aweme_id=$(echo "$latest_aweme" | jq -r '.aweme_id')
    local title=$(echo "$latest_aweme" | jq -r '.item_title // .desc // "无标题"')
    local create_time=$(echo "$latest_aweme" | jq -r '.create_time')
    local time_str=$(date -d "@$create_time" "+%Y-%m-%d %H:%M")

    local state_file="$STATE_DIR/${sec_user_id}.txt"
    local last_id=""
    [ -f "$state_file" ] && last_id=$(cat "$state_file")

    if [ -z "$last_id" ]; then
        log "🆕 首次记录用户 $nickname,最新非置顶视频: $new_aweme_id"
        echo "$new_aweme_id" > "$state_file"
        return 0
    fi

    if [ "$new_aweme_id" != "$last_id" ]; then
        log "🎉 检测到新视频!用户: $nickname,ID: $new_aweme_id"

        local desp="
🎉 **新视频发布**  
👤 **用户**:$nickname  
📌 **标题**:$title  
📅 **时间**:$time_str  
🔗 [▶️ 点击观看视频](https://www.douyin.com/video/$new_aweme_id)  

---
✨ *douyin_monitor | 自动推送*
        "

        send_notification "📹 $nickname 发布新视频" "$desp"
        echo "$new_aweme_id" > "$state_file"
    else
        log "✅ $nickname 无新视频"
    fi
}

# =================== 主循环 ===================
main() {
    log "✅ 开始监控抖音用户更新(随机间隔 15-45 秒)"

    while true; do
        while IFS='|' read -r sec_user_id nickname || [ -n "$sec_user_id" ]; do
            [[ -z "$sec_user_id" || "$sec_user_id" =~ ^[[:space:]]*# ]] && continue
            check_user "$sec_user_id" "$nickname"
            sleep $((3 + RANDOM % 6))
        done < "$USERS_CONF"

        local sleep_time=$((15 + RANDOM % 31))
        log "💤 本轮检测完成,等待 $sleep_time 秒后重新检测..."
        sleep "$sleep_time"
    done
}

main
EOF

设置可执行权限

sudo chmod +x /opt/douyin_monitor/douyin_monitor.sh

:gear: 四、配置 systemd 服务(开机自启)

sudo tee /etc/systemd/system/douyin-monitor.service << 'EOF'
[Unit]
Description=抖音用户视频更新监控服务
After=network.target

[Service]
Type=simple
User=root
WorkingDirectory=/opt/douyin_monitor
ExecStart=/bin/bash /opt/douyin_monitor/douyin_monitor.sh
Restart=always
RestartSec=10

[Install]
WantedBy=multi-user.target
EOF

启用服务

# 重载 systemd
sudo systemctl daemon-reexec
sudo systemctl daemon-reload

# 启用并启动服务
sudo systemctl enable douyin-monitor.service
sudo systemctl start douyin-monitor.service

:broom: 五、配置日志自动清理(每日轮转)

sudo tee /etc/logrotate.d/douyin-monitor << 'EOF'
/opt/douyin_monitor/log/monitor.log {
    daily
    missingok
    rotate 7
    compress
    delaycompress
    notifempty
    copytruncate
    su root root
}
EOF

:white_check_mark: 系统通过 systemd timer 自动运行 logrotate,无需额外设置


:magnifying_glass_tilted_left: 六、验证与调试

1. 查看服务状态

sudo systemctl status douyin-monitor.service

2. 查看实时日志

tail -f /opt/douyin_monitor/log/monitor.log

3. 手动触发一次日志轮转(测试)

sudo logrotate -f /etc/logrotate.conf
ls -la /opt/douyin_monitor/log/

:pushpin: 七、关键配置说明

文件 作用 注意事项
/opt/douyin_monitor/users.conf 用户列表 sec_user_id|昵称,每行一个
/opt/douyin_monitor/douyin_monitor.sh 主脚本 修改后需重启服务
/etc/systemd/system/douyin-monitor.service 服务托管 修改后需 daemon-reload
/etc/logrotate.d/douyin-monitor 日志清理 保留 7 天,自动压缩

:hammer_and_wrench: 八、常见维护命令

# 启动服务
sudo systemctl start douyin-monitor.service

# 停止服务
sudo systemctl stop douyin-monitor.service

# 重启服务
sudo systemctl restart douyin-monitor.service

# 查看状态
sudo systemctl status douyin-monitor.service

# 查看日志
tail -f /opt/douyin_monitor/log/monitor.log

# 重新加载配置(修改 service 文件后)
sudo systemctl daemon-reload

:white_check_mark: 九、功能总结

功能 是否支持 说明
监听多个抖音用户 :white_check_mark: 支持
排除置顶视频干扰 :white_check_mark: 精准识别非置顶最新
微信推送通知 :white_check_mark: 通过 Server酱
自动清理日志 :white_check_mark: 保留 7 天,自动压缩
开机自启 :white_check_mark: systemd 托管
随机检测间隔 :white_check_mark: 避免被限流

:paperclip: 十、注意事项

  1. 替换 SendKey:将 SENDKEY="SCT..." 替换为你自己的 Server酱 SendKey
  2. 获取 sec_user_id:可通过抖音分享链接解析,或使用浏览器开发者工具抓包获取
  3. 权限问题:所有文件归 root 所有,确保脚本可读写

8 个赞

学习了

1 个赞

我连抖音都没有

你刷啥

暂时不玩抖音

1 个赞

我刷mjj

学学

好帖,感觉这个挺有意思 赞

留给需要的人