un tronc
SNS運用

Threadsをスプレッドシートから自動投稿する|Threads APIとGASで作った手順と、いいね数の自動取得

こんにちは!アントロンのNaokoです。

Threadsの投稿を、毎日決まった時間に手で出すのが負担になっていませんか?

私は別に運用しているThreadsアカウントで、Googleスプレッドシートに書いた投稿を、決めた時間に自動で投稿しています。使っているのは、Threads APIとGoogle Apps Script(GAS)です。

2026年8月18日〜19日には4本が自動で投稿され、予定時刻とのずれは2〜17分でした。この記事では、実際に動かしている構成と手順を紹介します。

1. Meta for Developersでアプリを作る

Meta for Developersでアプリを作り、ユースケースに「Threads APIにアクセス」を選びます。

Meta for Developersのアプリ一覧。作ったアプリが1つ、開発中になっている
  • 投稿するThreadsアカウントをテスターに追加し、Threads側で招待を承認する
  • 権限は threads_basic・threads_content_publish・threads_manage_insights(いいね数の取得用)の3つだけにする
Meta for Developersでアクセス許可を3つ追加した画面

threads_basic・threads_content_publish・threads_manage_insightsの3つが「テスト準備完了」になっています。

アクセストークンは、ユースケースの「設定」にある「ユーザートークン生成ツール」で出せます。ボタンを押すと、最初から長期アクセストークンが出ます。Threadsアカウントが公開になっていることが条件です。

アプリを作り始めてからトークンを取るまで、約1時間20分でした。うち約15分は、テスターの追加でエラーが出て止まっていた時間です。

2. スプレッドシートに投稿の台帳を作る

1行が1投稿です。列は次の11個にしています。

  • ID/カテゴリ/投稿ネタ/フック案/投稿本文
  • 投稿予定日時/ステータス
  • 投稿日時(実績)/投稿URL/ThreadsポストID/いいね数

ステータスは「下書き」「承認済み」「投稿済み」「エラー」の4つです。GASが投稿するのは「承認済み」で、予定日時を過ぎた行だけにしました。自分で読んでから投稿するためです。

最初は予定時刻になっても投稿されず、原因はスプレッドシートのタイムゾーンでした。画面では「12:00」と見えていても、GASは翌日の4:00と読んでいました。[ファイル]→[設定]でタイムゾーンを東京にして直りました。

3. GASで投稿する

スプレッドシートの[拡張機能]→[Apps Script]を開きます。すぐ下に「AppSheet」という別のサービスが並んでいるので、間違えないようにしてください。

スプレッドシートの[拡張機能]メニュー。Apps Scriptのすぐ下にAppSheetがある

台帳のシートで[拡張機能]を開いた画面です。投稿ネタの列はぼかしています。

アクセストークンは、シートにもコードにも書かず、スクリプトプロパティに保存します。Threads APIの投稿は2段階です。1回目でメディアコンテナを作り、2回目でそれを公開します。

// 1. メディアコンテナを作る
var container = callApi_('POST', '/' + userId + '/threads', {
  media_type: 'TEXT',
  text: text
});
// 2. 待ってから、メディアコンテナを公開する
Utilities.sleep(5000);
var published = callApi_('POST', '/' + userId + '/threads_publish', {
  creation_id: container.id
});

callApi_ は、スクリプトプロパティからトークンを読んで付ける関数です。私の仕組みは5秒待っていますが、Meta公式の投稿の説明では平均30秒待つことが推奨されています。

Apps Scriptのスクリプトプロパティにアクセストークンを保存した画面

プロパティ名は THREADS_ACCESS_TOKEN です。値は伏せています。

ほかに入れているのは次の3つです。

  • 本文は1本500字まで(公式の上限)なので、送る前に数える
  • 1回の実行で投稿するのは3件まで
  • LockServiceで、同時に2つ動かないようにする

4. 1件試してから、トリガーを設定する

初回の実行では「このアプリは Google で確認されていません」と出ます。自分で書いたスクリプトなので、[詳細]から進みます。プロジェクト名が「無題のプロジェクト」のままだと画面にもそう出るので、先に名前を付けておくと安心です。

初回の実行で出た「このアプリは Google で確認されていません」の画面

プロジェクト名が「無題のプロジェクト」のまま表示されています。メールアドレスは伏せています。

1件投稿できたら、GASの時間主導型トリガーを設定します。

  • 投稿用:15分おき
  • トークン更新用:月1回。失敗したらメールで知らせる

長期アクセストークンの有効期間は60日で、更新できるのは発行から24時間以上たってから期限までの間です(Meta公式)。期限を過ぎると取り直しになるので、月1回更新しています。

5. 投稿IDは文字列で書き戻す

投稿できたら、投稿日時・投稿URL・ThreadsポストIDを書き戻し、ステータスを「投稿済み」にします。

ここで一度、エラーが出ないまま値が壊れました。私の仕組みでは、本文を「---」だけの行で区切ると、2本目以降を直前の投稿につないで連投します。その連投のIDをカンマでつないで1つのセルに書き込んだところ、スプレッドシートが桁区切りの数字と読んで変換し、17桁のIDが元に戻せなくなったのです。書き込む前にセルを文字列の書式にして直しました。

6. いいね数を24時間後に1回だけ取る

投稿どうしを同じ条件で比べるため、いいね数は投稿から24時間後に1回だけ取ります。

  • 対象は「投稿済み」で、24時間たっていて、いいね欄が空の行
  • Threads APIの /{投稿ID}/insights?metric=likes を呼ぶ
  • 連投した投稿は、全部のいいねを足す
  • 専用のトリガーは作らず、投稿用の処理の最後で呼ぶ

最初に取れたのは11行ぶんで、いいねが付いていたのは3行(6・1・1)でした。

仕様確認:Meta公式 Threads Insights、Google公式GASトリガー

まずは、投稿したい文章を3本、スプレッドシートに書き出すところから始めてみてください。仕組みづくりを相談したい方は、お問い合わせフォームからどうぞ。

最後まで読んでくださりありがとうございました!

コメント