DEV Community

devhop
devhop

Posted on

Instagram Graph API ile Takipçi Sayısı ve Hesap Metriklerini Çekmek (Node.js Rehberi)

Sosyal medya analitiği yapan bir araç, içerik zamanlama uygulaması ya da kişisel bir dashboard yazıyorsanız Instagram'ın resmi API'sini kullanmanız gerekir: Instagram Graph API. Bu yazıda sıfırdan kurulum, kimlik doğrulama ve takipçi sayısı / post insights çekme adımlarını Node.js ile anlatacağım.

Önemli not: "Instagram Basic Display API" Aralık 2024'te kapatıldı. Aktif olan tek resmi yol Instagram Graph API'dir ve Business veya Creator hesabı ile bir Facebook Page bağlantısı gerektirir.

Neden Resmi API?

Tersine mühendislikle çıkarılmış "private API" veya tarayıcı kazıma (scraping) yöntemleri kısa vadede çalışsa da uzun vadede üç sorun çıkarır:

  • Instagram'ın algoritması bot davranışını giderek daha agresif tespit ediyor ve hesabınızı askıya alıyor.
  • Yapı her güncellemede değiştiği için kodunuz sürekli kırılır.
  • Meta Kullanım Koşulları'nı ihlal eder; ticari bir ürün geliştiriyorsanız hukuki risk taşır.

Resmi Graph API yavaş kurulur ama bir kez kurulduğunda istikrarlı, oran sınırları belli ve dokümante edilmiştir.

Ön Koşullar

Başlamadan önce şunlara ihtiyacınız var:

  1. Instagram Business veya Creator hesabı (kişisel hesap çalışmaz — Settings → Account → Switch to Professional Account)
  2. Instagram hesabına bağlı bir Facebook Page
  3. Meta for Developers hesabı
  4. Node.js 18+ kurulu bir geliştirme ortamı

1. Adım: Meta Developer Uygulaması Oluşturmak

developers.facebook.com adresine girip "My Apps" → "Create App" deyin. Uygulama tipi olarak Business seçin. Uygulama oluştuktan sonra Dashboard'da sol menüden "Add Product" kısmında Instagram Graph API'yi ve Facebook Login'u ekleyin.

App Settings → Basic kısmından App ID ve App Secret değerlerini bir kenara not edin. Bunları kodda environment variable olarak kullanacaksınız.

2. Adım: Erişim Token'ı Almak

Instagram Graph API üç token türü kullanır:

Token Tipi Geçerlilik Kullanım
Short-lived User Token 1 saat İlk OAuth akışında alınır
Long-lived User Token 60 gün Üretimde kullanılan token
Page Access Token Süresiz* Sayfa adına Instagram işlemleri için

* Page token'ı kullanıcı sayfa yetkilerini değiştirmedikçe geçerli kalır.

OAuth Akışı

Test için en hızlısı Graph API Explorer'ı kullanmaktır: https://developers.facebook.com/tools/explorer/

Üretim için kendi OAuth akışınızı kurarsınız:

// 1. Kullanıcıyı Facebook login'e yönlendir
const loginUrl = `https://www.facebook.com/v21.0/dialog/oauth?` +
  `client_id=${APP_ID}` +
  `&redirect_uri=${encodeURIComponent(REDIRECT_URI)}` +
  `&scope=instagram_basic,instagram_manage_insights,pages_show_list,pages_read_engagement` +
  `&response_type=code`;

// 2. Geri dönüşte code'u short-lived token'a çevir
async function exchangeCodeForToken(code) {
  const url = `https://graph.facebook.com/v21.0/oauth/access_token?` +
    `client_id=${APP_ID}` +
    `&client_secret=${APP_SECRET}` +
    `&redirect_uri=${REDIRECT_URI}` +
    `&code=${code}`;
  const res = await fetch(url);
  return res.json();
}

// 3. Short-lived token'ı 60 günlük long-lived token'a çevir
async function getLongLivedToken(shortToken) {
  const url = `https://graph.facebook.com/v21.0/oauth/access_token?` +
    `grant_type=fb_exchange_token` +
    `&client_id=${APP_ID}` +
    `&client_secret=${APP_SECRET}` +
    `&fb_exchange_token=${shortToken}`;
  const res = await fetch(url);
  return res.json();
}
Enter fullscreen mode Exit fullscreen mode

3. Adım: Instagram Business Account ID'sini Bulmak

Bir kullanıcının Instagram verilerine erişmek için önce Facebook Page ID'sini, sonra ona bağlı Instagram Business Account ID'sini bulmanız gerekir:

async function getInstagramAccountId(userAccessToken) {
  const pagesRes = await fetch(
    `https://graph.facebook.com/v21.0/me/accounts?access_token=${userAccessToken}`
  );
  const pages = await pagesRes.json();
  const pageId = pages.data[0].id;
  const pageToken = pages.data[0].access_token;

  const igRes = await fetch(
    `https://graph.facebook.com/v21.0/${pageId}?fields=instagram_business_account&access_token=${pageToken}`
  );
  const igData = await igRes.json();

  return {
    instagramAccountId: igData.instagram_business_account.id,
    pageAccessToken: pageToken
  };
}
Enter fullscreen mode Exit fullscreen mode

4. Adım: Takipçi Sayısı ve Profil Bilgilerini Çekmek

Asıl olay burada başlıyor. Tek bir istekle username, takipçi sayısı, post sayısı gibi temel bilgileri alabilirsiniz:

async function getAccountInfo(igAccountId, pageToken) {
  const fields = [
    'username',
    'name',
    'biography',
    'followers_count',
    'follows_count',
    'media_count',
    'profile_picture_url'
  ].join(',');

  const url = `https://graph.facebook.com/v21.0/${igAccountId}` +
    `?fields=${fields}&access_token=${pageToken}`;

  const res = await fetch(url);
  return res.json();
}

// Örnek çıktı:
// {
//   username: "ornek_hesap",
//   followers_count: 12453,
//   follows_count: 188,
//   media_count: 247
// }
Enter fullscreen mode Exit fullscreen mode

5. Adım: Post Insights (Etkileşim Verisi)

Belirli bir gönderinin beğeni, yorum, erişim ve gösterim sayılarını almak için:

async function getMediaList(igAccountId, pageToken) {
  const url = `https://graph.facebook.com/v21.0/${igAccountId}/media` +
    `?fields=id,caption,media_type,permalink,timestamp,like_count,comments_count` +
    `&access_token=${pageToken}`;
  const res = await fetch(url);
  return res.json();
}

async function getMediaInsights(mediaId, pageToken) {
  const metrics = 'impressions,reach,saved,engagement';
  const url = `https://graph.facebook.com/v21.0/${mediaId}/insights` +
    `?metric=${metrics}&access_token=${pageToken}`;
  const res = await fetch(url);
  return res.json();
}
Enter fullscreen mode Exit fullscreen mode

6. Adım: Hesap Bazında Insights

Hesabın genelinde günlük/haftalık erişim, profil ziyareti gibi metrikler için:

async function getAccountInsights(igAccountId, pageToken) {
  const metrics = 'impressions,reach,profile_views';
  const period = 'day';
  const url = `https://graph.facebook.com/v21.0/${igAccountId}/insights` +
    `?metric=${metrics}&period=${period}&access_token=${pageToken}`;
  const res = await fetch(url);
  return res.json();
}
Enter fullscreen mode Exit fullscreen mode

Hız Sınırları (Rate Limits)

Instagram Graph API uygulama bazında saatte 200 çağrı × hesap sayısı olarak hesaplanır. Yani 100 işletme hesabınız varsa saatte 20.000 çağrı yapabilirsiniz. Hız sınırını aştığınızda error.code === 4 yanıtı dönüyor.

İyi pratikler:

  • Sık çağırdığınız verileri (örn. takipçi sayısı) en az 15 dakika cache'leyin
  • Insight çağrılarını günde bir kez batch olarak çalıştırın
  • Webhook'larla (instagram_manage_insights) push tabanlı akışa geçin

Sık Karşılaşılan Hatalar

(#10) Application does not have permission for this action — App Review'dan geçmeyen permission istiyorsunuz. Test için kendinizi geliştirici/test kullanıcısı olarak ekleyin.

Invalid OAuth access token — Token süresi dolmuş ya da farklı uygulamaya ait. Long-lived token'ı 50. günde proaktif olarak yenileyin.

Instagram User does not exist — Hesap Business/Creator değil ya da Page'e bağlı değil.

Instagram'ın resmi API'si ilk kurulumda epey kalabalık (Facebook App + Page + Business hesabı + OAuth) ama bir kez ayaklandıktan sonra sağlam bir temel oluşturur. Üzerine; planlanmış yayın aracı, analytics dashboard, içerik öneri sistemi, otomatik DM yanıtlayıcı gibi pek çok proje kurabilirsiniz.

Eğer scraping ya da bot otomasyonu düşünüyorsanız: kısa vadeli kazançtan vazgeçip resmi API'ye yatırım yapın. Üretim ortamında ölçeklenebilen tek yol budur.

Kaynaklar ve Faydalı Bağlantılar

Sorularınızı yorumlara yazabilirsiniz. Bir sonraki yazıda Instagram'ın Webhooks sistemi ile push tabanlı bildirimleri ele alacağım.

Top comments (0)