3.

Facebook (Meta) Graph API 完全ガイド|App 作成・Access Token・Login・Instagram 連携

編集
この記事の要点
  • Facebook API は現在 Meta Graph API として提供。developers.facebook.com で App を作成し、App ID と App Secret を取得するのが出発点
  • API のアクセスは Access Token 経由。User トークン / Page トークン / App トークン / システムユーザートークンの 4 種があり、用途で使い分け
  • エンドポイントは /me (自分) / /me/posts / /me/feed / /<page-id>/feed など。バージョン (例 v18.0) を URL に含める
  • 本番公開には App Review 通過が必須。email 以外の高度な権限 (pages_read_engagement、instagram_basic) は審査対象
  • 関連 API: Facebook LoginInstagram Graph APIWhatsApp Business APIMarketing API など、Meta 製品はすべて Graph API ファミリーで統合

Meta Graph API とは

Facebook (Meta) が提供する HTTP ベースの統合 API です。Facebook 投稿、Page 管理、Instagram 投稿、広告管理、WhatsApp メッセージなど Meta 全製品が graph.facebook.com 1 つのドメインで操作できます。

登録手順

STEP 1: 開発者アカウント

  1. developers.facebook.com に Facebook アカウントでログイン
  2. 右上 Get Started → 開発者として登録 (電話番号認証)
  3. My AppsCreate App

STEP 2: App 作成

用途に応じて App タイプを選択:

App タイプ用途
Consumer一般ユーザー向け Facebook Login など
BusinessPage / Instagram Business / WhatsApp Business / 広告管理
Gamingゲーム連携 / Friends API
None (Other)選択肢を明示しない

STEP 3: App ID と App Secret を取得

作成後の Dashboard で:

  • App ID: 公開可能な識別子
  • App Secret: 秘密の鍵 (Server 側のみで保持、フロントに出さない)
App ID:      1234567890123456
App Secret:  abcdef1234567890abcdef1234567890

# .env で管理
FB_APP_ID=1234567890123456
FB_APP_SECRET=abcdef1234567890abcdef1234567890

Access Token の 4 種

種類取得方法主な用途有効期限
User TokenFacebook Login で取得個人プロフィール操作1〜2 時間 → 長期 60 日に変換可
Page TokenUser Token から /me/accounts で取得Page 投稿・管理長期 Page Token は無期限
App TokenApp ID + App Secretサーバ間処理 / Webhook 検証無期限
System User TokenBusiness Manager で発行大規模業務システム無期限

App Token の取得

curl -G "https://graph.facebook.com/oauth/access_token" \
  --data-urlencode "client_id=YOUR_APP_ID" \
  --data-urlencode "client_secret=YOUR_APP_SECRET" \
  --data-urlencode "grant_type=client_credentials"

# レスポンス
# {"access_token":"1234567890123456|abc...","token_type":"bearer"}

主要エンドポイント (v18.0 ベース)

エンドポイント用途
GET /v18.0/me自分の基本情報
GET /v18.0/me/accounts管理 Page 一覧 + Page Token
GET /v18.0/me/posts自分の投稿一覧
GET /v18.0/me/feed自分のフィード (タイムライン)
POST /v18.0/<page-id>/feedPage に投稿
GET /v18.0/<page-id>/insightsPage インサイト (リーチ・エンゲージメント)
GET /v18.0/<user-id>?fields=id,name,emailfields パラメータで取得項目絞り込み

cURL での実行例

# 自分の情報を取得
curl -G "https://graph.facebook.com/v18.0/me" \
  --data-urlencode "fields=id,name,email" \
  --data-urlencode "access_token=USER_TOKEN"

# Page にテキスト投稿
curl -X POST "https://graph.facebook.com/v18.0/PAGE_ID/feed" \
  --data-urlencode "message=Hello from API" \
  --data-urlencode "access_token=PAGE_TOKEN"

# Page に画像付き投稿
curl -X POST "https://graph.facebook.com/v18.0/PAGE_ID/photos" \
  --data-urlencode "url=https://example.com/photo.jpg" \
  --data-urlencode "caption=キャプション" \
  --data-urlencode "access_token=PAGE_TOKEN"

Facebook Login (OAuth 2.0)

「Facebook でログイン」ボタンを自社サイトに付けるための仕組み。ユーザーから User Access Token を取得します。

1. ブラウザを認可 URL へ
   https://www.facebook.com/v18.0/dialog/oauth
     ?client_id=YOUR_APP_ID
     &redirect_uri=https://myapp/auth/fb/callback
     &state=RANDOM_STATE
     &scope=email,public_profile

2. ユーザーが同意 → リダイレクト
   https://myapp/auth/fb/callback?code=AQB...&state=...

3. サーバから code を Access Token に交換
   GET https://graph.facebook.com/v18.0/oauth/access_token
     ?client_id=YOUR_APP_ID
     &client_secret=YOUR_APP_SECRET
     &redirect_uri=https://myapp/auth/fb/callback
     &code=AQB...

4. レスポンス: { "access_token": "EAAB...", "expires_in": 5184000 }

5. ユーザー情報取得
   GET https://graph.facebook.com/v18.0/me?fields=id,name,email
     &access_token=EAAB...

JS SDK でのフロント実装

<!-- Facebook SDK 読み込み -->
<script async defer crossorigin="anonymous"
        src="https://connect.facebook.net/ja_JP/sdk.js"></script>

<script>
window.fbAsyncInit = function() {
  FB.init({
    appId      : 'YOUR_APP_ID',
    cookie     : true,
    xfbml      : true,
    version    : 'v18.0'
  });
};

function fbLogin() {
  FB.login(function(response) {
    if (response.authResponse) {
      FB.api('/me', {fields: 'id,name,email'}, function(user) {
        console.log(user);
      });
    }
  }, {scope: 'email,public_profile'});
}
</script>

<button onclick="fbLogin()">Facebook でログイン</button>

権限とスコープ

スコープ説明レビュー必要
public_profile名前・プロフィール画像不要
emailメールアドレス不要
pages_show_list管理 Page リスト必要 (Standard Access)
pages_read_engagementPage インサイト必要 + 認証ビジネス
pages_manage_postsPage 投稿管理必要
instagram_basicInstagram プロフィール取得必要
instagram_content_publishInstagram 投稿必要
ads_management広告管理必要
whatsapp_business_messagingWhatsApp 送信必要 + ビジネス認証

App Review (本番公開)

開発モードではApp 管理者・テスター・開発者のみ利用可能。一般ユーザーに提供するには App Review が必要です。

  • 権限ごとに「なぜ必要か」のユースケース動画と説明を提出
  • ビジネス認証 (Business Verification) は法人ドキュメント提出
  • Privacy Policy URL、利用規約 URL は必須
  • 審査期間: 数日〜数週間

Webhooks

Page への新着投稿・コメント、ユーザーのプロフィール変更などをリアルタイムで受信できます。

// app/Http/Controllers/FbWebhookController.php (Laravel 例)
public function verify(Request $r)
{
    $mode = $r->query('hub_mode');
    $challenge = $r->query('hub_challenge');
    $token = $r->query('hub_verify_token');

    if ($mode === 'subscribe' && $token === config('services.fb.verify_token')) {
        return response($challenge, 200);
    }
    abort(403);
}

public function receive(Request $r)
{
    // X-Hub-Signature-256 で App Secret を使って HMAC 検証
    $signature = $r->header('X-Hub-Signature-256');
    $expected = 'sha256=' . hash_hmac('sha256', $r->getContent(), config('services.fb.app_secret'));
    if (!hash_equals($expected, $signature)) abort(401);

    // payload 処理
    foreach ($r->input('entry', []) as $entry) {
        foreach ($entry['changes'] ?? [] as $change) {
            // posts / comments / mentions など
        }
    }
    return response('OK', 200);
}

関連 API ファミリー

API用途
Instagram Graph APIInstagram Business / Creator アカウント投稿、インサイト
Marketing API広告キャンペーン作成・最適化
WhatsApp Business APIWhatsApp での顧客メッセージ送受信
Threads APIThreads 投稿 (2024 年新登場)
Conversions APIサーバサイド広告計測
Messenger PlatformMessenger ボット

レート制限とエラー

# App レベル
- 1 時間あたり 200 calls × (アクティブユーザー数)

# レスポンスヘッダで残量確認
X-App-Usage:     {"call_count":12,"total_cputime":1,"total_time":1}
X-Page-Usage:    Page API の使用率
X-Ad-Account-Usage: 広告 API の使用率

# よくあるエラー
{
  "error": {
    "message": "...",
    "type": "OAuthException",
    "code": 190,           -- 190 = トークン期限切れ
    "fbtrace_id": "AbCdEf"
  }
}
エラーコード意味対処
190トークン期限切れ / 無効再ログイン / 長期トークン化
200権限不足必要スコープ追加 + App Review
4 / 17 / 32 / 613レート制限指数バックオフ
368コンテンツが Meta ポリシーに抵触投稿内容見直し

FAQ

Q: 旧 Facebook SDK で書いた古いコードがエラーになる
A: Graph API は2 年程度で旧バージョン廃止。URL の v8.0 等を最新 (v18.0 など) に書き換え、レスポンス構造の差分を吸収してください。

Q: 個人プロフィールに自動投稿したい
A: 個人タイムラインへの API 投稿は廃止されています (publish_actions 権限終了)。Page か Instagram Business 経由のみ可能です。

Q: Instagram の DM を API で送りたい
A: Instagram Messaging API (Messenger Platform 経由) で可能ですが、ビジネス認証 + ユーザーが先にメッセージを送ってきた 24 時間以内、などの制約があります。

Q: 開発モードのままだとどこまでテストできる?
A: App ロール (Admin / Developer / Tester) に追加した Facebook アカウントは全機能をテスト可能。一般ユーザーへの公開には App Review 必須。

Q: PHP の SDK は?
A: facebook/graph-sdk は古く長らくメンテ停止中。現在は cURL / Guzzle で直接 HTTP を叩くスタイルが推奨されます。

編集
Post Share
子ページ
  1. アプリケーションの登録のトークンの取得
  2. SDKの導入と投稿の実装(PHP)
同階層のページ
  1. YouTube Data API (v3)
  2. Twitter API
  3. Facebook API
  4. Google Trends
  5. Google Custom Search API
  6. App Store Connect API
  7. Revit API

最近更新/作成されたページ