jsonscraper
Mercados

Como avaliar a consistência temática de um criador do TikTok com publicações públicas

Um pipeline Python passo a passo para coletar o feed de um criador, comparar temas e usar IA com cautela

Política editorial Comunique um erro

Um criador pode parecer adequado para uma campanha pelo perfil e por alguns vídeos de destaque, mas o feed recente conta uma história mais importante: ele continua falando regularmente sobre o tema desejado? A verificação manual fica desatualizada rapidamente, e uma análise pontual pode acabar se concentrando nas publicações mais chamativas. Para uma agência ou marca, é mais útil reunir uma amostra reproduzível de vídeos públicos, guardar o estado na data da verificação e avaliar a adequação temática sempre com os mesmos critérios.

Artigo: Como avaliar a consistência temática de um criador do TikTok com publicações públicas
Resumo: Veja como uma marca ou agência pode avaliar a regularidade com que um criador do TikTok publica conteúdo sobre um tema: consultar o feed por API, guardar snapshots, calcular indicadores transparentes e classificar descrições de vídeos.
Função da imagem: capa — a ideia central
Seção: 
Tema visual: Um relatório de análise impresso com cartões de vídeos de criadores do TikTok representados por ícones neutros,
© jsonscraper · Ilustração gerada por IA

A seguir, apresentamos um processo prático para avaliar o feed público de um criador do TikTok. Ele usa a TikTok Scraper API da jsonscraper e Python: obtém publicações por uma rota documentada, salva o JSON original, organiza os campos confirmados em uma tabela e calcula a proporção de vídeos que correspondem a um tema definido. Se desejar, as descrições podem ser enviadas a um classificador de texto como uma etapa seguinte, separada e controlada.

Primeiro, defina o que significa «adequado»

Suponha que a equipe esteja escolhendo um criador para uma campanha sobre preparo de café em casa. O número de seguidores e a popularidade de vídeos específicos podem ajudar a descrever o alcance, mas, por si só, não respondem à pergunta de quanto o feed está relacionado ao café. Para uma triagem inicial, são necessários sinais de conteúdo: a descrição do vídeo menciona preparo de café, equipamentos, receitas ou avaliações? Quantas publicações sobre o tema entraram no período de observação definido? Qual é a proporção de vídeos temáticos entre os coletados?

Antes de coletar os dados, registre os critérios em um pequeno vocabulário, por exemplo: «espresso», «moedor de café», «latte», «extração». Acrescente exceções e palavras ambíguas. «Café» pode aparecer em uma piada, em uma inserção publicitária ou em um contexto incidental; portanto, a correspondência automática de texto é uma classificação inicial, não uma avaliação definitiva do criador. Separe pelo menos três categorias: correspondência clara, possível correspondência e vídeo irrelevante.

A amostra também deve ser definida com antecedência. Por exemplo, é possível analisar as últimas 20 publicações obtidas em cada execução semanal. Essa é uma condição do seu monitoramento, não uma promessa de que a API retornará exatamente esse volume: a disponibilidade e a composição dos resultados dependem da resposta a cada solicitação. Registre o horário da coleta, o número de itens obtidos e os parâmetros da solicitação para comparar snapshots sem misturar critérios diferentes.

Solicitação ao feed do criador

Na documentação da jsonscraper, a rota GET /getUserFeed aceita o parâmetro obrigatório query — o nome de usuário ou a URL do perfil. Entre os parâmetros opcionais estão count, region, sort_type, with_pinned_posts e max_cursor. A chave da API é enviada como license_key na query string; mantenha-a em uma variável de ambiente, não no código-fonte. Os detalhes das rotas e dos parâmetros estão na documentação oficial da API do TikTok.

Na resposta, verifique primeiro o status externo e, em seguida, acesse o objeto tiktok. No feed do usuário, a lista de publicações fica em tiktok.aweme_list. O esquema observado inclui o identificador do vídeo, o texto da descrição, o horário de publicação, o autor, a URL e um objeto de estatísticas. Alguns campos podem estar ausentes, por isso o processador deve manter valores vazios como vazios, em vez de substituí-los por números inventados.

O exemplo mínimo a seguir foi preparado para Python 3.8+ e a biblioteca requests. Armazene a chave em JSONSCRAPER_TIKTOK_LICENSE_KEY. O código faz uma solicitação, verifica a resposta HTTP e o status externo da API, grava o JSON original e exibe linhas normalizadas.

import json
import os
from datetime import datetime, timezone
from pathlib import Path

import requests

API_KEY = os.environ["JSONSCRAPER_TIKTOK_LICENSE_KEY"]
PROFILE = "creator_username"

params = {
    "license_key": API_KEY,
    "query": PROFILE,
    "count": 20,
    "region": "US",
    "sort_type": 0,
    "with_pinned_posts": 0,
}

response = requests.get(
    "https://tiktok.evelode.com/getUserFeed",
    params=params,
    timeout=30,
)
response.raise_for_status()
payload = response.json()

if payload.get("status") != "ok":
    raise RuntimeError("TikTok API returned a non-ok status")

tiktok = payload.get("tiktok") or {}
items = tiktok.get("aweme_list") or []

stamp = datetime.now(timezone.utc).strftime("%Y%m%dT%H%M%SZ")
Path("snapshots").mkdir(exist_ok=True)
Path(f"snapshots/{PROFILE}_{stamp}.json").write_text(
    json.dumps(payload, ensure_ascii=False, indent=2),
    encoding="utf-8",
)

rows = []
for item in items:
    stats = item.get("statistics") or {}
    author = item.get("author") or {}
    rows.append({
        "aweme_id": item.get("aweme_id"),
        "created_at": item.get("create_time"),
        "description": item.get("desc") or "",
        "share_url": item.get("share_url"),
        "creator": author.get("unique_id") or author.get("nickname"),
        "play_count": stats.get("play_count"),
        "digg_count": stats.get("digg_count"),
        "comment_count": stats.get("comment_count"),
        "share_count": stats.get("share_count"),
    })

print(json.dumps(rows, ensure_ascii=False, indent=2))

Para essa rota, a documentação descreve sort_type como 0 para o feed recente e 1 para o popular. O exemplo usa o modo de publicações recentes e exclui vídeos fixados com with_pinned_posts=0, para que uma publicação antiga fixada não entre na amostra de novas publicações. Se precisar de outro modo, registre o parâmetro nos metadados do snapshot e aplique-o da mesma forma em todas as execuções.

Processamento da resposta: de JSON a uma tabela reproduzível

É útil salvar a resposta original antes de fazer qualquer transformação. Isso permite conferir a normalização, descobrir por que uma linha ficou vazia e adaptar o processador se a presença de campos opcionais nas respostas mudar. No armazenamento de trabalho, guarde junto ao JSON o horário da coleta em UTC, o perfil consultado, os parâmetros e a versão do seu script. Não inclua a chave da API em arquivos compactados nem em logs.

Nas execuções repetidas, use aweme_id como identificador da publicação, se o campo estiver presente. A deduplicação por esse ID evita contabilizar o mesmo vídeo como várias publicações quando ele é obtido novamente. Ainda assim, guarde snapshots separados das estatísticas: os valores de visualizações e reações correspondem ao momento da observação, não a características imutáveis do vídeo. Se um campo estatístico estiver ausente, deixe-o vazio e exclua esse registro do cálculo da métrica correspondente.

Na estrutura, o horário de publicação é indicado por create_time. Para a tabela analítica, converta-o em data e armazene tanto o valor original quanto o horário normalizado em UTC. Antes de calcular, confira alguns registros reais da resposta obtida para confirmar o tipo e as unidades esperados. Essa verificação é especialmente importante para gráficos temporais: um erro na conversão do horário desloca publicações entre dias e prejudica a comparação entre semanas.

É possível criar um classificador temático básico sem modelo: normalize o texto, busque as frases definidas e marque as correspondências. Para obter uma classificação mais útil, prepare um conjunto de descrições verificadas manualmente e regras para casos limítrofes. Depois, compare o filtro simples por vocabulário com a classificação humana: identifique quais expressões geram correspondências falsas e atualize o vocabulário. Isso cria uma linha de base compreensível para avaliar o uso posterior de IA.

import re

KEYWORDS = (
    "кофе", "эспрессо", "кофемолка", "латте", "заваривание",
)


def normalize(text):
    text = (text or "").casefold()
    return re.sub(r"\s+", " ", text).strip()


def classify(description):
    text = normalize(description)
    matches = [word for word in KEYWORDS if word in text]
    return {
        "topic_match": bool(matches),
        "matched_terms": matches,
    }

for row in rows:
    row.update(classify(row["description"]))

Uma palavra-chave na descrição pode ser um sinal útil, mas o classificador deve apresentar uma justificativa explicável: a lista de termos encontrados, e não apenas um rótulo «sim/não». Para modelos de linguagem, use uma solicitação estruturada: forneça a descrição do vídeo e categorias fixas, e peça que o modelo retorne a categoria, uma breve justificativa e um nível de confiança. Armazene separadamente o texto original e a resposta do modelo. Uma pessoa deve verificar as decisões que afetam o orçamento ou a escolha de um parceiro, consultando os links das publicações.

Calcule indicadores com um denominador claro

Para um relatório simples, use a proporção de vídeos temáticos e a frequência de publicação. A proporção é o número de vídeos com correspondência temática confirmada dividido pelo número de vídeos que foi possível classificar. Sempre apresente os dois números: por exemplo, «7 de 18 descrições verificadas». Assim, o resultado fica claro e é mais fácil perceber quando a porcentagem se baseia em uma amostra pequena demais.

A frequência de publicação pode ser expressa como o número de vídeos obtidos em um período fixo, por exemplo, nos últimos 30 dias. Defina os limites do período com base no horário da coleta e nas datas de publicação. Se fizer snapshots semanais, guarde o resultado de cada execução, em vez de apenas atualizar uma linha final: assim, será possível ver mudanças nos temas e na atividade. Não interprete o número de itens coletados como um arquivo completo das publicações do criador — analise a amostra efetivamente obtida e indique com clareza o critério usado.

As estatísticas de visualizações, curtidas, comentários e compartilhamentos podem contextualizar cada vídeo. Compare valores absolutos com cautela: uma publicação mais antiga pode ter tido mais tempo para acumular reações. Para fazer comparações dentro do perfil de um mesmo criador, registre o horário de cada coleta e acompanhe a evolução do mesmo vídeo entre snapshots. Não chame a diferença entre dois snapshots de «velocidade de crescimento» se o intervalo e a disponibilidade das medições não estiverem registrados.

Um registro final útil para cada perfil inclui a data da coleta, os parâmetros escolhidos, o número de publicações obtidas, o número de descrições classificadas, o número de correspondências temáticas, uma lista de URLs de exemplo e uma breve observação sobre casos ambíguos. Essa tabela permite que outra pessoa confira a conclusão e que outro analista repita a metodologia no próximo perfil.

Paginação e agendamento

Se a amostra exigir uma página seguinte, a documentação do feed de perfil usa max_cursor, obtido da resposta anterior. Envie-o sem transformações: o cursor é um valor opaco, que deve ser salvo e devolvido à API. Se planejar solicitar mais páginas, verifique também has_more na resposta. Limite o número de páginas ou o total de solicitações para que a coleta termine de forma previsível.

cursor = None
all_items = []
max_pages = 3

for _ in range(max_pages):
    page_params = dict(params)
    if cursor is not None:
        page_params["max_cursor"] = cursor

    page_response = requests.get(
        "https://tiktok.evelode.com/getUserFeed",
        params=page_params,
        timeout=30,
    )
    page_response.raise_for_status()
    page_payload = page_response.json()

    if page_payload.get("status") != "ok":
        raise RuntimeError("TikTok API returned a non-ok status")

    page = page_payload.get("tiktok") or {}
    all_items.extend(page.get("aweme_list") or [])

    if not page.get("has_more"):
        break

    cursor = page.get("max_cursor")
    if cursor is None:
        break

Escolha a frequência de execução de acordo com a tarefa: para uma avaliação inicial, basta uma execução manual; para uma lista de criadores, um agendamento semanal pode revelar mudanças sem consultas constantes. A execução pode ser configurada no cron, em uma tarefa de CI ou em um orquestrador. O fluxo é simples: obter os perfis de uma tabela, fazer solicitações com paralelismo limitado, gravar snapshots, verificar a proporção de respostas bem-sucedidas e enviar um resumo para uma tabela de trabalho. Repita a solicitação após um erro temporário, com um número limitado de tentativas e intervalo entre elas; registre separadamente os erros em solicitações autenticadas para verificar a chave e a configuração.

Quando a IA é útil e quando é preciso verificar

A IA pode ajudar a classificar descrições que contenham gírias, vários idiomas ou formulações sem uma palavra-chave exata. Primeiro, defina uma lista fechada de categorias e peça ao modelo que use apenas o texto da descrição. Depois, avalie a qualidade com uma pequena amostra rotulada manualmente: compare as categorias do modelo com as decisões de um editor e analise separadamente erros e casos ambíguos. É melhor incluir no relatório a proporção de concordância entre o modelo e a classificação manual, além do número de exemplos verificados, do que uma pontuação geral difícil de interpretar.

Não peça ao modelo para «escolher o melhor criador» sem definir critérios. Em vez disso, divida o processo em atributos mensuráveis: proporção temática, regularidade, exemplos de vídeos relevantes e faixa de reações públicas. O modelo pode resumir esses dados brevemente e apontar os links que embasam a análise; a decisão final cabe à equipe, que considera o formato da campanha, o público e os acordos com o criador.

Se a análise envolver inserções publicitárias, verifique separadamente nas próprias publicações e nos requisitos aplicáveis se a relação do criador com a marca foi divulgada. O guia da Comissão Federal de Comércio dos Estados Unidos explica que a relação com a marca deve ser divulgada de forma visível junto à recomendação; uma biografia de perfil ou uma parte oculta do texto talvez não sejam suficientes para que o público perceba o aviso. Consulte as orientações da FTC para criadores de redes sociais. O monitoramento de dados públicos ajuda a reunir material para verificação, mas avaliar o cumprimento das regras exige contexto sobre a publicação e a campanha específicas.

O que você terá ao final

Depois de configurar o pipeline, a equipe terá snapshots datados do feed público, uma tabela de publicações com descrições e métricas disponíveis, além de um cálculo reproduzível da proporção temática. Com esses dados, será possível selecionar perfis com mais rapidez para uma análise posterior, detectar mudanças de tema e documentar os motivos da avaliação. O método é verificável: o JSON original, os parâmetros da solicitação, as regras de classificação e os links para os vídeos permitem rastrear o caminho dos dados até a conclusão.

Para o primeiro teste, execute o script em um perfil, salve a resposta bruta e verifique manualmente algumas classificações. Em seguida, defina o vocabulário temático, as regras da amostra e o formato do relatório. Quando o resultado for reproduzível, acrescente um agendamento e uma fila de perfis. Consulte a documentação da API para ver as rotas e os parâmetros; para conhecer o produto e as opções de integração disponíveis, visite a página da TikTok Scraper API.

Lista prática antes de começar

  • Registre o tema da campanha, o vocabulário de inclusão e exemplos de casos limítrofes.
  • Defina o período da amostra, o valor de count, a ordenação e a configuração de publicações fixadas.
  • Armazene o JSON original, a data da coleta e os parâmetros separadamente da chave secreta.
  • Use aweme_id para deduplicar, se o identificador estiver presente.
  • Diferencie valores ausentes de zero e não calcule médias sem uma justificativa clara.
  • Apresente o tamanho da amostra junto à proporção temática e inclua links de exemplo.
  • Teste a classificação por IA com uma amostra verificada manualmente antes de usá-la em decisões de campanha.
  • Atualize a avaliação conforme o agendamento e compare snapshots coletados segundo os mesmos critérios.

Pessoas

Nenhuma pessoa listada para este artigo ainda.

Continue lendoComo avaliar a qualidade de leads do TikTok por vídeos públicos: um pipeline passo a passo em Python
Leia o próximo artigo

Transforme o que lê numa integração funcional

Explore as APIs de dados sociais da jsonscraper, teste pedidos e crie o seu próximo fluxo de trabalho.

Explorar APIs