Vous n'avez pas besoin d'être propriétaire du compte pour analyser les métriques publiques TikTok. L'API Scavio TikTok vous permet d'extraire n'importe quel profil public et ses publications récentes pour calculer les taux d'engagement, la fréquence de publication, les indicateurs de croissance de l'audience et les tendances de performance du contenu. Chaque appel coûte 0,005 $, ce qui rend un audit complet du compte à moins de 0,02 $.
Prérequis
- Python 3.8+
- bibliothèque requests
- Une clé API Scavio depuis scavio.dev
- Noms d'utilisateur TikTok cibles à analyser
Parcours
Étape 1: Récupérer les données du profil public
Extraire les métriques du profil pour n'importe quel compte TikTok public.
import os, requests, json
from datetime import datetime
API_KEY = os.environ['SCAVIO_API_KEY']
TH = {'Authorization': f'Bearer {API_KEY}', 'Content-Type': 'application/json'}
def get_profile(username):
data = requests.post('https://api.scavio.dev/api/v1/tiktok/profile',
headers=TH, json={'username': username}).json()
user = data.get('user', data.get('data', {}).get('user', data))
return {
'username': username,
'followers': user.get('followerCount', user.get('fans', 0)),
'following': user.get('followingCount', 0),
'likes': user.get('heartCount', user.get('heart', 0)),
'videos': user.get('videoCount', 0),
'verified': user.get('verified', False),
'bio': user.get('signature', '')[:100],
'sec_uid': user.get('secUid', '')
}
profile = get_profile('charlidamelio')
for k, v in profile.items():
if k != 'sec_uid':
val = f'{v:,}' if isinstance(v, int) else v
print(f' {k}: {val}')Étape 2: Analyser la performance des publications récentes
Récupérer les publications récentes et calculer les métriques d'engagement.
def get_posts(sec_uid):
data = requests.post('https://api.scavio.dev/api/v1/tiktok/user/posts',
headers=TH, json={'sec_user_id': sec_uid}).json()
posts = data.get('videos', data.get('data', {}).get('videos', []))
return [{'desc': p.get('desc', '')[:60],
'plays': p.get('stats', {}).get('playCount', 0),
'likes': p.get('stats', {}).get('diggCount', 0),
'comments': p.get('stats', {}).get('commentCount', 0),
'shares': p.get('stats', {}).get('shareCount', 0),
'created': p.get('createTime', 0)} for p in posts]
def analyze_engagement(posts, followers):
if not posts or not followers:
return {}
total_eng = sum(p['likes'] + p['comments'] + p['shares'] for p in posts)
total_plays = sum(p['plays'] for p in posts)
avg_plays = total_plays / len(posts)
avg_likes = sum(p['likes'] for p in posts) / len(posts)
er = total_eng / total_plays * 100 if total_plays else 0
follower_er = total_eng / (followers * len(posts)) * 100
return {
'avg_plays': int(avg_plays), 'avg_likes': int(avg_likes),
'engagement_rate': round(er, 2), 'follower_er': round(follower_er, 2),
'total_posts_analyzed': len(posts)
}
posts = get_posts(profile['sec_uid'])
metrics = analyze_engagement(posts, profile['followers'])
for k, v in metrics.items():
print(f' {k}: {v:,}' if isinstance(v, int) else f' {k}: {v}')Étape 3: Calculer la fréquence de publication et les tendances
Déterminer la fréquence de publication du compte et identifier les tendances de timing.
from datetime import datetime
def posting_patterns(posts):
if len(posts) < 2:
return {}
timestamps = sorted([p['created'] for p in posts if p['created']])
if not timestamps:
return {}
# Calculate posting frequency
time_span_days = (timestamps[-1] - timestamps[0]) / 86400 if len(timestamps) > 1 else 1
freq = len(posts) / max(time_span_days, 1)
# Day of week distribution
days = [datetime.fromtimestamp(t).strftime('%A') for t in timestamps if t]
day_counts = {}
for d in days:
day_counts[d] = day_counts.get(d, 0) + 1
best_day = max(day_counts, key=day_counts.get) if day_counts else 'Unknown'
return {
'posts_per_day': round(freq, 2),
'posts_per_week': round(freq * 7, 1),
'most_active_day': best_day,
'time_span_days': round(time_span_days, 0)
}
patterns = posting_patterns(posts)
print('Posting patterns:')
for k, v in patterns.items():
print(f' {k}: {v}')Étape 4: Générer un rapport d'audit complet du compte
Combiner toutes les analyses en un rapport complet du compte.
def audit_account(username):
print(f'\n=== TikTok Account Audit: @{username} ===')
profile = get_profile(username)
cost = 0.005
print(f'\nProfile:')
print(f' Followers: {profile["followers"]:,} | Following: {profile["following"]:,}')
print(f' Total likes: {profile["likes"]:,} | Videos: {profile["videos"]}')
print(f' Verified: {profile["verified"]} | Bio: {profile["bio"][:50]}')
posts = get_posts(profile['sec_uid'])
cost += 0.005
metrics = analyze_engagement(posts, profile['followers'])
print(f'\nEngagement ({len(posts)} recent posts):')
print(f' Avg plays: {metrics.get("avg_plays", 0):,}')
print(f' Avg likes: {metrics.get("avg_likes", 0):,}')
print(f' Play-based ER: {metrics.get("engagement_rate", 0)}%')
print(f' Follower-based ER: {metrics.get("follower_er", 0)}%')
patterns = posting_patterns(posts)
print(f'\nPosting:')
print(f' Frequency: {patterns.get("posts_per_week", 0)} posts/week')
print(f' Most active: {patterns.get("most_active_day", "Unknown")}')
# Top performing post
if posts:
top = max(posts, key=lambda p: p['plays'])
print(f'\nTop post: {top["desc"][:50]}... ({top["plays"]:,} plays)')
print(f'\nAudit cost: ${cost:.3f}')
audit_account('charlidamelio')Exemple Python
import os, requests
TH = {'Authorization': f'Bearer {os.environ["SCAVIO_API_KEY"]}', 'Content-Type': 'application/json'}
def audit(username):
p = requests.post('https://api.scavio.dev/api/v1/tiktok/profile',
headers=TH, json={'username': username}).json()
user = p.get('user', p.get('data', {}).get('user', p))
followers = user.get('followerCount', 0)
posts_data = requests.post('https://api.scavio.dev/api/v1/tiktok/user/posts',
headers=TH, json={'sec_user_id': user.get('secUid', '')}).json()
vids = posts_data.get('videos', posts_data.get('data', {}).get('videos', []))[:10]
total_likes = sum(v.get('stats', {}).get('diggCount', 0) for v in vids)
total_plays = sum(v.get('stats', {}).get('playCount', 0) for v in vids)
er = total_likes / total_plays * 100 if total_plays else 0
print(f'@{username}: {followers:,} followers, {er:.2f}% ER, {len(vids)} posts. Cost: $0.010')
audit('charlidamelio')Exemple JavaScript
const TH = { 'Authorization': `Bearer ${process.env.SCAVIO_API_KEY}`, 'Content-Type': 'application/json' };
async function audit(username) {
const p = await fetch('https://api.scavio.dev/api/v1/tiktok/profile', {
method: 'POST', headers: TH, body: JSON.stringify({ username })
}).then(r => r.json());
const user = p.user || p.data?.user || p;
const posts = await fetch('https://api.scavio.dev/api/v1/tiktok/user/posts', {
method: 'POST', headers: TH, body: JSON.stringify({ sec_user_id: user.secUid })
}).then(r => r.json());
const vids = (posts.videos || posts.data?.videos || []).slice(0, 10);
const plays = vids.reduce((s, v) => s + (v.stats?.playCount || 0), 0);
const likes = vids.reduce((s, v) => s + (v.stats?.diggCount || 0), 0);
console.log(`@${username}: ${(user.followerCount||0).toLocaleString()} followers, ${(likes/plays*100).toFixed(2)}% ER`);
}
audit('charlidamelio').catch(console.error);Sortie attendue
=== TikTok Account Audit: @charlidamelio ===
Profile:
Followers: 155,200,000 | Following: 1,234
Total likes: 11,800,000,000 | Videos: 2,456
Verified: True | Bio: dance + vibes
Engagement (10 recent posts):
Avg plays: 8,900,000
Avg likes: 1,200,000
Play-based ER: 14.52%
Follower-based ER: 0.85%
Posting:
Frequency: 4.2 posts/week
Most active: Tuesday
Top post: New dance challenge with... (23,400,000 plays)
Audit cost: $0.010