适用于 Ubuntu/CentOS/Debian 等主流 Linux 发行版。
抖音用户视频更新监控系统
微信推送 |
自动清理日志 |
systemd 托管
一、准备工作
1. 准备事项
-
一台vps并且部署好GitHub Evil0ctal大佬的 Douyin TikTok Download API项目 Evil0ctal/Douyin_TikTok_Download_API:
「Douyin_TikTok_Download_API」是一个开箱即用的高性能异步抖音、快手、TikTok、Bilibili数据爬取工具,支持API调用,在线批量解析及下载。 -
一个Server酱 账号并获取到SendKey
# 安装依赖(Ubuntu/Debian)
sudo apt update && sudo apt install -y curl jq
# CentOS/RHEL
sudo yum install -y curl jq
二、创建项目目录与脚本
# 创建项目目录
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
每行一个用户:
sec_user_id|昵称,支持注释#
三、部署主监控脚本
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
四、配置 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
五、配置日志自动清理(每日轮转)
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
系统通过
systemd timer自动运行 logrotate,无需额外设置
六、验证与调试
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/
七、关键配置说明
| 文件 | 作用 | 注意事项 |
|---|---|---|
/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 天,自动压缩 |
八、常见维护命令
# 启动服务
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
九、功能总结
| 功能 | 是否支持 | 说明 |
|---|---|---|
| 监听多个抖音用户 | 支持 | |
| 排除置顶视频干扰 | 精准识别非置顶最新 | |
| 微信推送通知 | 通过 Server酱 | |
| 自动清理日志 | 保留 7 天,自动压缩 | |
| 开机自启 | systemd 托管 | |
| 随机检测间隔 | 避免被限流 |
十、注意事项
- 替换 SendKey:将
SENDKEY="SCT..."替换为你自己的 Server酱 SendKey - 获取 sec_user_id:可通过抖音分享链接解析,或使用浏览器开发者工具抓包获取
- 权限问题:所有文件归
root所有,确保脚本可读写