Python転職初心者向けエンジニアリングブログ

Pythonに魅了されたあなたへ。エンジニアリングの扉を開く転職初心者向けのブログへようこそ。このブログでは、Pythonの奥深さに迫りながら、エンジニアリングへの転職に役立つ情報を提供しています。未経験者から始めるPythonエンジニアリングの世界への一歩を踏み出すためのガイダンス、ベストプラクティス、そして成功事例など、初心者の方でもわかりやすいコンテンツをお届けします。

Instagram Graph APIを使って、永久アクセストークンを取得しようとしたときにうまくいかない問題について

LYPプレミアム会員 python

こんにちは、皆さん!今回は、Instagram Graph APIを使って、永久アクセストークンを取得しようとしたときにうまくいかない問題について解説します。InstagramのAPIは、Facebookと連携しているため、トークンの管理が少し複雑になりがちです。特に、長期的にAPIを使いたい場合、アクセストークンを適切に管理することが重要です。

Instagramをビジネスやマーケティングで使っている方にとって、APIの利用は必須です。しかし、アクセストークンの期限切れや更新の方法で困った経験を持つ方も多いのではないでしょうか。この記事では、そのあたりの問題を解決し、永続的に使用できるアクセストークンの取得方法について詳しく解説していきます。


Instagram Graph APIのアクセストークンとは?

まずは、Instagram Graph APIを利用するための「アクセストークン」について簡単に説明します。アクセストークンは、APIを使用してInstagramのデータにアクセスするためのキーのようなもので、これがなければAPIの利用ができません。

アクセストークンには主に2つの種類があります。

  • 短期アクセストークン(Short-lived Access Token): 通常は1時間~24時間の有効期限
  • 長期アクセストークン(Long-lived Access Token): 最大60日間有効

一般的なAPI利用の場合、短期アクセストークンをまず取得し、それを長期アクセストークンに変換するプロセスが必要になります。ただし、「永久(無期限)」のアクセストークンという概念はInstagramにはなく、最大でも60日間有効です。そのため、定期的にトークンをリフレッシュするプロセスを組み込む必要があります。


なぜ永久アクセストークンが取得できないのか?

永久的なアクセストークンが取得できない理由として、Instagram側のセキュリティの問題があります。InstagramやFacebookでは、API利用者のアカウントがハッキングされないように、アクセストークンに有効期限を設けています。これにより、不正利用が発生した場合、トークンの期限が切れることで被害を最小限に抑えることができます。

そのため、どうしても「永続的」にアクセストークンを使いたい場合は、60日間の長期アクセストークンを定期的に更新する仕組みを構築する必要があります。


永続的に使えるアクセストークンを取得する方法

では、具体的に長期アクセストークンを取得し、それを定期的にリフレッシュする方法について説明していきます。ここでは、Node.jsを使った具体的なコード例を示しながら解説していきます。

1. Facebook Developersでアプリを作成する

Instagram Graph APIを利用するためには、まずFacebook Developersでアプリを作成し、そのアプリにInstagramのアクセス権限を設定する必要があります。

  1. Facebook for Developers にアクセスして、アカウントを作成します。
  2. 「Create App」ボタンをクリックして、新しいアプリを作成します。
  3. アプリ作成後、「Instagram Basic Display」を選択し、Instagramの基本機能にアクセスできるように設定します。

2. 短期アクセストークンを取得する

アプリの設定が終わったら、まずは短期アクセストークンを取得します。このプロセスでは、ユーザー認証を通じてトークンを取得します。次のURLを使って、Instagramにリクエストを送信します。

https://api.instagram.com/oauth/authorize
  ?client_id={app-id}
  &redirect_uri={redirect-uri}
  &scope=user_profile,user_media
  &response_type=code

上記のURLにアクセスすると、Instagramの認証画面が表示され、認証が完了するとリダイレクト先にcodeパラメータが渡されます。このcodeを使って、次のようにしてアクセストークンを取得します。

curl -X POST \
  https://api.instagram.com/oauth/access_token \
  -F client_id={app-id} \
  -F client_secret={app-secret} \
  -F grant_type=authorization_code \
  -F redirect_uri={redirect-uri} \
  -F code={code}

3. 長期アクセストークンに変換する

短期アクセストークンを取得したら、それを長期アクセストークンに変換します。次のエンドポイントを使って、トークンをリフレッシュします。

curl -X GET "https://graph.instagram.com/access_token
  ?grant_type=ig_exchange_token
  &client_secret={app-secret}
  &access_token={short-lived-access-token}"

これにより、最大60日間有効な長期アクセストークンが取得できます。


アクセストークンのリフレッシュ

長期アクセストークンも最大60日間しか有効ではないため、定期的にリフレッシュする必要があります。リフレッシュするには、次のAPIを定期的に実行します。

curl -X GET "https://graph.instagram.com/refresh_access_token
  ?grant_type=ig_refresh_token
  &access_token={long-lived-access-token}"

このリフレッシュリクエストを60日ごとに自動で行う仕組みを、サーバー側で設定しておくと良いでしょう。たとえば、Node.jsやPythonのスクリプトで自動化することができます。

サンプルコード(Node.js)

以下は、Node.jsでアクセストークンを定期的にリフレッシュする例です。

const axios = require('axios');
const TOKEN_URL = 'https://graph.instagram.com/refresh_access_token';
const LONG_LIVED_TOKEN = 'your-long-lived-token';

async function refreshToken() {
  try {
    const response = await axios.get(`${TOKEN_URL}?grant_type=ig_refresh_token&access_token=${LONG_LIVED_TOKEN}`);
    console.log('New Token:', response.data.access_token);
    // 新しいトークンを保存する処理を追加
  } catch (error) {
    console.error('Error refreshing token:', error);
  }
}

// 定期的にトークンをリフレッシュ
setInterval(refreshToken, 60 * 24 * 60 * 60 * 1000); // 60日ごとに実行

このスクリプトは、60日ごとにInstagramのアクセストークンを自動的にリフレッシュし、新しいトークンをコンソールに表示します。新しいトークンをデータベースに保存する処理を追加することで、システム内でアクセストークンを管理できます。


実行結果

Node.jsのサーバーを実行し、アクセストークンをリフレッシュするスクリプトが正常に動作すると、以下のようなログが出力されます。

New Token: EAAGm0PX4ZCpsBA...

まとめ

Instagram Graph APIを使って、永久的に使えるアクセストークンを取得するというのは少し複雑ですが、定期的なリフレッシュを行うことで、実質的に長期的にAPIを利用することが可能です。

  1. Facebook Developersでアプリを作成
  2. 短期アクセストークンを取得
  3. 長期アクセストークンに変換
  4. 定期的なリフレッシュ

これらの手順を実施することで、Instagramのデータに安定してアクセスできる環境を構築できます。