idsy / instagram
Integração com a API do Instagram
Requires
- php: >=8.0
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_basiceinstagram_business_content_publish(login via Instagram) ouinstagram_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.