Voltar aos artigos
Tecnologia

Como automatizar suas redes sociais com a API oficial da Meta em Python

7 min de leitura por Equipe TRIAT
Ilustração com o título do artigo e um trecho de código Python que publica no Facebook e no Instagram
Foto: TRIAT
O artigo em vídeo

Publicar o mesmo conteúdo no Facebook e no Instagram todos os dias toma tempo. Copiar a legenda, subir a imagem, conferir o link, repetir na outra rede. Quando a empresa já produz conteúdo com regularidade, esse trabalho manual vira gargalo.

A Meta mantém um SDK oficial em Python que conversa direto com a Graph API, a mesma API usada pelo Gerenciador de Anúncios e pelo Meta Business Suite. Com ele, um script consegue publicar na Página do Facebook, no perfil profissional do Instagram e ainda consultar métricas, sem depender de ferramentas de terceiros.

O que é o facebook-python-business-sdk

O repositório oficial fica em github.com/facebook/facebook-python-business-sdk e é distribuído no PyPI como facebook_business. A versão atual (26.0.2) acompanha a Graph API v26.0.

Ele reúne em um só pacote várias APIs da Meta:

  • Pages API: publicações, fotos, agendamentos e insights da Página
  • Instagram Graph API: publicação de imagens, carrosséis, Reels e métricas do perfil profissional
  • Marketing API: campanhas, conjuntos de anúncios, criativos, públicos e relatórios
  • Business Manager: contas, ativos e permissões
  • Conversions API: envio de eventos de conversão a partir do servidor

Quase todo o código da pasta adobjects/ é gerado automaticamente a partir da especificação da Graph API. Cada nova versão da API chega ao SDK por commits automáticos. Por isso, não edite esses arquivos: escreva sua automação em um projeto separado que importa o pacote.

O que você precisa antes de começar

A parte mais trabalhosa não é o código, é a configuração na Meta.

  1. Um app em developers.facebook.com, do tipo Business.
  2. Uma Página do Facebook em que você seja administrador.
  3. Uma conta profissional do Instagram (Empresa ou Criador de conteúdo) vinculada a essa Página.
  4. Um token de acesso da Página com as permissões necessárias.
Objetivo Permissões
Publicar na Página do Facebook pages_manage_posts, pages_read_engagement, pages_show_list
Publicar no Instagram instagram_basic, instagram_content_publish, pages_show_list
Ler métricas read_insights, instagram_manage_insights

Para testes, o Graph API Explorer gera um token de usuário com essas permissões. Para uso contínuo, troque-o por um token de longa duração ou, melhor ainda, use um usuário do sistema no Business Manager, que gera tokens sem prazo de expiração vinculados à empresa e não à conta pessoal de alguém.

Token de acesso é credencial. Não coloque no código, não envie para o Git e não cole em ferramentas de terceiros. Guarde em variável de ambiente ou em um cofre de segredos e revogue imediatamente se vazar.

Instalação

python3 -m venv .venv
source .venv/bin/activate
pip install facebook_business

As credenciais ficam em variáveis de ambiente:

export FB_APP_ID="seu_app_id"
export FB_APP_SECRET="seu_app_secret"
export FB_PAGE_TOKEN="token_da_pagina"
export FB_PAGE_ID="id_da_pagina"
export IG_USER_ID="id_da_conta_instagram"

Informar o app_secret faz o SDK calcular o appsecret_proof em todas as chamadas, uma assinatura HMAC que impede o uso do token fora do seu app. Vale ativar a opção Exigir prova de segredo do app nas configurações avançadas do app.

Descobrindo os IDs da Página e do Instagram

Com um token de usuário, a lista de Páginas que você administra vem junto com o token de cada uma. O ID do Instagram fica no campo instagram_business_account da Página:

import os
from facebook_business.api import FacebookAdsApi
from facebook_business.adobjects.user import User
from facebook_business.adobjects.page import Page

FacebookAdsApi.init(
    app_id=os.environ["FB_APP_ID"],
    app_secret=os.environ["FB_APP_SECRET"],
    access_token=os.environ["FB_USER_TOKEN"],
)

for pagina in User(fbid="me").get_accounts(fields=["name", "id", "access_token"]):
    ig = Page(pagina["id"]).api_get(fields=["instagram_business_account"])
    print(pagina["name"], pagina["id"], ig.get("instagram_business_account"))

Publicando na Página do Facebook

Com o token da Página, uma publicação com texto e link é uma chamada a create_feed:

import os
from facebook_business.api import FacebookAdsApi
from facebook_business.adobjects.page import Page

FacebookAdsApi.init(
    app_id=os.environ["FB_APP_ID"],
    app_secret=os.environ["FB_APP_SECRET"],
    access_token=os.environ["FB_PAGE_TOKEN"],
)

pagina = Page(os.environ["FB_PAGE_ID"])

post = pagina.create_feed(params={
    "message": "Novo artigo no blog: como automatizar suas redes sociais com a API da Meta.",
    "link": "https://triatti.com/artigos",
})
print("Publicado:", post["id"])

Para publicar uma imagem, use create_photo com uma URL pública:

pagina.create_photo(params={
    "url": "https://seusite.com/imagens/capa.jpg",
    "caption": "Legenda da foto",
})

Agendando a publicação

A Página aceita publicações agendadas. Envie published=False e o horário em timestamp Unix. O horário precisa estar entre 10 minutos e 30 dias no futuro:

from datetime import datetime, timedelta

quando = int((datetime.now() + timedelta(days=1)).timestamp())

pagina.create_feed(params={
    "message": "Este post sai amanhã.",
    "link": "https://triatti.com/artigos",
    "published": False,
    "scheduled_publish_time": quando,
})

Publicando no Instagram

O Instagram funciona em duas etapas. Primeiro você cria um contêiner de mídia com a imagem e a legenda. Depois publica esse contêiner.

import os
from facebook_business.api import FacebookAdsApi
from facebook_business.adobjects.iguser import IGUser

FacebookAdsApi.init(
    app_id=os.environ["FB_APP_ID"],
    app_secret=os.environ["FB_APP_SECRET"],
    access_token=os.environ["FB_PAGE_TOKEN"],
)

ig = IGUser(os.environ["IG_USER_ID"])

# 1. cria o contêiner
container = ig.create_media(params={
    "image_url": "https://seusite.com/imagens/capa.jpg",
    "caption": "Automatize suas redes com a API oficial da Meta.\n\n#automacao #python #meta",
    "alt_text": "Logo da Meta ao lado de ícones do Facebook e Instagram",
})

# 2. publica
publicado = ig.create_media_publish(params={"creation_id": container["id"]})
print("Publicado no Instagram:", publicado["id"])

Alguns cuidados que evitam a maior parte dos erros:

  • A imagem precisa estar em uma URL pública. A Meta baixa o arquivo do seu servidor; endereços internos, com login ou atrás de firewall falham.
  • Use JPEG e proporção entre 4:5 e 1.91:1 para o feed.
  • Vídeos e Reels são processados em segundo plano. Crie o contêiner com media_type="REELS" e video_url, consulte o campo status_code do contêiner até ele ficar FINISHED e só então chame create_media_publish.
  • Existe limite de publicações por dia na conta. Consulte o saldo atual com ig.get_content_publishing_limit(fields=["quota_usage", "config"]) antes de rodar publicações em lote.

Para carrosséis, crie um contêiner para cada imagem com is_carousel_item=True, depois um contêiner com media_type="CAROUSEL" e children com a lista de IDs, e publique este último.

Lendo métricas

O mesmo SDK lê o desempenho do que foi publicado, o que permite montar relatórios sem exportar planilhas à mão:

for post in pagina.get_published_posts(fields=["message", "created_time", "permalink_url"], params={"limit": 5}):
    print(post["created_time"], post.get("permalink_url"))

for midia in ig.get_media(fields=["caption", "like_count", "comments_count", "permalink"], params={"limit": 5}):
    print(midia.get("like_count"), midia.get("comments_count"), midia["permalink"])

Tratando erros

Quando a API recusa uma chamada, o SDK levanta FacebookRequestError, que traz o código e a mensagem da Meta:

from facebook_business.exceptions import FacebookRequestError

try:
    pagina.create_feed(params={"message": "Teste"})
except FacebookRequestError as e:
    print(e.api_error_code(), e.api_error_message())

Os casos mais comuns são token expirado (código 190), permissão ausente (código 10 ou 200) e limite de chamadas atingido (códigos 4, 17 e 32). Em automações que rodam sozinhas, registre esses erros e avise alguém em vez de tentar de novo sem parar.

Juntando tudo em uma rotina

Com as peças acima, um fluxo típico fica assim:

  1. O artigo é publicado no site.
  2. Um script pega o título, o resumo, a capa e o link.
  3. O script publica na Página do Facebook com o link do artigo.
  4. O script cria o contêiner e publica a capa no Instagram com a legenda e as hashtags.
  5. Os IDs das publicações ficam registrados para consultar as métricas depois.

Esse script pode rodar por cron, por um webhook do seu CMS ou dentro de uma pipeline de CI. O custo é zero além da infraestrutura: a Graph API não cobra pelas chamadas de publicação.

Quando faz sentido usar o SDK

O SDK oficial vale a pena quando a empresa quer controle total do processo, integração com sistemas próprios e nenhuma dependência de plataformas pagas de agendamento. Também é a base para quem pretende, mais adiante, automatizar campanhas e relatórios de anúncios, já que tudo está no mesmo pacote.

Se o volume é pequeno e não há ninguém para manter o código, uma ferramenta pronta pode ser mais simples. O ponto de atenção é sempre o mesmo: tokens bem guardados, permissões mínimas e alguém acompanhando quando a API mudar de versão.

Precisa integrar as redes sociais da sua empresa aos seus sistemas? A TRIAT pode ajudar a desenhar e manter essa automação.

Precisa disso rodando na sua empresa?

A TRIAT implanta e monitora Linux, storage, virtualização, redes e segurança — do projeto ao suporte 24/7.

Falar com um especialista