今回はPythonでInstagram Graph APIを使ってプロフィールのインサイト情報を取得する方法について紹介したいと思います
関連記事:【Python】Instagram Graph APIで投稿情報を一括スクレイピングする
前準備
Instagram Graph APIを使用するためにはアクセストークンと自分のインスタアカウントの内部IDが必要になります。取得方法については以下に纏めていますのでまだの方はこちらを参考にしてください
関連記事:【2023年版】Instagram Graph APIのアクセストークンを取得する方法
上記で取得したものが正しければ以下のコードの下記部分を取得できたアクセストークンとインスタグラムの内部IDを置き換えて実行すると認証情報が取得されます
# アクセストークン
config[“access_token”] = ‘xxxx’
# インスタグラムビジネスアカウントID
config[‘instagram_account_id’] = “xxxx”
<認証情報確認コード>
import requests
import json
import datetime
from pprint import pprint
def basic_info():
# 初期化
config = dict()
# アクセストークン
config["access_token"] = 'xxxx'
# インスタグラムビジネスアカウントID
config['instagram_account_id'] = "xxxx"
# APIのバージョン
config["version"] = 'v16.0'
# APIドメイン
config["graph_domain"] = 'https://graph.facebook.com/'
# APIエンドポイント
config["endpoint_base"] = config["graph_domain"]+config["version"] + '/'
# 出力
return config
def debugAT(params):
# エンドポイントに送付するパラメータ
Params = dict()
Params["input_token"] = params["access_token"]
Params["access_token"] = params["access_token"]
# エンドポイントURL
url = params["graph_domain"] + "/debug_token"
# 戻り値
return InstaApiCall(url, Params, 'GET')
# リクエスト
params = basic_info() # リクエストパラメータ
response = debugAT(params) # レスポンス
# レスポンス
pprint(response)
Instagram Graph APIから投稿のインサイトを取得する
投稿のインサイトを取得するためにはまず投稿ごとの内部IDを取得する必要があります。というわけでまず以下のコードで投稿ごとの内部IDを取得しました
ここで使用している‘/media’コンポーネントに関連する各種仕様は公式ドキュメントを参照してください。
<アカウントの各投稿の内部IDを取得するサンプルコード>
def GetPostId(params) :
"""
***********************************************************************************
【APIエンドポイント】
https://graph.facebook.com/{graph-api-version}/{ig-user-id}/insights?fields={fields}&access_token={access_token}
***********************************************************************************
"""
# エンドポイントに渡すパラメータ
Params = dict()
Params['fields'] = 'id,caption,media_type,media_url,permalink,thumbnail_url,timestamp,username' # インサイト指標 # 集計期間
Params['access_token'] = params['access_token'] # アクセストークン
# エンドポイントURL
url = params['endpoint_base'] + params['instagram_account_id'] + '/media' # endpoint url
# 出力
post_ids = []
for i in InstaApiCall(url, Params, 'GET')['json_data']['data']:
post_ids.append([i['id'],i['permalink']])
return post_ids
data = GetPostId(params)
print(data)
<実行結果>

↑のような投稿の内部IDとそれに対応する投稿のURLがリスト形式で取得できます。
これを元にfor文で各内部IDをAPIのパラメーターに指定して個別投稿のインサイトを取得するAPIを叩くコードが以下になります。
def PostInsights(params, period='day', media_id=111) :
"""
***********************************************************************************
【APIエンドポイント】
https://graph.facebook.com/{graph-api-version}/{ig-user-id}/insights?metric={metric}&period={period}
***********************************************************************************
"""
# エンドポイントに渡すパラメータ
Params = dict()
Params['metric'] = 'carousel_album_engagement,carousel_album_impressions' # インサイト指標
Params['period'] = period # 集計期間
Params['access_token'] = params['access_token'] # アクセストークン
# エンドポイントURL
url = params['endpoint_base'] + str(media_id) + '/insights' # endpoint url
# 出力
return InstaApiCall(url, Params, 'GET')
for d in data:
print(PostInsights(params, period='day',media_id=d[0])['json_data'])
<実行結果>

実行すると↑のような感じでfieldsに指定したインサイト情報が投稿ごとに取得できます。ただビジネスアカウントに移行する前の行った投稿については内部IDが適切であっても「’Invalid parameter’, ‘type’: ‘OAuthException’, ‘code’: 100, 」と返されるので注意してください
関連記事:【Python】Instagram Graph APIを使ってプロフィールのインサイト情報を取得する
コメント