Análise de Concorrentes no Douyin
Deixe que o script cuide da coleta de contas públicas, agregação de dados e renderização HTML; o agente escreve um relatório Markdown com evidências bem fundamentadas com base no report_data.json.
Limites a Serem Respeitados
- Colete apenas dados visíveis publicamente na web; não quebre assinaturas, não burle CAPTCHAs ou controles de acesso.
- Use apenas o login dedicado em
~/.douyin-benchmark/chrome-profile. Não leia, copie ou aponte diretamente para o diretório de perfil do Chrome do usuário; não exiba valores de Cookies. - Mantenha valores ausentes como ausentes; não os reescreva como
0. Curtidas só podem ser usadas como proxy de engajamento público, não como métricas de desempenho de visualização, taxa de interação ou efeito de conversão de seguidores. - Diferencie entre tela de login comum, desafio de segurança real e erro de serviço da página. Pare ao encontrar desafios de segurança, erros de serviço ou respostas vazias com bloqueio suave; não faça repetições em loop, troque IP automaticamente, crie tarefas com atraso automático ou prometa conclusão posterior.
Preparação Inicial
Execute no diretório desta Skill:
npm ci
node scripts/login.js
login.js abre um navegador dedicado, salva automaticamente o estado de login após verificar uma conta real e fecha. Para verificar se já existe um login salvo, execute node scripts/login.js --check.
Execução com Um Comando
De preferência, peça ao usuário o link curto "Compartilhar Perfil" do aplicativo Douyin. O número do Douyin não é o sec_uid; acessar diretamente /user/<número> pode redirecionar silenciosamente para o feed.
OUT="$HOME/douyin-benchmark-output/<identificador da conta>"
node scripts/run_benchmark.js "<link de compart. do perfil/sec_uid/número do Douyin/apelido>" "$OUT" \
--expected-id "<número do Douyin, opcional>"
Por padrão, usa o Chrome com cabeçalho (modo gráfico) para melhor observabilidade e correspondência com o User-Agent real do navegador. Somente em ambientes sem interface gráfica adicione --headless. O script executa sequencialmente:
- Resolve o link curto ou
sec_uid; apenas quando fornecido apelido/número do Douyin, usa a busca interna do site. - Coleta perfil, posts e coleções e escreve
account_full_raw.json. - Se houver posts, gera
report_data.jsone调研报告.html. - Atualiza
run_status.jsondurante todo o processo; não continua a análise após falha.
Leia o Status Antes de Escrever Conclusões
Leia run_status.json e account_full_raw.json.capture:
complete: A API retornouhas_more=0. Pode-se escrever um relatório completo da conta; ainda assim, verifique a diferença entre o número de posts no perfil e o número coletado.partial: Escreva apenas um "Relatório de Amostra Coletada", indicando o tamanho da amostra, o total de posts no perfil e a taxa de cobertura próximo ao título; não use termos como "completo" ou "máximo da conta".blocked_empty_body: A API de posts retornou HTTP 200, mas corpo vazio. Pare as requisições, entregue apenas um snapshot do perfil e diagnóstico; qualquer nova tentativa deve ser decidida pelo usuário, no máximo uma vez.challenge: Peça ao usuário para completar a verificação no navegador dedicado antes de tentar novamente; não tente burlar.login_required: A página exibe uma tela de login comum, não um desafio de segurança. Execute o script de login e tente novamente apenas uma vez após o sucesso.page_service_error: A área de posts mostra claramente "Erro de serviço, recarregue para obter dados". Pare de recarregar; após verificar o estado de login, tente novamente no máximo uma vez.no_post_response: Pode ser erro de entrada ou mudança na página/API. Primeiro verifique osec_uide a página com cabeçalho; não aumente o número de rolagens cegamente.endpoint_error: A API de posts retornou erro HTTP/API ou conteúdo não-JSON. Mantenha o diagnóstico e pare a análise; verifique primeiro se houve mudança na página/API.
Escrevendo o Markdown
Somente quando report_data.json existir e contiver posts analisáveis, leia completamente o references/report-template.md e escreva $OUT/调研报告.md seguindo a estrutura de nove seções.
Divida o conteúdo em três categorias com redação clara:
- Fatos: Campos públicos do JSON e resultados calculados.
- Observações: Título, biografia, nome da coleção, capa ou conteúdo de vídeos efetivamente abertos.
- Inferências: Persona, caminho de monetização, fórmula de conteúdo; apresente evidências e nível de confiança, não trate como fato.
Se não houver texto de comentários, não escreva "sentimentos dos comentários populares"; se não tiver assistido aos vídeos, não afirme detalhes de enquadramento, narração, roteiro ou performance. Quando o usuário especificar seu próprio nicho, migre a lista de itens replicáveis de forma direcionada.
Validação
account_full_raw.json,run_status.json,report_data.json,调研报告.htmle调研报告.mddevem ter estados consistentes.- Tanto o HTML quanto o Markdown devem exibir o tamanho real da amostra coletada, o número de posts no perfil, a taxa de cobertura e o
capture_status. - Em caso de bloqueio, verifique
capture.diagnostics.page: registre apenas título, caminho, sinais booleanos de login/desafio/erro de serviço e número de links de vídeo; não salve corpo da página ou Cookies. - Os números devem corresponder item por item ao
report_data.json; valores ausentes devem ser exibidos como—/desconhecido. - O HTML deve poder ser aberto offline; o texto externo deve ser escapado; falhas na capa não devem afetar o corpo.
- O HTML não deve ter transbordamento horizontal em toda a página; o título do post mais recente deve ser legível. A frequência de postagem deve mostrar os últimos 12 meses com base no número de posts (barras); apenas na coleta completa os meses sem posts devem ser preenchidos com 0.
- O Markdown deve conter todas as nove seções, incluindo a métrica dos dados, os limites das evidências, a lista de itens replicáveis e os itens que não podem ser copiados.
Configuração
DOUYIN_PROFILE_DIR: Diretório de login dedicado; padrão:~/.douyin-benchmark/chrome-profile.DOUYIN_BROWSER_CHANNEL: Padrão:chrome; defina comochromiumpara instalar primeiro o Playwright Chromium.DOUYIN_HEADLESS=true: Ativa explicitamente o modo sem cabeçalho; padrão: com cabeçalho.DOUYIN_SCROLL_WAIT_MS: Limite inferior do intervalo de rolagem, padrão: 1600ms; não use para coleta de alta frequência.