🫠

Instagram Graph API v16.0 で無期限のアクセストークンを取得する

2023/04/07に公開1

久方ぶりに Instagram Graph API を使いたかったが、API のバージョンが 16.0 になり、また色々と変わっていたのでメモ。色々端折りますが、無期限のアクセストークンを取得し、curl で IG メディアオブジェクトを取れるところまで行きます。

各種アクセストークンの取得

0. 準備

Instagram アカウントを ビジネスアカウントにし、Facebook Page と Instagram アカウントを紐づけておく。Meta Developer のページ からアプリを作成し、アプリの設定 > ベーシックから、

  • アプリ ID
  • app secret

を控えておく。

1. 短期ページアクセストークンの取得

当該の Meta アプリを選択し、ユーザーまたはページでは
ページアクセストークン から、当該の Facabook Page を選択する。
アクセス許可は、

  • pages_show_list
  • pages_read_engagement
  • instagram_basic

をひとまず選択。他にも Instagram 系の Permission があるので適宜参照してほしい。
上記設定後、Generate Access Token ボタンを押し、短期ページアクセストークンを発行する。

2. 長期ページアクセストークン(約 60 日)の取得

アプリ IDapp secret、短期ページアクセストークンを使って長期ページアクセストークン(約 60 日)を生成する。

https://graph.facebook.com/v16.0/oauth/access_token?grant_type=fb_exchange_token&client_id={アプリID}&client_secret={app-secret}&fb_exchange_token={短期ページアクセストークン}

上記の URL にアクセスするとアクセストークンが返ってくる。

3. 長期ページアクセストークン(無期限)の取得

app-scoped-user-id、長期ページアクセストークン(約 60 日)使って無期限のアクセストークンを取得する。app-scoped-user-id は、アクセストークンデバッガーでアクセストークンを入れると確認できる。

https://graph.facebook.com/v16.0/{app-scoped-user-id}/accounts?access_token={長期ページアクセストークン(約 60 日)}

上記の URL にアクセスするとアクセストークンが返ってくる。

Instagram のメディアを取得する

1. Facebook ページの ID を取得する

短期ページアクセストークンを使って、ユーザーのページを取得し、Page ID を控える。

https://graph.facebook.com/v16.0/me/accounts?access_token={短期ページアクセストークン}

上記の URL にアクセスすると、下記のような内容が返ってくる。

{
  "data": [
    {
      "access_token": "EAAJjmJ...",
      "category": "App Page",
      "category_list": [
        {
          "id": "2301",
          "name": "App Page"
        }
      ],
      "name": "Metricsaurus",
      "id": "134895793791914",  // ← Page ID
      "tasks": [
        "ANALYZE",
        "ADVERTISE",
        "MODERATE",
        "CREATE_CONTENT",
        "MANAGE"
      ]
    }
  ]
}

2. ビジネスアカウントの ID を取得する

Page ID と短期ページアクセストークンを使って、ページの Instagram ビジネスアカウントを取得し、instagram_business_account の ID を控える。

https://graph.facebook.com/v16.0/{Page ID}?fields=instagram_business_account&access_token={短期ページアクセストークン}

上記の URL にアクセスすると、下記のような内容が返ってくる。

{
  "instagram_business_account": {
    "id": "17841405822304914"  // ← instagram_business_account の ID
  },
  "id": "134895793791914"  //  ← Page ID
}

3. Instagram ビジネスアカウントのメディアオブジェクトを取得する

https://graph.facebook.com/v16.0/{instagram_business_account の ID}/media?access_token={長期ページアクセストークン(無期限)}

このクエリは、IG ユーザーのすべての IG メディアオブジェクトの ID を返すはずです。

{
  "data": [
    {
      "id": "17918195224117851"
    },
    {
      "id": "17895695668004550"
    },
    {
      "id": "17899305451014820"
    },
    {
      "id": "17896450804038745"
    },
    {
      "id": "17881042411086627"
    },
    {
      "id": "17869102915168123"
    }
  ],
  "paging": {
    "cursors": {
      "before": "QVFIUkdGRXA2eHNNTUs4T1ZAXNGFxQTAtd3U4QjBLd1B2NXRMM1NkcnhqRFdBcEUzSDVJZATFoLWtXMWZAGU2VrRTk2RHVtTVlDckI2NjN0UERFa2JrUk4yMW13",
      "after": "QVFIUmlwbnFsM3N2cV9lZAFdCa0hDeV9qMVliT0VuMmJyNENxZA180c0t6VjFQVEJaTE9XV085aU92OUFLNFB6Szd2amo5aV9rTlVBcnNlWmEtMzYxcE1HSFR3"
    }
  }
}

感想

  • なぜこんなことに。

参考

Discussion

gamigami

記事中にある「短期ページアクセストークン」と「長期ページアクセストークン(約 60 日)」は、実際には「ページアクセストークン」ではなく「ユーザートークン」ではないでしょうか??

Meta公式のアクセストークンデバッガーを利用した検証でも「タイプ」がUserになりますし、 アクセストークンガイド にも「必要なアクセス許可を含むユーザーアクセストークンを使用して、ページアクセストークンを取得できます」と記載があり、「ユーザーアクセストークンを使ってページアクセストークンを取得する」というのが正しいように見えます!