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でアプリを作成する

Meta Developerのアプリ作成フォーム

developers.facebook.comにアクセスして新しいアプリを作成する。ユースケースは「Instagramでメッセージとコンテンツを管理」を選ぶ。

アプリタイプは「生活者」ではなく、コンテンツ管理が使える設定を選ぶこと。

3. アクセス許可を追加する

kasinomoriアプリのダッシュボード

アプリの「アクセス許可と機能」から以下を追加する。

  • instagram_business_basic
  • instagram_content_publish
  • instagram_manage_comments

instagram_content_publishが投稿に必須なので忘れずに。

4. Instagramテスターを登録して承認する

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に投稿が表示された結果画面

Instagram Graph APIのアクセストークンは60日で有効期限が切れる。期限が来たらMeta Developerで再発行して、スクリプトのIG_ACCESS_TOKENを差し替える必要がある。

更新を忘れると静かに投稿が止まるので、カレンダーにリマインダーを入れておくのがおすすめ。

関連記事

ブログ

BLOG

PAGE TOP