FURYU Tech Blog - フリュー株式会社

フリュー株式会社の開発者が技術情報を発信するブログです。

Instagramの公開APIを使ってみた

こんにちは。
ピクトリンク事業部開発部 開発1課 に所属しています松本です🐹

テックブログリレー5日目を担当させていただきます🍁

 

はじめに(雑談)

たまに、Instagramでプレゼント企画を開催している投稿を見かけませんか?

応募者の集計や抽選時、企業のアカウントはシステム化されていると思いますが、個人で作家活動をされている場合は、コメント1件ずつを見ながら情報をExcelにコピペしたり、はたまた紙に書き出したりしている方の割合も多いのでは。

手作業だと、いつかヒューマンエラーが起きそうですよね🤔

システム化するならどんな感じだろう〜と、ネットをつらつら眺めながら考えたことがあって、今回の記事のネタにすることにしました✍️

『アカウントのフォロー』『投稿へのいいね』『コメント欄に応募メッセージを書き込む』で応募完了のスタイルが一般的だと思うので、ここら辺の情報がAPIから取得できるのかを、調査してみたいと思います。

私も初めてInstagramのAPIを使ってみます!一体どんな情報が取得できるのか...?!

 

Instagramの公開APIとは? 

Instagramには2種類の公開APIが存在しています。
どちらも無料で、アカウントや投稿などの情報を取得することができます。

  • Instagram Basic Display API公式ドキュメント
    • 個人ユーザーのプロフィールや写真を取得するためのシンプルなAPI
  • Instagram Graph API公式ドキュメント
    • ビジネスアカウント向けで、エンゲージメントデータやコメント管理など高度な機能を提供するAPI

そして突然ですがみなさん、こちらの記事はご存知でしょうか? 

developers.facebook.com

2024年9月4日、Meta社のDeveloper向け公式ブログにて、「Instagram Basic Display API」(基本表示API)が12月4日をもって終了することが発表されました😢

上記を踏まえて、本記事ではGraph APIの方を使用してみようと思います!
(アカウントタイプの差はあれど、Graph APIの方が取得できる情報量が多いのと、何より今のところ提供終了の予定が無いので...😂)

 

事前準備

Instagram Graph APIを使用するためには、以下の作業が必要です。
振り返ってみれば、この事前準備に一番時間がかかりました...。頑張りましょう!

1. Instagramのビジネスアカウントを用意

Instagramのプロフィールページ右上のハンバーガーメニューを選択し、設定とアクティビティを開きます。

画面上部の検索窓で”切り替え”と検索すると、『プロアカウントに切り替える』が表示されます。プロアカウントの説明をポチポチと飛ばして、カテゴリは適当なものを選択してください。

最終的に、プロフィールページに『プロフェッショナルダッシュボード』が追加されていればプロアカウントへの切り替えが完了しています!

2. Facebookでページを作成し、Instagramのアカウントをリンクさせる

Facebookにログイン(アカウントがない場合は作成)し、新規でページを作成します。

作成したページに、Instagramのプロアカウントをリンクさせます。

左側のページを管理のメニューから、『設定』を選択すると、メニューが設定とプライバシーに切り替わります。

アクセス許可の『リンクするアカウント』から、Instagramの見るボタンを選択し、下図のようにポチポチと画面を進めて、Instagramのログインまで行いましょう。

緑枠のように、”@アカウント名と連携済み”になっていれば、リンク完了です。

3. Meta for Developersにログインし、アプリケーションを作成する

Meta for Developersのページにログインし、アプリケーションを作成します。

画面右上の『マイアプリ』を選択すると、アプリ一覧画面に遷移するので、アプリ作成ボタンから進んでください。

作成したアプリに、Instagramを追加し、アカウントを追加します。

アカウントが表示され、”アクセストークンを生成する”の表示になっていればOKです!

🏁ここまでできたら、もう少し!🏁

4. アクセストークンを取得し、期限を延長する

グラフAPIエクスプローラを開き、作成したアプリでトークンを作成します。

アクセス許可には、下記を設定しました。 

  •  
    pages_show_list
  •  
    ads_management
  •  
    business_management
  •  
    instagram_basic
  •  
    instagram_manage_comments
  •  
    instagram_manage_insights
  •  
    instagram_content_publish
  •  
    instagram_manage_messages
  •  
    pages_read_engagement
  •  
    instagram_manage_events

Generate Access Token ボタン押下でFacebookのログイン画面が表示されるので、ログイン後”現在の〇〇にオプトイン”を選択、続行し、保存します。

ここで生成されたアクセストークンは有効期限が1時間なので、2ヶ月に延長します。

これにより、アプリケーションが継続的にAPIにアクセスできるようになります。
アプリケーションを作成する場合は、認証のプロセスを頻繁に行う必要が無くなる為、ユーザー体験を向上させることができます。(開発者の負担軽減も...)

(本記事では、グラフAPIエクスプローラでデータ取得までしか行っていませんが、2〜3日かけてAPIをいじっていたのと、アクセストークンの期限延長の調査結果をメモとして残したい思いがあり、手順として記載しています。)

ただし、アクセストークンを長期間有効にすることで、万が一トークンが漏洩した場合、第三者に不正に利用されるリスクが増加します。アプリケーションを作成して運用する場合は、セキュリティ対策を行い、不正アクセスを防ぐための保護を行う必要があります。

用途によって、適切な有効期限のアクセストークンを採用し、適宜必要な対応を行いましょう!

アクセストークンを延長すると、ボタンの下に新たなトークンが現れるので、こちらをデバックすると期間が延長されていることが確認できます。

5. エンドポイントに使用するビジネスアカウントIDを取得する

期限を延長したトークンをエクスプローラに貼り付け、エンドポイント入力欄にme?fields=accounts{name,instagram_business_account}を入力して送信すると、下記のレスポンスが返却されます。

🧀の部分が、次の項でエンドポイントに記載している{instagram_business_account_id}に設定するIDです。

お疲れ様でした。これで...やっと、APIを使用する準備が整いました!

早速使ってみましょう!

 

データを取得してみよう

引き続き、グラフAPIエクスプローラを使用してデータを取得していきたいと思います。

フォロワーの情報

テスト用のアカウントで、フォロワー数を含むプロフィール情報を取得できました。

しかしどうやら、アカウントのフォロワー数は取得できますが、フォロワーのアカウント名一覧は取得できないようです。

✏️エンドポイント

GET https://graph.facebook.com/v21.0/{instagram_business_account_id}?fields=username,name,follows_count,followers_count

📄結果

{
  "username": "{username}",
  "name": "apiちゃん",
  "follows_count": 0,
  "followers_count": 1,
  "id": "{instagram_business_account_id}"
}
投稿の情報(いいね)

テストアカウントの投稿4件分の情報を取得してみた結果がこちらです。

こちらも、各投稿に対してのいいね数は取得できますが、誰がいいねを押しているのかという情報は取得できませんでした

✏️エンドポイント

GET https://graph.facebook.com/v21.0/{instagram_business_account_id}/media?fields=id,caption,like_count

📄結果(dataのみ)

"data": [
    {
      "id": "18061922143649599",
      "caption": "テスト4 🍚何もなし",
      "like_count": 0
    },
    {
      "id": "18283547947243155",
      "caption": "テスト3 🌊2枚投稿",
      "like_count": 0
    },
    {
      "id": "17951706047752871",
      "caption": "テスト2 🎋位置情報あり",
      "like_count": 0
    },
    {
      "id": "18059906035711505",
      "caption": "テスト1 🌳いいねとコメントあり",
      "like_count": 1
    }
  ]

 

投稿の情報(コメント)

各投稿のIDを上項で取得することができました。

テスト1の投稿に紐づくコメント情報を取得してみましょう。

✏️エンドポイント

GET https://graph.facebook.com/v21.0/18059906035711505/comments?fields=username,timestamp,text,like_count,replies{username,timestamp,text}

📄結果(dataのみ)

"data": [
    {
      "username": "{username}",
      "timestamp": "2024-11-09T12:48:54+0000",
      "text": "コメント2回目だよ!",
      "like_count": 0,
      "id": "18043393369898249"
    },
    {
      "username": "{username}",
      "timestamp": "2024-11-09T12:20:30+0000",
      "text": "コメントしたよ!",
      "like_count": 0,
      "replies": {
        "data": [
          {
            "username": "{username}",
            "timestamp": "2024-11-09T12:48:08+0000",
            "text": "@{username} 返信したよ!",
            "id": "17919757070905970"
          }
        ]
      },
      "id": "18035633321337321"
    }
  ]

コメント情報、しっかり取得できました!

調査中、迷ったところ

公式のドキュメントや色々なサイトを見ながら情報を収集してみましたが、サイトによっては、ビジネスアカウントID(🧀)ではなく、アクセストークンを使用するパターンのエンドポイントを使用していることがありました。

トークンの期限切れでエラーが返却されたり、種類の異なるトークンをエクスプローラに指定してしまって動かなくなったり。

大体の犯人(:トークン)が分かればすぐに解決できましたが、触り始めは少しだけ手こずりました。

結果を踏まえてできそうなこと

応募者が『フォロワーであるか』『投稿にいいねを押しているか』はAPIからは取得できなかったので、その条件分岐で抽選対象からはじくことは自動化できないことがわかりました。

(→Instagramのモバイルアプリでは、フォロワーおよびいいね一覧に検索機能が存在するので、抽選後に条件を目視で確認し、再抽選することは可能)

ですが、最も時間がかかるであろうコメントの集計はシステム化できそう。

今回の調査結果をもとに、後日、コメント集計&抽選のアプリケーションを実装してみようと思います!

 

さいごに

普段触っているアプリのデータ取得ということで、レスポンスが正しく返却されたときは結構テンションが上がりました。笑

それと、グラフAPIエクスプローラが使いやすかったです。エンドポイントに指定したフィールドが階層状に表示されていたり、項目を選択できたり。

アカウントの準備さえできれば、GETの実行は簡単に行えたので、興味がある方はぜひ触ってみてください!