Python

【Python】Instagram Graph APIで投稿情報をまとめてスクレイピングする

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

 

今回はPythonでInstagram Graph APIを使って特定のアカウントの投稿情報(キャプション タグ 投稿画像)などを取得する方法について紹介したいと思います

 

前準備

 

Instagram Graph APIを使用するためにはアクセストークンと自分のインスタアカウントの内部IDが必要になります。取得方法については以下に纏めていますのでまだの方は参考にしてください

 

関連記事:【2023年版】Instagram Graph APIのアクセストークンを取得する方法

 

 

Instagram Graph APIを使って特定のアカウントの投稿情報を取得

 

 

import requests
import json
import datetime
from pprint import pprint

def basic_info():
    # 初期化
    config = dict()
    #  アクセストークン
    config["access_token"]         = 'xxxx'
    # インスタグラムビジネスアカウントID
    config['instagram_account_id'] = "11111"
    # APIのバージョン
    config["version"]              = 'v16.0'
    # APIドメイン
    config["graph_domain"]         = 'https://graph.facebook.com/'
    # APIエンドポイント
    config["endpoint_base"]        = config["graph_domain"]+config["version"] + '/'
    # 出力
    return config


# APIリクエスト用の関数
def InstaApiCall(url, params, request_type):
    
    # リクエスト
    if request_type == 'POST' :
        # POST
        req = requests.post(url,params)
    else :
        # GET
        req = requests.get(url,params)
    
    # レスポンス
    res = dict()
    res["url"] = url
    res["endpoint_params"]        = params
    res["endpoint_params_pretty"] = json.dumps(params, indent=4)
    res["json_data"]              = json.loads(req.content)
    res["json_data_pretty"]       = json.dumps(res["json_data"], indent=4)
    
    # 出力
    return res


def getUserMedia(params,pagingUrl='') :
    """ 
    ***************************************************************************************
    【APIのエンドポイント】
    https://graph.facebook.com/{graph-api-version}/{ig-user-id}/media?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']                                                 # アクセストークン
    
    if pagingUrl=='':
        # 先頭のページリンク取得
        url = params['endpoint_base'] + params['instagram_account_id'] + '/media'
    else :
        # 特定のページリンク取得
        url = pagingUrl
    
    # 出力
    return InstaApiCall(url, Params, 'GET')

# パラメータ
params = basic_info()

# 結果出力(先頭ページ)
response = getUserMedia(params)
print ("\n----------"+str(response['json_data']['data'][0]["username"])+"の投稿内容 ----------\n")
for i, post in enumerate(response['json_data']['data']) :
    print ("\n----------投稿内容("+str(i+1)+")----------\n")
    print ("投稿日: " + post['timestamp'])
    print ("投稿メディアID: "+post['id'])
    print ("メディア種別: " + post['media_type'])
    print ("投稿リンク: " + post['permalink'])
    print ("\n投稿文: "  + post['caption'])
    
# 結果出力(2ページ目)
try:
    response = getUserMedia(params, response['json_data']['paging']['next'])
    print ("\n----------"+str(response['json_data']['data'][0]["username"])+"の投稿内容 ----------\n")
    for i, post in enumerate(response['json_data']['data']) :
        print ("\n----------投稿内容("+str(i+1)+")----------\n")
        print ("投稿日: " + post['timestamp'])
        print ("投稿メディアID: "+post['id'])
        print ("メディア種別: " + post['media_type'])
        print ("投稿リンク: " + post['permalink'])
        print ("\n投稿文: "  + post['caption'])
except:
    pass

 

実行すると、アカウントの投稿内容が出力されます。

 

関連記事:【GAS】Instagram Graph APIを使ってプロフィール画面のインサイト情報を取得する

関連記事:【GAS】Instagram Graph APIを使って投稿ごとのインサイト情報を取得する

 


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

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

過去の案件事例:

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

これまでの案件例を見る

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


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

コメント

  1. […] 関連記事:【Python】Instagram Graph APIで投稿情報を一括スクレイピングする […]

  2. […] 関連記事:【Python】Instagram Graph APIで投稿情報を一括スクレイピングする […]

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