【Python】インスタ写真・動画を投稿|Instagram Graph APIで運用自動化

こんにちは、DXCEL WAVEの運営者(@dxcelwave)です!

こんな方におすすめ
  • Python環境でInstagram Graph APIを活用し、インスタ運用を効率化したい
  • Instagram Graph APIで「インスタに写真や動画をアップロードする方法」が知りたい
目次

Instagramの運用自動化とは|何ができるの?

Instagramの運用自動化とは、これまで手作業で行なってきたインスタ操作をシステムで自動化することを指します。

Instagramの運用自動化は、Meta(旧Facebook)が提供するInstagram Graph APIを活用すると実現でき、具体的に上記の操作が自動化できるようになります。

インスタアプリ上での操作は全て自動化できることが分かりますね。Instagram APIの機能を組み合わせると、インスタデータの自動収集、グラフ作成や結果考察という一連作業もまとめて効率化できるようになります。

Instagram運用の自動化|APIの利用

Instagramの自動操作を実現するには、Meta(旧Facebook)が提供するInstagram Graph APIを活用します。

InstagramグラフAPIとは、Meta開発者向けに提供されるInstagram運用の効率化ツールになります。

Instagramの運用自動化を検討する場合、Meta For Developersにて以下の認証情報を取得しておく必要があります。

  • アクセストークン
  • アプリID
  • アプリシークレット
  • インスタグラムビジネスアカウントID

上記の具体的な取得方法についてはこちらの記事で解説しています。

Python活用によるInstagram自動操作|本記事での解説内容

本記事ではPythonを活用して「インスタグラムに写真や動画をアップロードする方法」について解説します。

PythonでAPIを呼び出す際、requestsモジュールを活用します。インストールが未済の場合、ターミナルまたはコマンドプロンプトを開き、以下を実行しておきましょう。

pip install requests

【Python】Instagram Graph API呼出関数を作成

この見出しではInstagram Graph APIをPythonで呼び出すための関数作成方法について解説します。

【事前準備】Instagram Graph APIの認証用関数を作成

はじめに、Instagram Graph APIを使用するための、API認証用関数を作成します。

認証には以下のコードを用い、XXXX部分を必要な認証情報に書き換えて利用しましょう。

import requests
import json
import datetime
from pprint import pprint

def basic_info():
    # 初期
    config = dict()
    # 【要修正】アクセストークン
    config["access_token"]         = 'XXXXXXX'
    # 【要修正】アプリID
    config["app_id"]               = 'XXXXXXX'
    # 【要修正】アプリシークレット
    config["app_secret"]           = 'XXXXXXX'
    # 【要修正】インスタグラムビジネスアカウントID
    config['instagram_account_id'] = "XXXXXXX"
    # 【要修正】グラフバージョン
    config["version"]              = 'v14.0'
    # 【修正不要】graphドメイン
    config["graph_domain"]         = 'https://graph.facebook.com/'
    # 【修正不要】エンドポイント
    config["endpoint_base"]        = config["graph_domain"]+config["version"] + '/'
    # 出力
    return config

【事前準備】Instagram Graph API呼出関数を作成

続いて、インスタグラム Graph APIを呼び出す関数を作成します。

以下のコードをそのままコピー&ペーストしましょう。

import requests
import json
import datetime
from pprint import pprint

# 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

【事前準備】Instagram Graph APIでメディアを操作する関数

インスタグラムに写真や動画をアップロードする場合、以下に示すcreateMedia関数、getMediaStatus関数、publishMedia関数、getContentPublishingLimit関数を用います。

以下のコードをそのまま記述しましょう。

import time

# メディア作成
def createMedia(params) :
    """
    ******************************************************************************************************
    【画像・動画コンテンツ作成】
    https://graph.facebook.com/v5.0/{ig-user-id}/media?image_url={image-url}&caption={caption}&access_token={access-token}
    https://graph.facebook.com/v5.0/{ig-user-id}/media?video_url={video-url}&caption={caption}&access_token={access-token}
    ******************************************************************************************************
    """
    # エンドポイントURL
    url = params['endpoint_base'] + params['instagram_account_id'] + '/media'
    # エンドポイント用パラメータ
    Params = dict() 
    Params['caption'] = params['caption']           # 投稿文
    Params['access_token'] = params['access_token'] # アクセストークン
    # メディアの区分け
    if 'IMAGE' == params['media_type'] :
        # 画像:メディアURLを画像URLに指定
        Params['image_url'] = params['media_url']    # 画像URL
    else :
        # 動画:メディアURLを動画URLに指定
        Params['media_type'] = params['media_type']  # メディアタイプ
        Params['video_url']  = params['media_url']   # ビデオURL
    # 出力
    return InstaApiCall(url, Params, 'POST')


# メディアID別ステータス管理
def getMediaStatus(mediaObjectId, params) :
    """
    ******************************************************************************************************
    【APIエンドポイント】
    https://graph.facebook.com/v5.0/{ig-container-id}?fields=status_code
    ******************************************************************************************************
    """
    # エンドポイントURL
    url = params['endpoint_base'] + '/' + mediaObjectId
    # パラメータ
    Params = dict()
    Params['fields']       = 'status_code'          # フィールド
    Params['access_token'] = params['access_token'] # アクセストークン
    # 出力
    return InstaApiCall(url, Params, 'GET')

# メディア投稿
def publishMedia(mediaObjectId, params):
    """
    ******************************************************************************************************
    【APIエンドポイント】
    https://graph.facebook.com/v5.0/{ig-user-id}/media_publish?creation_id={creation-id}&access_token={access-token}
    ******************************************************************************************************
    """
    # エンドポイントURL
    url = params['endpoint_base'] + params['instagram_account_id'] + '/media_publish'
    # エンドポイント送付用パラメータ
    Params = dict()
    Params['creation_id'] = mediaObjectId           # メディアID
    Params['access_token'] = params['access_token'] # アクセストークン
    # 出力
    return InstaApiCall(url, Params, 'POST')

# ユーザの公開レート制限・使用率を取得
def getContentPublishingLimit( params ) :
    """ 
    ******************************************************************************************************
    https://graph.facebook.com/v5.0/{ig-user-id}/content_publishing_limit?fields=config,quota_usage
    ******************************************************************************************************
    """
    # エンドポイントURL
    url = params['endpoint_base'] + params['instagram_account_id'] + '/content_publishing_limit' # endpoint url
    # エンドポイント送付用のパラメータ
    Params = dict() 
    Params['fields'] = 'config,quota_usage'         # フィールド
    Params['access_token'] = params['access_token'] # アクセストークン

    return InstaApiCall(url, Params, 'GET')

Instagram Graph APIの呼出関数の動作チェックをチェックリストに沿って行いたい場合、以下の記事をご覧下さい。

【Python】Instagramに画像を投稿

Python環境でInstagram Graph APIを活用し、インスタ画像を投稿する方法を以下に示します。

media_urlに投稿したい写真のリンク、media_captionに投稿文を記載した上でコードを実行してみましょう。

# 画像投稿
def instagram_upload_image(media_url, media_caption):
    # パラメータ
    params = basic_info()
    params['media_type'] = 'IMAGE'         # メディアType
    params['media_url']  =  media_url      # メディアURL
    params['caption']    = media_caption
    
    # APIでメディア作成&ID発行
    imageMediaId = createMedia(params)['json_data']['id']
    
    # メディアアップロード
    StatusCode = 'IN_PROGRESS';
    while StatusCode != 'FINISHED' :
        # メディアステータス取得
        StatusCode = getMediaStatus(imageMediaId,params)['json_data']['status_code']
        # 待ち時間
        time.sleep(5)

    # Instagramにメディア公開 
    publishImageResponse = publishMedia(imageMediaId,params)
    # 出力
    print("Instagram投稿完了")
    return publishImageResponse['json_data_pretty']


# 【要修正】投稿内容
media_url      = 'https://di-acc2.com/wp-content/uploads/2022/07/cropped-DXCELWAVE.jpg'  # 画像
media_caption  = '投稿文を記述'                                                            # 投稿文

# 関数実行
instagram_upload_image(media_url, media_caption)

【Python】Instagramに動画を投稿

Python環境でInstagram Graph APIを活用し、インスタ動画を投稿する方法を以下に示します。

media_urlに投稿したい動画のリンク、media_captionに投稿文を記載した上でコードを実行してみましょう。

# 動画投稿
def instagram_upload_video(media_url, media_caption):
    # パラメータ
    params = basic_info()
    params['media_type'] = 'VIDEO'
    params['media_url']  = media_url
    params['caption']    = media_caption

    # APIで動画メディア作成&ID発行
    videoMediaId = createMedia(params)['json_data']['id']

    # メディアアップロード
    StatusCode = 'IN_PROGRESS';
    while StatusCode != 'FINISHED' : 
        # メディアステータス取得
        StatusCode = getMediaStatus(videoMediaId, params) ['json_data']['status_code'] 
        # 待ち時間
        time.sleep(5) 

    # Instagramに動画公開
    publishVideoResponse = publishMedia( videoMediaId, params )
    # API制限確認
    contentPublishingApiLimit = getContentPublishingLimit( params ) 

    # 出力
    print("Instagram投稿完了")
    return contentPublishingApiLimit['json_data_pretty']


# 【要修正】投稿内容
media_url      = 'https://動画メディア.mp4'  # 画像
media_caption  = '投稿文を記述'              # 投稿文

# 関数実行
instagram_upload_video(media_url, media_caption)

【参考】インスタグラム・その他SNSの運用効率化

当サイトではSNS運用を効率化するための方法を多数解説しています。

Instagram Graph APIを活用したインスタ運用の自動化

カテゴリ記事名
API利用手順Instagram Graph APIの使い方・認証手順・できること
API利用手順Instagram Graph APIの動作チェック
API利用手順有効期限を長期化したアクセストークン取得
インスタ運用効率化Instagramユーザー情報取得
インスタ運用効率化Instagramに投稿したメディア情報取得
インスタ運用効率化Instagramハッシュタグの検索結果取得
インスタ運用効率化Instagramに写真や動画をアップロード
インスタ運用効率化Instagramメディア・ユーザーインサイト取得

インスタグラム自動運用ツールでインスタ運用を効率化

Python言語で構築することに障壁がある方向けに、ノーコードかつ手軽にインスタグラム運用・管理ができるようになるツールを紹介します。Pythonで実装したインスタ機能と上記システム機能を比較し、お好みの方法を選択できると良いですね。

Twitter運用の効率化

最後に

この記事が気に入ったら
フォローしてね!

本記事をシェア!
目次