idsy/instagram

Integração com a API do Instagram

Maintainers

Package info

github.com/ericpereira-br/idsy-instagram

pkg:composer/idsy/instagram

Transparency log

Statistics

Installs: 2

Dependents: 0

Suggesters: 0

Stars: 0

Open Issues: 0

v1.0.0 2026-07-18 15:14 UTC

This package is not auto-updated.

Last update: 2026-08-02 13:44:21 UTC


README

Componente PHP para publicação de conteúdo no Instagram através da Content Publishing API (Graph API da Meta).

Requisitos

  • PHP >= 8.0 com extensão cURL
  • Conta profissional do Instagram (Business ou Creator)
  • Access token long-lived com as permissões instagram_business_basic e instagram_business_content_publish (login via Instagram) ou instagram_content_publish (login via Facebook)
  • As mídias (imagens/vídeos) precisam estar hospedadas em uma URL pública — a API do Instagram faz o download delas

Instalação

composer require idsy/instagram

Uso

Obter o token via API (fluxo OAuth)

Cadastre no app da Meta a URL de redirecionamento (redirect URI). Depois:

use Idsy\Instagram\Instagram;

$instagram = new Instagram();

$instagram->autenticacao->setAppId('SEU_APP_ID');
$instagram->autenticacao->setAppSecret('SEU_APP_SECRET');
$instagram->autenticacao->setRedirectUri('https://www.exemplo.com.br/instagram/callback');

// 1. redirecione o usuário para autorizar o app
header('Location: ' . $instagram->urlAutorizacao());

// 2. no callback, troque o code pelo token long-lived (60 dias)
$instagram->obterToken($_GET['code']);

$instagram->autenticacao->getAccessToken();    // salve no banco
$instagram->autenticacao->getUserId();         // IG User ID, salve no banco
$instagram->autenticacao->getTokenExpiraEm();  // validade do token

O obterToken() já faz as duas trocas: code → token curto (1 hora) → token long-lived (60 dias).

Renovar o token

O token long-lived expira em 60 dias e pode ser renovado antes de expirar (o token precisa ter pelo menos 24 horas de vida):

$instagram->autenticacao->setAccessToken('TOKEN_SALVO_NO_BANCO');
$instagram->renovarToken();

$instagram->autenticacao->getAccessToken(); // novo token, salve no banco

Publicar imagem no feed

use Idsy\Instagram\Instagram;

$instagram = new Instagram();

$instagram->autenticacao->setAccessToken('SEU_ACCESS_TOKEN');
$instagram->autenticacao->setUserId('SEU_IG_USER_ID');

$instagram->publicacao->setImagemUrl('https://www.exemplo.com.br/imagem.jpg');
$instagram->publicacao->setLegenda('Minha legenda #hashtag');

$instagram->publicarImagem();

if ($instagram->detalhe->getStatus() == 'ok') {
    echo $instagram->publicacao->getMediaId();
}

Publicar vídeo (Reels)

$instagram->publicacao->setVideoUrl('https://www.exemplo.com.br/video.mp4');
$instagram->publicacao->setLegenda('Meu reels');

$instagram->publicarVideo();

O vídeo é processado pela API; o componente aguarda automaticamente o container ficar pronto (FINISHED) antes de publicar.

Publicar story (imagem ou vídeo)

$instagram->publicacao->setImagemUrl('https://www.exemplo.com.br/imagem.jpg');
// ou: $instagram->publicacao->setVideoUrl('https://www.exemplo.com.br/video.mp4');

$instagram->publicarStory();

Stories não suportam legenda e expiram em 24 horas. Recomendado usar mídia na proporção 9:16 (1080x1920) para ocupar a tela inteira.

Publicar carrossel (2 a 10 imagens)

$instagram->publicacao->setImagensCarrossel([
    'https://www.exemplo.com.br/imagem1.jpg',
    'https://www.exemplo.com.br/imagem2.jpg'
]);
$instagram->publicacao->setLegenda('Meu carrossel');

$instagram->publicarCarrossel();

Consultar o permalink da publicação

$instagram->consultar(); // usa o mediaId da publicacao
echo $instagram->publicacao->getPermalink();

Tratamento de erros

Seguindo o padrão dos componentes idsy, os métodos não lançam exceções — o resultado fica em detalhe:

$instagram->publicarImagem();

echo $instagram->detalhe->getStatus();    // ok | error | exception
echo $instagram->detalhe->getReturn();    // mensagem do componente
echo $instagram->detalhe->getReturnAPI(); // retorno bruto (JSON) da API

URL base da API

Por padrão o componente usa https://graph.instagram.com (API do Instagram com login via Instagram). Se a conta for gerenciada via Página do Facebook, altere para:

$instagram->autenticacao->setBaseUrl('https://graph.facebook.com');

Limites da API

  • Máximo de 100 publicações via API a cada 24 horas por conta (Reels e carrosséis contam como 1).
  • Imagens devem ser JPEG.
  • O container de mídia expira em 24 horas se não for publicado.