Files
firefrost-services/scripts/sync-tiktok.sh
Claude 274edccf8a Add post_title to TikTok sync
- Request title field from TikTok API
- Truncate to 80 chars for clean display
- Send post_title in sync payload

Chronicler #76
2026-04-10 22:18:14 +00:00

112 lines
3.8 KiB
Bash

#!/bin/bash
# /opt/scripts/sync-tiktok.sh
# TikTok analytics sync for Firefrost Gaming
set -e
TOKEN_FILE="/opt/scripts/.tiktok-tokens"
ARBITER_URL="https://discord-bot.firefrostgaming.com/api/internal/social"
ARBITER_TOKEN="6fYF1akCRW6pM2F8n3S3RxeIod4YgRniUJNEQurvBP4="
CLIENT_KEY="sbawse6t5serp8xdqp"
CLIENT_SECRET="Ib24OixwLnjZbB8KXAUcYn6ewM60KKDp"
if [ -f "$TOKEN_FILE" ]; then
source "$TOKEN_FILE"
else
echo "ERROR: Token file not found at $TOKEN_FILE"
exit 1
fi
refresh_token() {
echo "Refreshing TikTok access token..."
RESPONSE=$(curl -s -X POST 'https://open.tiktokapis.com/v2/oauth/token/' \
-H 'Content-Type: application/x-www-form-urlencoded' \
-d "client_key=$CLIENT_KEY" \
-d "client_secret=$CLIENT_SECRET" \
-d "refresh_token=$REFRESH_TOKEN" \
-d 'grant_type=refresh_token')
NEW_ACCESS=$(echo "$RESPONSE" | jq -r '.access_token // empty')
NEW_REFRESH=$(echo "$RESPONSE" | jq -r '.refresh_token // empty')
if [ -z "$NEW_ACCESS" ]; then
echo "ERROR: Token refresh failed"
echo "$RESPONSE"
exit 1
fi
ACCESS_TOKEN="$NEW_ACCESS"
[ -n "$NEW_REFRESH" ] && REFRESH_TOKEN="$NEW_REFRESH"
cat > "$TOKEN_FILE" << TOKENS
ACCESS_TOKEN="$ACCESS_TOKEN"
REFRESH_TOKEN="$REFRESH_TOKEN"
TOKENS
chmod 600 "$TOKEN_FILE"
echo " Token refreshed"
}
sync_account_stats() {
echo "Syncing account stats..."
RESPONSE=$(curl -s -X GET \
'https://open.tiktokapis.com/v2/user/info/?fields=follower_count,following_count,likes_count,video_count' \
-H "Authorization: Bearer $ACCESS_TOKEN")
FOLLOWERS=$(echo "$RESPONSE" | jq -r '.data.user.follower_count // 0')
FOLLOWING=$(echo "$RESPONSE" | jq -r '.data.user.following_count // 0')
LIKES=$(echo "$RESPONSE" | jq -r '.data.user.likes_count // 0')
VIDEOS=$(echo "$RESPONSE" | jq -r '.data.user.video_count // 0')
echo " Followers: $FOLLOWERS, Likes: $LIKES, Videos: $VIDEOS"
curl -s -X POST "$ARBITER_URL/snapshot" \
-H "Authorization: Bearer $ARBITER_TOKEN" \
-H "Content-Type: application/json" \
-d "{\"platform\":\"tiktok\",\"total_followers\":$FOLLOWERS}" > /dev/null
echo " Account snapshot synced"
}
sync_videos() {
echo "Syncing video stats..."
RESPONSE=$(curl -s -X POST \
'https://open.tiktokapis.com/v2/video/list/?fields=id,title,view_count,like_count,comment_count,share_count' \
-H "Authorization: Bearer $ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{"max_count": 20}')
VIDEO_COUNT=$(echo "$RESPONSE" | jq -r '.data.videos | length')
echo " Found $VIDEO_COUNT videos"
echo "$RESPONSE" | jq -c '.data.videos[]' | while read -r video; do
VID=$(echo "$video" | jq -r '.id')
# Get first 80 chars of title, escape quotes for JSON
TITLE=$(echo "$video" | jq -r '.title // "Untitled"' | head -c 80 | sed 's/"/\\"/g')
VIEWS=$(echo "$video" | jq -r '.view_count // 0')
LIKES=$(echo "$video" | jq -r '.like_count // 0')
COMMENTS=$(echo "$video" | jq -r '.comment_count // 0')
SHARES=$(echo "$video" | jq -r '.share_count // 0')
POST_URL="https://www.tiktok.com/@playfirefrost/video/$VID"
curl -s -X POST "$ARBITER_URL/sync" \
-H "Authorization: Bearer $ARBITER_TOKEN" \
-H "Content-Type: application/json" \
-d "{\"platform\":\"tiktok\",\"platform_post_id\":\"$VID\",\"post_title\":\"$TITLE\",\"post_url\":\"$POST_URL\",\"metrics\":{\"views\":$VIEWS,\"likes\":$LIKES,\"comments\":$COMMENTS,\"shares\":$SHARES}}" > /dev/null
echo " $VID: $VIEWS views, $LIKES likes"
done
echo " Videos synced"
}
echo "=== TikTok Sync $(date) ==="
refresh_token
sync_account_stats
sync_videos
echo "=== Complete ==="