WordPressの記事をInstagramに自動投稿する仕組みをPythonで作った話
この記事でわかること
- なぜInstagram自動投稿が難しいのか
- 使った技術スタック
- セットアップの手順
- 1. Instagramをプロアカウントに切り替える
- 2. Meta Developerでアプリを作成する
- 3. アクセス許可を追加する
WordPressの記事をInstagramに自動投稿する仕組みをPythonで作った話
WordPressに記事を投稿するたびに、手動でInstagramにも同じ内容を投稿するのは地味に手間がかかる。
今回はPythonスクリプトにInstagram Graph APIを組み込んで、WordPress投稿と同時にInstagramへも自動投稿される仕組みを作った。
なぜInstagram自動投稿が難しいのか
Instagramの自動投稿はX(Twitter)と比べてひと手間多い。理由は3つある。
- プロアカウント必須:個人アカウントのままではAPIを使えない
- Meta Developerの設定が必要:FacebookアプリにInstagram Graph APIを追加する作業がある
- アクセストークンの有効期限:60日で切れるので定期的に更新が必要
逆に言えば、この3つをクリアすれば完全自動化できる。
使った技術スタック
- Instagram Graph API(Meta公式)
- Python + requests
- 既存の
obsidian_to_wp.pyに関数を追記する形で実装
セットアップの手順
1. Instagramをプロアカウントに切り替える
Instagramアプリの設定から「プロアカウントに切り替える」を選ぶ。無料でできる。ビジネスかクリエイターのどちらでもOK。
2. Meta Developerでアプリを作成する

developers.facebook.comにアクセスして新しいアプリを作成する。ユースケースは「Instagramでメッセージとコンテンツを管理」を選ぶ。
アプリタイプは「生活者」ではなく、コンテンツ管理が使える設定を選ぶこと。
3. アクセス許可を追加する

アプリの「アクセス許可と機能」から以下を追加する。
instagram_business_basicinstagram_content_publishinstagram_manage_comments
instagram_content_publishが投稿に必須なので忘れずに。
4. Instagramテスターを登録して承認する

「アプリの役割」からInstagramテスターにアカウントを追加する。追加後、Instagramの設定(アプリとウェブサイト → テスターへのご招待)から承認が必要。
5. アクセストークンを生成する
「Instagramログインによる API設定」からアカウントを追加してトークンを生成する。このトークンとユーザーIDをスクリプトに設定する。
Pythonコードの実装
IG_USER_ID = "xxxxxxxxxxxxxxxxx"
IG_ACCESS_TOKEN = "IGAAVxxxxxx..."
IG_GRAPH_URL = "https://graph.instagram.com/v19.0"
def post_to_instagram(image_url, caption):
# Step 1: メディアコンテナ作成
r = requests.post(
f"{IG_GRAPH_URL}/{IG_USER_ID}/media",
params={
"image_url": image_url,
"caption": caption,
"access_token": IG_ACCESS_TOKEN,
},
timeout=30,
)
container_id = r.json().get("id")
# Step 2: 公開
requests.post(
f"{IG_GRAPH_URL}/{IG_USER_ID}/media_publish",
params={
"creation_id": container_id,
"access_token": IG_ACCESS_TOKEN,
},
timeout=30,
)
ポイントはAPIのベースURLがgraph.instagram.comであること。graph.facebook.comを使うと認証エラーになる。
また、image_urlには公開アクセスできるURLが必要。WordPressのメディアライブラリにアップロード済みの画像URLをそのまま使えるので、WordPress投稿フローと相性がいい。
投稿フローの全体像
Obsidian(Markdownファイル)
↓ 13_投稿する記事フォルダに保存
WordPress用サムネイル生成(1280×720 グリーン系)
↓
Instagram用サムネイル生成(1080×1080 テラコッタ系)← 今回追加
↓
WordPressにアップロード(WPサムネをアイキャッチに)
↓
WordPress記事公開
↓
X(Twitter)自動投稿
↓
Instagram自動投稿(IG専用サムネを使用)← 今回追加
MarkdownファイルをObsidianの所定フォルダに入れるだけで、WordPress・X・Instagramの3媒体に同時展開される。
追記:Instagram用サムネイルを別途生成するように改善
WordPressのサムネイル(1280×720)をそのままInstagramに使うと横長で文字が切れて見えてしまう。そこでInstagram専用のサムネイル(1080×1080の正方形)を別途自動生成するよう改善した。
色もWordPress用のグリーン系とは別に、Instagram向けのウォーム系(テラコッタ・オレンジ)に変更。投稿するたびに2種類のサムネが自動で生成される。
注意点:トークンは60日で期限切れ

Instagram Graph APIのアクセストークンは60日で有効期限が切れる。期限が来たらMeta Developerで再発行して、スクリプトのIG_ACCESS_TOKENを差し替える必要がある。
更新を忘れると静かに投稿が止まるので、カレンダーにリマインダーを入れておくのがおすすめ。
