Publicação indireta de posts do ChatGPT, Claude e Gemini no blog — Use o limite gratuito de LLM com uma única linha de curl

4 min read · 1,079 words

Dicas práticas / Gestão de blog / Python · API
Cerca de 2.400 caracteres

Ao escrever posts de blog usando LLMs, o padrão mais comum é digitar "escreva um guia sobre este assunto" no chat do ChatGPT ou do Claude, copiar manualmente o HTML recebido e colá-lo na interface de administração do Blogger. Isso leva cerca de 5 minutos, e você precisa configurar as tags, a meta descrição e a categoria manualmente todas as vezes. Para resolver isso, criamos um endpoint de desvio que envia a saída do chat do LLM diretamente para o rascunho (DRAFT) do Blogger com uma única linha de curl.

Por que criamos isso

Chamar diretamente as APIs de LLM (por exemplo, Anthropic ou Google) acumula custos de tokens, custando cerca de $0,10 a $0,50 por post. Para 100 posts, seriam de $10 a $50. Para um blog administrado por uma única pessoa, como o nosso site, isso pesa no bolso.

Por outro lado, as assinaturas do ChatGPT Plus, Claude Pro ou Gemini Advanced custam um valor fixo de $20 por mês. Mesmo escrevendo 100 posts por mês, o custo adicional é zero. No entanto, o fluxo de trabalho de copiar e colar do chat para o Blogger é tão lento que acabamos voltando a usar as chamadas de API.

Solução: ao enviar o HTML recebido no chat do LLM para o endpoint de publicação do webapp com uma única linha de comando, ele passa por todo o fluxo de validação (injeção automática de tags/meta/gráficos e hook chain de validação de SEO) e vai direto para o rascunho (DRAFT) do Blogger. Tudo o que o usuário precisa fazer é obter a resposta no chat e executar o curl uma vez.

Com uma taxa fixa de $20 por mês, você pode publicar 100 posts passando por toda a hook chain de publicação do webapp (higienização, barreira de qualidade e 5 canais de indexação).

Como funciona

Existe um endpoint separado dentro do webapp: POST /api/writer/external-publish.

Estrutura da requisição


{
 "title": "Título do post",
 "content_html": "<p>HTML do corpo...</p><h2>Seção</h2>...",
 "label": "Dicas práticas",
 "post_type": "guide",
 "primary_keyword": "palavra-chave",
 "meta_description": "Meta descrição de 100 a 160 caracteres"
}

Basta inserir o HTML recebido no chat do LLM diretamente em content_html e preencher os outros 5 campos.

Processamento no servidor

  1. Autenticação — Limitado ao localhost (127.0.0.1). Sem exposição externa.
  2. Normalização de tags (Label normalize) — Mapeia automaticamente variações como ["활용 팁", "사용팁", "tips"] para uma das 6 tags canônicas do site. Se não for uma tag conhecida, retorna o erro {"error":"unknown_label","allowed":["..."]}.
  3. Verificação de HTML — Remove tags