第 7 章
抓取成效數據與疑難排解
把每條帖的瀏覽、讚好、回覆數抓回試算表,以及最常見的出錯情況怎樣修。
系統已經會自動發帖。最後一步:把成效數據抓回試算表,讓你知道哪一種內容真的有人看。
1. 先加兩欄
在 Calendar 的標題列補上這幾欄(接在 Post URL 之後):
| G | H | I | J |
|---|---|---|---|
| Post ID | Views | Likes | Replies |
Post ID 是關鍵。 Threads 的成效查詢要用帖文的 media id,而永久連結推不回 media id——所以必須在發佈當下就記下來。
2. 修改發佈流程,記下 media id
publishRow_ 本來就有回傳 id,只是之前沒有寫進試算表。在 postSelectedRow 與 runScheduler 兩處,各加一行:
// postSelectedRow 裡,接在寫入 Post URL 之後:
sh.getRange(row, COL.POST_ID + 1).setValue(res.id);
// runScheduler 裡,接在寫入 Post URL 之後:
sh.getRange(r + 1, COL.POST_ID + 1).setValue(res.id);
並且更新欄位對照表:
var COL = {
STATUS: 0, WHEN: 1, TEXT: 2, LINK: 3, POSTED: 4, URL: 5,
POST_ID: 6, VIEWS: 7, LIKES: 8, REPLIES: 9,
};
只有這次改動之後發佈的帖才會有
Post ID。之前發的帖抓不到數據——除非你手動去補。
3. 加入成效程式碼
/* ========================= 成效數據 ========================= */
/**
* 抓取每一行的成效數據。
*
* ⚠️ 查詢參數是 metric(單數)。用 metrics(複數)會直接被 API 拒絕,
* 而且錯誤訊息是「The parameter metric is required.」,很容易被
* 誤會成「沒有數據」。
*/
function refreshInsights() {
var sh = sheet_();
var data = sh.getDataRange().getValues();
var token = token_();
var updated = 0;
var firstError = "";
for (var r = 1; r < data.length; r++) {
var id = String(data[r][COL.POST_ID] || "").trim();
if (!id) continue;
var res = UrlFetchApp.fetch(
API + "/" + id + "/insights?metric=views,likes,replies" +
"&access_token=" + encodeURIComponent(token),
{ muteHttpExceptions: true }
);
var body = res.getContentText() || "{}";
var parsed = {};
try { parsed = JSON.parse(body); } catch (err) { /* 交由下面處理 */ }
if (!parsed.data) {
if (!firstError) firstError = body.slice(0, 200);
continue;
}
parsed.data.forEach(function (m) {
// Threads 視乎指標,回傳 values[0].value 或 total_value.value
var value = (m.values && m.values.length)
? m.values[0].value
: (m.total_value ? m.total_value.value : null);
if (value === null || value === undefined) return;
var col = { views: COL.VIEWS, likes: COL.LIKES, replies: COL.REPLIES }[m.name];
if (col !== undefined) sh.getRange(r + 1, col + 1).setValue(value);
});
updated++;
}
toast_(
updated
? "已更新 " + updated + " 條的數據。"
: "沒有數據可更新。" + (firstError ? " 錯誤:" + firstError : "")
);
}
加進選單:
.addItem("更新成效數據", "refreshInsights")
4. 試一次
發一條新帖(這次會記下 Post ID),等幾分鐘讓數據累積,然後選 Threads → 更新成效數據。
Views / Likes / Replies 應該會填上數字。
如果收到權限相關的錯誤,代表授權時沒有包含
threads_manage_insights。回第 2 章加入該權限,然後重新走一次「連接 Threads」。
5. 讓它自動更新(選用)
在 runScheduler 最後加一行,順便更新數據:
try { refreshInsights(); } catch (err) { Logger.log(err.message); }
疑難排解總表
| 現象 | 最可能的原因 | 怎樣修 |
|---|---|---|
| 授權頁說無法使用 | 測試者邀請未接受 | 第 2 章第 5 步,在 Threads 接受邀請 |
redirect_uri 不符 | Meta 登記的網址 ≠ /exec | 逐字比對;注意結尾斜線、/dev vs /exec |
| 改了程式碼但行為沒變 | 沒有重新部署 | 編輯現有部署(不要新增),版本選「新版本」 |
| 重新部署後授權壞了 | 你按了「新增部署作業」,網址變了 | 用新網址更新 Meta,或改回編輯舊部署 |
| 到時間沒有發佈 | 觸發器沒安裝 | Threads → 安裝自動排程;檢查 ⏰ 觸發條件 |
| 發佈時間差了幾小時 | 試算表與指令碼時區不一致 | 兩邊都設成同一時區 |
| 用了一兩個月後全部失敗 | 權杖過期 | 確認 runScheduler 有跑(續期在裡面);或重新連接 |
| 成效欄永遠空白 | 用了 metrics 而不是 metric,或缺 insights 權限 | 見上文 |
| 主帖出了、回覆連結沒有 | 回覆失敗(刻意不影響主帖) | 看「執行項目」記錄 |
| 選單不見了 | onOpen 只在開檔時跑 | 重新整理試算表 |
你做出了什麼
一套完整的 Threads 自動發帖系統:
- 內容寫在你自己的試算表
- 到時間自動發佈,主帖乾淨、連結在回覆
- 權杖自己續期
- 成效數據自動回填
沒有伺服器、沒有月費,權杖與內容都在你自己手上。
想做得更遠?
這套系統的天花板,是它只能發到你自己的帳戶——因為那是開發模式應用程式的限制(第 1 章講過)。
如果你的需求是替客戶管理多個帳戶,就要走 Meta App Review:商業驗證、示範錄影、隱私政策、資料刪除端點,審核往往需時數週。那是另一個量級的工程。
我們把這條路走完了。Heion Social 是我們做的託管版本:已通過審核、多帳戶、內容庫加審批流程,連接帳戶只需要按一下,不需要碰開發者後台。
如果你只是想幫自己或自己公司省下每天出帖的工序,你剛剛做的這套已經完全夠用——那正是我們自己在用的東西。
有做不通的地方,或者想我們幫你搭一套,歡迎聯絡。
步驟最後驗證於 2026年7月19日