Instagram Graph API v16.0 で無期限のアクセストークンを取得する
久方ぶりに 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 日)の取得
アプリ ID
、app 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
記事中にある「短期ページアクセストークン」と「長期ページアクセストークン(約 60 日)」は、実際には「ページアクセストークン」ではなく「ユーザートークン」ではないでしょうか??
Meta公式のアクセストークンデバッガーを利用した検証でも「タイプ」がUserになりますし、 アクセストークンガイド にも「必要なアクセス許可を含むユーザーアクセストークンを使用して、ページアクセストークンを取得できます」と記載があり、「ユーザーアクセストークンを使ってページアクセストークンを取得する」というのが正しいように見えます!