Python

【Python】Instagram Graph APIを使って投稿ごとのインサイトを取得する

この記事は約7分で読めます。

 

今回は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を使ってプロフィールのインサイト情報を取得する

 

 


プログラミング・スクレイピングツール作成の相談を受け付けています!

クラウドワークス・ココナラ・MENTAなどでPython・SQL・GASなどのプログラミングに関する相談やツール作成などを承っております!

過去の案件事例:

  • Twitter・インスタグラムの自動化ツール作成
  • ウェブサイトのスクレイピングサポート
  • ダッシュボード・サイト作成
  • データエンジニア転職相談

これまでの案件例を見る

キャリア相談もお気軽に!文系学部卒からエンジニア・データサイエンティストへの転職経験をもとに、未経験者がどう進むべきかのアドバイスを提供します。


スポンサーリンク
/* プログラミング速報関連記事一覧表示 */
ミナピピンの研究室

コメント

タイトルとURLをコピーしました