Skip to content
mochamofuPublic

About

わどさん作成

Resources

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

 

History

6 Commits

Folders and files

Repository files navigation

SNS自動投稿システム

Googleスプレッドシートに書いた投稿文を、毎日決まった時間に X・Instagram・Threads へ自動投稿する仕組みです。GitHub Actions で動くため、サーバー不要・無料で運用できます。

仕組み

Googleスプレッドシート(投稿文の管理)
        │ 毎日決まった時間に GitHub Actions が起動
        ▼
  autopost(Python)── X API v2 ──────────▶ X に投稿
        │           ── Threads API ───────▶ Threads に投稿
        │           ── Instagram Graph API ▶ Instagram に投稿(画像必須)
        ▼
  結果列に「成功/失敗」を書き戻し(二重投稿防止)
  • 1つのSNSで失敗しても、他のSNSへの投稿は止まりません
  • 通信エラーやレート制限は自動でリトライします(最大3回・指数バックオフ)
  • 失敗した行は結果列に理由が書き込まれ、Actions の実行も「失敗」になるので気づけます

スプレッドシートの作り方

1行目をヘッダーにして、以下の列を用意します(日本語・英語どちらの列名でもOK):

日付 本文 画像URL 投稿先 結果
2026-06-15 今日の投稿です! https://example.com/a.jpg x,instagram,threads (空欄にしておく)
2026-06-16 テキストだけの投稿 x,threads
  • 日付: YYYY-MM-DD。その日になったら投稿されます(2026/6/15 形式も可)
  • 本文: 投稿テキスト(必須)
  • 画像URL: 誰でもアクセスできる公開URL。Instagram は画像必須(画像なしの行はInstagramへの投稿に失敗します)
  • 投稿先: カンマ区切りで x / instagram / threads。空欄なら3つ全部
  • 結果: スクリプトが自動で書き込みます。手動で触らないでください(値が入っている行は二重投稿防止のためスキップされます)

シートのタブ名は既定で「投稿」です(リポジトリ変数 WORKSHEET_NAME で変更可)。

セットアップ

1. スプレッドシートの接続 — 2つの方法

方法A: かんたんモード(おすすめ・Google Cloud不要)

  1. スプレッドシートの「共有」→ 一般的なアクセスを**「リンクを知っている全員」(閲覧者)**に変更
  2. スプレッドシートのURLの /d/ と /edit の間の文字列を GitHub Secret SPREADSHEET_ID に登録

これだけです。GOOGLE_CREDENTIALS_JSON を設定しなければ自動的にこのモードで動きます。 投稿済みの記録はシートの「結果」列ではなく、リポジトリ内の posted_log.json に自動コミットされます(二重投稿防止)。

⚠️ リンクを知っている人はシートを閲覧できるようになります。投稿予定の内容はいずれ公開されるものなので通常は問題ありませんが、気になる場合は方法Bへ。

方法B: フルモード(結果をシートに書き戻したい場合)

  1. Google Cloud Console でプロジェクトを作成し、Google Sheets API を有効化
  2. 「サービスアカウント」を作成し、JSONキーをダウンロード
  3. スプレッドシートの「共有」で、サービスアカウントのメールアドレス(xxx@xxx.iam.gserviceaccount.com)を編集者として追加
  4. JSONファイルの中身を丸ごと GitHub Secret GOOGLE_CREDENTIALS_JSON に登録
  5. 方法Aと同様に SPREADSHEET_ID も登録

2. X (Twitter)

  1. developer.x.com でアプリを作成(無料プランで可)
  2. アプリの権限を Read and write に変更してから、Keys and tokens で取得:
    • X_API_KEY / X_API_SECRET(API Key and Secret)
    • X_ACCESS_TOKEN / X_ACCESS_TOKEN_SECRET(Access Token and Secret)

3. Threads

  1. Meta for Developers でアプリを作成し、Threads API を追加
  2. threads_basic と threads_content_publish の権限で長期アクセストークンを取得
  3. Secret に登録: THREADS_ACCESS_TOKEN、THREADS_USER_ID(数値ID。不明なら未設定で可)

4. Instagram

  1. Instagramアカウントをプロアカウントにし、Facebookページと連携
  2. Meta for Developers のアプリに Instagram Graph API を追加
  3. instagram_basic と instagram_content_publish の権限で長期アクセストークンを取得
  4. Secret に登録: IG_ACCESS_TOKEN、IG_BUSINESS_ACCOUNT_ID(InstagramビジネスアカウントのID)

💡 資格情報を登録したSNSだけが有効になります。まず X だけで運用開始し、後から Instagram / Threads を追加することもできます。

5. 投稿時刻の設定

.github/workflows/daily-post.yml の cron を編集します。UTC指定なので日本時間から9時間引いてください:

投稿したい時刻(JST) cron
09:00 (既定) 0 0 * * *
12:00 0 3 * * *
20:00 0 11 * * *

使い方

  1. スプレッドシートに投稿予定の行を追加していく
  2. 毎日決まった時刻に自動投稿され、結果列に 2026-06-15 09:01 x:OK(tweet_id=…) / threads:OK(…) のように記録される
  3. 手動で今すぐ実行したいときは、GitHub の Actions → Daily SNS Post → Run workflow。「DRY RUN」にチェックを入れると、投稿せずに動作確認だけできます

投稿モード

リポジトリ変数 POST_MODE で切り替え:

  • date(既定): 日付列が今日の行を投稿
  • queue: 日付に関係なく、結果列が空の一番上の行を1件投稿(ストック型運用)

開発

pip install -r requirements.txt pytest
pytest          # テスト実行
DRY_RUN=true SPREADSHEET_ID=... GOOGLE_CREDENTIALS_JSON=... python -m autopost.main

About

わどさん作成

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages