どうもイトサル(@itosaru)です。
この記事ではPythonプログラムからinstagramグラフAPI(以下:グラフAPI)を使ってinstagramに画像を投稿する方法について説明します。
ざっくりと投稿の流れについて説明すると
- 画像用コンテナを作成する
- 作成したコンテナを公開する
の2ステップを踏むことになります。
画像用コンテナを作成する
グラフAPIでの画像投稿は直接画像を投稿できるわけではなく、事前にinstagramのサーバーへのアップロードが必要です。
画像のアップロード後、instagramのサーバー上に投稿情報が格納される箱が自動的に作成されます。
この箱がコンテナです。
コンテナの生成にはmediaエンドポイントを使う
mediaエンドポイントをPOST通信で実行することでコンテナを作成できます。
コンテンツ取得の際のmediaエンドポイントはGET通信なので注意しましょう。
リクエストURLの書き方としてはこのようになります。
https://graph.facebook.com/v15.0/ビジネスアカウントID/media?image_url=画像のURL&caption=キャプション&access_token=アクセストークン3
これらのパラメータでさらに注意点を挙げると
- 画像ファイルの拡張子はJPGでなければならない
- 画像ファイルはサーバーに置き、URLで指定する必要がある
- キャプションにハッシュタグ(#)を入力することもできる
その場合ハッシュタグを「%23」に置き換える
の3点です。
どれか一つでも条件を満たしていないとコンテナの作成時にエラーになるので気を付けましょう。
コンテナの状態を確認する
作成したコンテナは24時間で有効期限が切れます。
有効期限が切れたコンテナは公開することができず、instagramへの画像投稿もできません。
コンテナ生成後すぐに画像を公開しない場合は状態確認をした方が良いでしょう。
コンテナの状態を確認するには下記のリクエストを実行しましょう。
https://graph.facebook.com/コンテナID?fields=status,status_code&access_token=アクセストークン3
実行結果は5つの区分のいずれかで返ってきます。
No | 区分 | 説明 |
---|---|---|
1 | EXPIRED | コンテナの有効期限(24時間)が切れた状態 |
2 | ERROR | コンテナの公開ができなかった状態 |
3 | FINISHED | コンテナの公開準備ができている状態 |
4 | IN_PROGRESS | コンテナ公開の処理中の状態 |
5 | PUBLISHED | コンテナの公開が完了した状態 |
作成したコンテナを公開する
コンテナ作成が完了すると、該当のコンテナのIDが自動で附番されます。
このコンテナIDを使ってコンテナ公開のリクエストを実行すると、instagramのタイムライン上に画像が投稿されます。
コンテナの公開にはmedia_publishエンドポイントを使う
リクエストの書き方は下記のようになります。
https://graph.facebook.com/v15.0/ビジネスアカウントID/media_publish?creation_id=コンテナID&access_token=アクセストークン3
こちらもコンテナ生成と同じくPOST通信でリクエストする必要があるので注意しましょう。
サンプルプログラム
下のものがグラフAPIを使ってinstagramに画像を投稿するサンプルプログラムです。
import requests
api_version = "v15.0"
business_id = "ビジネスアカウントID"
access_token = "アクセストークン3"
print("\n区分を入力してください\n")
print("1:画像用コンテナ作成")
print("2:画像用コンテナ情報取得")
print("3:画像投稿")
kbn = int(input())
if(kbn == 1):
img_url = input("画像のURLを入力してください\n")
caption = str(input("画像の説明文を入力してください\n"))
converted_caption =caption.replace("#","%23")
url = "https://graph.facebook.com/{0}/{1}/media?image_url={2}&caption={3}&access_token={4}".format(api_version, business_id, img_url, converted_caption, access_token)
#print(url)
response = requests.post(url)
if(response.status_code == 200):
print("コンテナ作成が完了しました")
else:
print("コンテナ作成に失敗しました")
print(response.text)
if(kbn == 2):
container_id = input("コンテナIDを入力してください\n")
url = "https://graph.facebook.com/{0}?fields=status,status_code&access_token={1}".format(container_id, access_token)
response = requests.get(url)
print(response.text)
if(kbn == 3):
container_id = input("コンテナIDを入力してください\n")
url = "https://graph.facebook.com/{0}/{1}/media_publish?creation_id={2}&access_token={3}".format(api_version, business_id, container_id, access_token)
response = requests.post(url)
if(response.status_code == 200):
print("画像投稿が完了しました")
else:
print("画像投稿に失敗しました")
print(response.text)
プログラムについて簡単に説明しておきます。
実行したい処理を数値で入力します。
- 1:画像コンテナを生成する
- 2:生成したコンテナの状態を確認する
- 3:画像コンテナを公開し、instagramに画像を投稿する
instagramへの投稿は1と3を実行するだけで可能です。
プログラムの実行結果
このサンプルプログラムを実行してみましょう。
投稿する画像はPixabayにある、こちらの画像を使わせていただきました。

コンテナを公開する
区分1を入力して、画像のURLを入力、キャプションを入力して実行しました。
コンテナ生成が正常に完了すると下図のようにコンテナIDが返ってきます。

コンテナの状態を確認する
区分2を入力してコンテナの状態を確認します。
附番されたコンテナIDを入力すると下図のようにステータスが返ってきます。

ステータスが「FINISHED」で返ってきたのでコンテナの公開はできそうですね。
コンテナを公開する
区分3を入力、コンテナIDを入力してコンテナを公開します。
公開が完了するとinstagram上に投稿されたメディアIDが返ってきます。

実際にinstagramのタイムラインを確認した結果がこちらです。

正しく指定した画像、キャプションでinstagramへの投稿ができていました!
まとめ
この記事ではグラフAPIを使ってinstagramに画像を投稿する方法についてお伝えしました。
今回の内容のまとめです。
- instagramへの画像投稿はコンテナを作成して行う
- 投稿できる画像の拡張子はJPG形式のみ
- 作成したコンテナは24時間有効、有効期限が切れたら公開できない
- コンテナを公開するとinstagramに画像が投稿される
- コンテナの生成、公開ともに通信はPOSTを使う
コメント