Analyse comparative Douyin
Confiez la collecte des comptes publics, l'agrégation des données et le rendu HTML à un script ; l'agent rédige un rapport Markdown fondé sur des preuves, basé sur report_data.json.
Respect des limites
- Ne collectez que les données publiquement visibles sur la page web ; ne contournez pas les signatures, les CAPTCHA ou les contrôles d'accès.
- Utilisez exclusivement l'état de connexion dédié
~/.douyin-benchmark/chrome-profile. Ne lisez pas, ne copiez pas et ne pointez pas directement vers le répertoire utilisateur Chrome habituel, n'affichez pas les valeurs des cookies. - Les valeurs manquantes restent manquantes, ne les remplacez pas par
0. Les likes ne sont qu'un proxy de visibilité publique, ne peuvent pas être considérés comme des performances de lecture, des taux d'interaction ou des effets de conversion d'abonnés. - Distinguez respectivement les formulaires de connexion normaux, les vérifications de sécurité réelles et les erreurs de service de page. Arrêtez-vous en cas de vérification de sécurité, d'erreur de service de page ou d'interception douce par réponse vide ; n'effectuez pas de cycles de réessai, de changement automatique d'IP, de création automatique de tâches différées ni de promesse d'achèvement ultérieur.
Première préparation
Exécutez dans le répertoire de cette compétence :
npm ci
node scripts/login.js
login.js ouvre un navigateur dédié, après vérification sur l'entrée d'un compte réel, il enregistre et se ferme automatiquement. Pour vérifier un état de connexion existant, exécutez node scripts/login.js --check.
Exécution en une commande
Demandez d'abord à l'utilisateur de fournir le lien court « Partager le profil » de l'application Douyin. Un numéro de compte Douyin numérique n'est pas un sec_uid ; assembler directement /user/<numéro> peut silencieusement rediriger vers le fil d'actualité.
OUT="$HOME/douyin-benchmark-output/<identifiant du compte>"
node scripts/run_benchmark.js "<lien court de partage du profil/sec_uid/nom d'utilisateur Doujin/nom d'affichage>" "$OUT" \
--expected-id "<nom d'utilisateur Douyin, optionnel>"
Par défaut, utilise un navigateur avec tête pour améliorer l'observabilité et correspondre à l'UA d'un navigateur réel. Utilisez --headless uniquement dans un environnement sans interface graphique. Le script exécute séquentiellement :
- Analyse le lien court ou le
sec_uid; utilise la recherche interne uniquement si un nom d'affichage/nom d'utilisateur Douyin est fourni. - Collecte les informations, publications et collections et écrit
account_full_raw.json. - S'il y a des publications, génère
report_data.jsonetrapport_analyse.html. - Met à jour
run_status.jsontout au long du processus, n'effectue pas d'analyse supplémentaire en cas d'échec.
Lire d'abord l'état, puis rédiger les conclusions
Lisez run_status.json et account_full_raw.json.capture :
complete: l'API a retournéhas_more=0. Un rapport complet du compte peut être rédigé ; vérifiez néanmoins la différence entre le nombre de publications sur le profil et le nombre collecté.partial: rédigez uniquement un « Rapport d'échantillon collecté » en indiquant à côté du titre la taille de l'échantillon, le nombre total de publications sur le profil et le taux de couverture ; n'utilisez pas de termes comme « exhaustif » ou « maximum du compte ».blocked_empty_body: l'API de publication a retourné HTTP 200 mais avec un corps vide. Arrêtez les requêtes, ne fournissez qu'un instantané des informations et un diagnostic ; une nouvelle tentative ultérieure doit être décidée par l'utilisateur, et au maximum une fois.challenge: demandez à l'utilisateur d'effectuer la vérification dans le navigateur dédié avant une nouvelle tentative, n'essayez pas de contourner.login_required: la page affiche un formulaire de connexion normal, pas une vérification de sécurité. Exécutez le script de connexion, puis ne réessayez qu'une seule fois en cas de succès.page_service_error: la zone des publications affiche clairement « Erreur de service, veuillez rafraîchir et recharger les données ». Arrêtez le rafraîchissement ; après confirmation de l'état de connexion, ne réessayez qu'au maximum une fois.no_post_response: peut être dû à une erreur de saisie ou à un changement de page/API. Vérifiez d'abordsec_uidet la page avec tête, n'augmentez pas aveuglément le nombre de défilements.endpoint_error: l'API de publication a retourné une erreur HTTP/API ou un contenu non JSON. Conservez le diagnostic et arrêtez l'analyse, vérifiez d'abord les changements de page/API.
Rédaction du Markdown
Ce n'est que lorsque report_data.json existe et contient des publications analysables que le modèle references/report-template.md est lu en intégralité et qu'un $OUT/rapport_analyse.md est écrit selon la structure en neuf sections.
Divisez le contenu en trois catégories avec un langage précis :
- Faits : champs publics du JSON et résultats calculés.
- Observations : titres, descriptions, noms de collections, couvertures ou vidéos réellement ouvertes et visualisées.
- Inférences : persona, chemin de monétisation, formule de contenu ; écrivez les preuves et le niveau de confiance, ne les présentez pas comme des faits.
S'il n'y a pas de texte de commentaire, n'écrivez pas « émotions des commentaires chauds » ; sans avoir regardé la vidéo, ne mentionnez pas les plans, le discours, le récit ou les détails de performance. Lorsque l'utilisateur spécifie son propre créneau, migrez ensuite la liste reproductible de manière ciblée.
Validation
account_full_raw.json,run_status.json,report_data.json,rapport_analyse.html,rapport_analyse.mddoivent être cohérents en termes d'état.- Les fichiers HTML et Markdown affichent tous la taille réelle de l'échantillon collecté, le nombre de publications sur le profil, le taux de couverture et
capture_status. - En cas de blocage, consultez
capture.diagnostics.page: enregistrez uniquement le titre, le chemin, les signaux booléens de connexion/défi/erreur de service et le nombre de liens vidéo ; n'enregistrez pas le corps du texte ou les cookies. - Les chiffres sont vérifiés point par point dans
report_data.json; les valeurs manquantes sont affichées par—/inconnu. - Le HTML doit pouvoir être ouvert hors ligne, le texte externe est échappé ; l'échec d'une couverture n'affecte pas le corps du texte.
- Le HTML ne doit pas présenter de débordement horizontal sur toute la page ; les titres des publications les plus récentes doivent être lisibles. Le rythme de publication affiche le nombre de publications par mois pour les 12 derniers mois ; seuls les mois manquants dans une collecte complète sont complétés par 0.
- Les neuf sections du Markdown sont toutes présentes, y compris la méthodologie des données, les limites des preuves, la liste reproductible et les éléments non reproductibles.
Configuration
DOUYIN_PROFILE_DIR: répertoire dédié à l'état de connexion ; par défaut~/.douyin-benchmark/chrome-profile.DOUYIN_BROWSER_CHANNEL: par défautchrome; définir surchromiumpour installer Playwright Chromium d'abord.DOUYIN_HEADLESS=true: active explicitement le mode sans tête ; par défaut avec tête.DOUYIN_SCROLL_WAIT_MS: intervalle de défilement minimum, par défaut 1600 ms ; ne l'utilisez pas pour une collecte à haute fréquence.