

# 按熱門或最新排序抽取 YouTube 留言樣本

如要抽取來源按熱門排名排列的精選留言，請使用「熱門」（Top）；如要按來源的最新排序抽樣，請使用「最新」（Newest）。也可同時使用兩者，擴大有範圍限制的樣本。每個排序標籤都須連同樣本限制一併保留。這些清單均由來源決定。兩者都不是隨機樣本，也都不代表所有觀眾的意見。

「熱門」是指來源列入熱門排名的留言。這是來源的排名，不是觀看指標，也不是經認證的相關性分數或互動分數。「最新」是指來源的最新排序。單憑這個排序，無法確定留言發表至今的確切時間。

Actor 是在託管環境中執行的資料收集程式。Actor 收集公開資料列，分析則由你進行。Task 是已儲存的輸入預設設定。公開 Task 只提供起始輸入，並不表示分析會自動執行。

本方法說明來源排序如何改變研究樣本。它不會標記垃圾留言、不會整理回覆樹狀結構、不會將未獲解答的問題排入待處理清單，也不會評定課堂留言的質素。本方法亦不涵蓋直播聊天室訊息。

## 先寫下研究問題

步驟 1。在選擇排序前，先寫下分析問題。

如果問題涉及來源按排名排列的精選留言，請使用「熱門」。如果問題涉及來源按最新排序排列的留言，請使用「最新」。如果兩個問題都重要，請將樣本分為 2 層。樣本層是樣本中一個預先明確界定的部分。在這裏，每層按擷取排序劃分。

排序決定哪些留言會進入樣本。請選擇符合研究問題的排序。不要只因某個排序支持你預先想要的結論，就選擇該排序。

步驟 2。列明已知影片、觀察時間、每種模式的數量上限，以及只涵蓋頂層留言的範圍。

數量上限是指頂層留言上限，即 `maxCommentsPerVideo`。請記下每份清單的具體時間。來源排序之後可能改變。稍後取得的清單並不是同一個樣本。

比較「熱門」與「最新」時，請使用相同的數量上限。上限不同會令主題比例難以比較。

請勿啟用回覆收集。回覆是頂層留言下的留言。加入回覆會改變計數單位。回覆資料列不計入頂層留言上限。本方法並未測試回覆。請在筆記中註明這項限制。

## 設定目前的輸入

本文使用的 [YouTube Comments Actor](https://apify.com/chronometrica/youtube-comments-scraper) 公開版本為 1.1.6。它接受以下輸入範圍。

- `startUrls` 接受 1 至 100 個已知公開影片網址或影片 ID。
- `maxCommentsPerVideo` 接受 1 至 1,000 的整數。
- `commentSortMode` 接受 `top`、`newest` 或 `both`。
- `includeReplies` 可啟用或停用。
- 啟用回覆收集時，`maxRepliesPerComment` 接受 1 至 100 的整數。

請使用已知的公開影片，不要使用私人影片。這個 Actor 不會替你搜尋影片。

在 2026 年 10 月 13 日，[YouTube Audience Comment Research Task](https://apify.com/chronometrica/youtube-comments-scraper/examples/youtube-audience-comment-research) 儲存了以下起始輸入：

```json
{
  "startUrls": ["https://www.youtube.com/watch?v=dQw4w9WgXcQ"],
  "maxCommentsPerVideo": 250,
  "commentSortMode": "both",
  "includeReplies": true,
  "maxRepliesPerComment": 10
}
```

設定目前的輸入

該輸入使用一段已知歌曲影片，上限為 250，模式為 `both`，並啟用回覆收集，每則留言最多收集 10 則回覆。請將歌曲影片換成你選定的一段已知公開影片。

首次小規模試行時，請使用一段已知公開影片。將 `maxCommentsPerVideo` 設為 2，將 `commentSortMode` 設為 `both`，並將 `includeReplies` 設為 false。

在 `both` 模式下，這個上限是頂層留言共用的總配額。上限為 2 時，配額會分配給「熱門」和「最新」。這不表示收集 2 列熱門留言，再加 2 列最新留言。文件所述的 `both` 行為，亦會在同一次執行中為每個留言 ID 只保留 1 列。

稍後進行明確比較時，做法則不同。請分別執行一次「熱門」清單收集和一次「最新」清單收集。兩次執行須設定相同且已列明的上限，並讓觀察時間具有可比性。這些上限各自只適用於一次執行，並非 `both` 模式下分配的共用配額。

## 分開閱讀資料列與執行摘要

已儲存的資料集每列代表一則公開留言或回覆。停用回覆收集時，每列應代表一則頂層留言。

| 欄位 | 含義 |
| --- | --- |
| `videoId` | 影片的公開 ID |
| `videoUrl` | 影片的公開網址 |
| `commentId` | 留言的公開 ID |
| `sortMode` | 該已儲存資料列保留的排序標籤 |
| `text` | 公開留言文字 |
| `publishedTimeText` | 來源提供的相對時間字句，如有 |
| `publishedAt` | 來源提供的確切發表時間，如有 |
| `updatedAt` | 來源提供的更新時間，如有 |
| `authorChannelId` | 留言作者的公開頻道 ID |
| `status` | 該資料列的結果 |
| `scrapedAt` | Actor 儲存該資料列的時間 |

`publishedAt` 可以是 null。null 表示數值缺失，不表示 0。`publishedTimeText` 不是確切時間。`scrapedAt` 是收集時間。切勿將 `scrapedAt` 複製為發表時間。

`parentCommentId`、`isReply` 和 `replyDepth` 亦是資料規格列明的欄位。這個只處理頂層留言的方法不會使用它們。

OUTPUT 執行摘要不是留言資料列。請從資料列讀取留言文字，從 OUTPUT 讀取執行計數及停止原因。

| 摘要欄位 | 應讀取的內容 |
| --- | --- |
| `inputsReceived` | 本次執行收到的輸入 |
| `uniqueVideosPlanned` | 計劃處理的影片數量，每段影片只計一次 |
| `duplicateVideosSkipped` | 已略過的重複影片輸入 |
| `videosAttempted` | 本次執行嘗試處理的影片 |
| `videosWithRows` | 有寫入資料列的影片 |
| `commentsWritten` | 已寫入的頂層留言資料列數量 |
| `repliesWritten` | 已寫入的回覆資料列數量 |
| `rowsWritten` | 已寫入的全部資料列數量 |
| `statusCounts` | 按每段影片或每項輸入的收集結果計數，不計算資料集的資料列數量。對照測試的 `ok` 計數為 1，資料集的資料列數量則為 2。 |
| `stopReasonCounts` | 按停止原因分類的計數 |
| `failedInputDetails` | 處理失敗或無法使用的輸入 |

一項已檢查的對照測試，對 `educationalvideo_uQrJ0TkZlc` 使用了 `both`。它儲存了 2 列文字非空且留言 ID 不同的頂層留言資料列。其中一列的 `sortMode` 為 `top`，另一列的 `sortMode` 為 `newest`。兩列的 `status` 均為 `ok`，`publishedAt` 均為 null。OUTPUT 報告的 `commentsWritten` 為 2，`repliesWritten` 為 0。停止原因為 `requested_comment_limit_reached`。

這 2 列使用了 2 個不同的留言 ID。這次執行顯示，`both` 能夠從該來源傳回資料列，並保留 `sortMode`。它並未證明樣本是隨機抽取，也未證明已取得每則留言或確定發表至今的確切時間。它並未證明每段影片都有相同的排序行為，也未顯示分開執行「熱門」與「最新」收集時的重疊情況。這次執行並未測試回覆。`repliesWritten` 為 0 並不等於已測試回覆。這次執行亦未測試是否完整涵蓋所有留言。

本文沒有使用該對照測試中的任何留言文字。回覆總數或讚好次數，不能證明你已取得每則留言。處理失敗或無法使用的輸入會出現在 OUTPUT 中。不要為這些輸入虛構留言資料列。

## 測試小規模試行，再選擇匯出方式

步驟 3。使用小規模的 `both` 試行，測試一段已知影片。

檢查 `videoId` 和 `videoUrl` 是否與該影片相符。檢查 `text` 是否非空。檢查是否有 `commentId` 和 `sortMode`。檢查 OUTPUT 的停止原因。達到共用上限時，預期的停止原因是 `requested_comment_limit_reached`。

如果 `publishedAt` 為 null，請將發表至今的時間保留為未知。不要填寫 0，也不要填寫收集時間。代表「最新」的 `sortMode` 只記錄該留言是從最新排序中擷取。只有來源提供實際日期時，才可確認發表至今的時間。

步驟 4。選擇一次涵蓋較廣的匯出，或 2 份獨立清單。

如果你想取得一份涵蓋較廣但有範圍限制的匯出資料，並會閱讀停止原因和計數，請使用 `both`。這份匯出資料仍然是一份有範圍限制的來源清單。

如要明確比較「熱門」與「最新」，請分開執行 2 次。記錄清單是某一模式儲存的原始清單，須連同該次輸入及觀察時間一併保留。請分別執行一次有範圍限制的「熱門」記錄清單收集，和一次有範圍限制的「最新」記錄清單收集。每次執行均須使用相同且已列明的上限，並讓觀察時間具有可比性。

這一對分開執行的收集，是你稍後要做的工作。已檢查的對照測試只執行了一次 `both`。不要將該對照測試報告為一對獨立清單的重疊結果。

步驟 5。先為每份記錄清單去除重複記錄，再以各份獨立清單建立聯集。

去除重複記錄，是指每個經核實的識別資料只計一次。識別鍵是 `videoId` 加 `commentId`，不是相同的文字。兩則留言即使文字相同，仍可有不同的 ID。

聯集是出現在任一記錄清單中、經核實且不重複的 ID 集合。交集是同時出現在兩份記錄清單中、經核實的 ID 集合。請以 `{top}`、`{newest}` 或 `{top, newest}` 保留所屬清單標記。

只有兩份獨立記錄清單均包含某個 ID，才可將該 ID 標記為 `{top, newest}`。在單次 `both` 執行中，去除重複記錄後只會保留一列和一個 `sortMode`。這個單一標籤無法揭示它是否亦屬於另一份清單。不要猜測。請保留原始記錄清單，讓所屬清單標記仍可核查。

如果 ID 缺失，就應保留為未能確認。不要將缺失 ID 當作 0 計算，也不要憑記憶重建遺失的所屬清單資料。

## 使用同一編碼準則，再比較集合

步驟 6。在每個樣本層使用相同的編碼準則。

編碼準則是判定某個主題的書面標準。請在標記資料列前先寫下準則。[對「熱門」和「最新」使用相同的判定標準](/zh-Hant/articles/%E5%85%A9%E5%90%8D-reddit%E7%95%99%E8%A8%80%E7%B7%A8%E7%A2%BC%E5%93%A1-%E4%B8%80%E8%87%B4%E6%80%A7/)。請連同標記保留原始文字及來源脈絡。

計算任何比例前，先核對以下 4 項。

- 預定輸入：你已列明的影片和模式。
- 未知 ID：你無法確認的識別資料。這些資料應保留為未能確認。
- 有效文字：你能夠編碼的非空文字。
- 狀態缺口：`status` 不是 `ok` 的資料列，以及任何執行失敗的模式。

分母是可納入比例計算的留言數量。只使用有已知 ID 的有效文字。請另行報告未知項目的數量。未知不等於 0。

主題計數計算的是樣本中的留言數量，不是人數。它不代表未有留言的觀眾，也不是人口特徵分析結果。

步驟 7。根據各份獨立清單中的 ID，計算交集和聯集。

先報告擷取結果中留言出現的總次數，再報告去除重複記錄後剩餘的不同 ID 數量。這裏的重疊，只指這些有範圍限制的清單在各自觀察時間的重疊，並不是佔該影片全部留言的比例。

如果某個模式執行失敗，缺失的清單並不等於成功取得的空清單。不要將該模式編碼為 0 則留言。比較結果仍屬未知。不同次執行之間，來源的可用情況可能改變。請在編碼前先閱讀 `failedInputDetails` 和 `stopReasonCounts`。

步驟 8。撰寫符合排序方式及研究問題的結論。

「熱門」中常見的主題，可能反映來源按排名排列的精選留言。這項結果反映的是來源排名，不是觀看次數，也不是經認證的分數。「最新」中常見的主題，可能反映來源最新排序中的近期活動。當 `publishedAt` 為 null 時，這不能證明發表至今的確切時間。

單次觀察不能證明某個主題增加，也不能證明某個主題減少。請儲存抽樣筆記、輸入及停止原因。稍後的讀者應能重複採用相同的抽樣選擇。

當資料收集受到限制時，部分讀者需要一個限定範圍的方法來研究真人留言。[這篇公開帖文](https://www.reddit.com/r/youtube/comments/1qcpg66/youtube_limits_api_comment_analysis_my_bad/)描述了這項需要。本文並未核實帖文所聲稱的數量限制。不要將該說法視為官方 API 目前的行為。這個 Actor 使用不同的方法，不會使用你的 YouTube API 金鑰。如果你亦使用官方 API，請自行查閱該 API 目前的官方原始文件。選擇「熱門」或「最新」能滿足抽樣需要，但不保證取得每則留言。

## 逐步查看一份虛構記錄清單

本節的記錄清單純屬虛構，用來說明計數方法。它不是 Actor 的結果，也不是那個只有 2 列資料的對照測試。本節並不聲稱使用了任何真實留言文字。

虛構的「熱門」記錄清單包含留言 ID A、B 和 C。虛構的「最新」記錄清單包含 B、D 和 E。全部 5 個 ID 都有來源識別資料及可供編碼的文字。

| ID | 在「熱門」記錄清單中 | 在「最新」記錄清單中 | 所屬清單 |
| --- | --- | --- | --- |
| A | 是 | 否 | `{top}` |
| B | 是 | 是 | `{top, newest}` |
| C | 是 | 否 | `{top}` |
| D | 否 | 是 | `{newest}` |
| E | 否 | 是 | `{newest}` |

擷取結果中依次出現 A、B、C、B、D 和 E，共出現 6 次。不同的 ID 是 A、B、C、D 和 E，即 5 則不重複的留言。B 在每份記錄清單中各出現一次，因此 B 是重複出現的留言。在聯集中只將 B 計算一次，同時保留它屬於兩份清單的標記。重複出現不等於垃圾留言。本方法不會判斷留言是否屬於垃圾留言。

聯集是 `{A, B, C, D, E}`，交集是 `{B}`。只屬於「熱門」的是 `{A, C}`，只屬於「最新」的是 `{D, E}`。

如果一次 `both` 匯出只為 B 儲存了值為 `top` 的 `sortMode`，便不能證明 B 亦屬於「最新」。只有獨立記錄清單才能顯示 B 同時出現在兩者中。

計算任何主題比例前，先核對這個虛構例子。

| 檢查項目 | 本虛構例子的結果 | 對比例計算的影響 |
| --- | --- | --- |
| 預定輸入 | 1 段影片，分開的「熱門」與「最新」記錄清單，上限相同 | 兩個樣本層可以比較 |
| 未知 ID | 沒有。A 至 E 均為已知 ID | 沒有未能確認的 ID 被當作 0 計算 |
| 有效文字 | 全部 5 則文字均可編碼 | 全部 5 則均可計入分母 |
| 狀態缺口 | 沒有。兩種模式均未失敗 | 兩份清單均不是收集失敗的清單 |

先確定編碼準則。只有留言詢問如何開始該項工作時，才標記為「開始操作的問題」這個主題。對每個 ID 使用相同準則。在這個虛構例子中，只有 A、B 和 D 符合準則，C 和 E 不符合。

| 集合 | 符合準則的 ID | 計入分母的 ID | 比例 | 百分比 |
| --- | --- | --- | --- | --- |
| 熱門 | A, B | A, B, C | 2/3 | 66.7% |
| 最新 | B, D | B, D, E | 2/3 | 66.7% |
| 聯集 | A, B, D | A, B, C, D, E | 3/5 | 60% |

兩個樣本層比例的平均值是 `(66.7 + 66.7) / 2`，等於 66.7%。這並不等於聯集的 60%。聯集只將重疊的 B 計算一次。將各樣本層的百分比取平均，無法得出不重複聯集的比例。

在這個虛構例子中，兩種排序的結果均為 66.7%。這項一致結果只涉及這 5 則留言，不能證明所有觀眾中有 60% 都有開始操作的問題。

在陳述結論前，請先列出 ID、所屬清單標記、編碼準則及分母。這裏可以作出的結論範圍有限。在這個虛構例子中，兩種有範圍限制的排序清單，其主題比例相同；去除重複記錄後，聯集中的主題比例為 5 則中的 3 則。

仍須遵守 2 項限制。如果 `publishedAt` 為 null，B 的確切日期仍然未知。B 屬於「最新」這件事不能提供該日期，`scrapedAt` 亦不能。如果另一段影片的「最新」模式執行失敗，你不能將該影片視為只有「熱門」留言的母體。比較結果會是未知。執行失敗的模式，不等於成功取得空結果的模式。

## 下一步

選定一個分析問題，列明排序方式和數量上限，並在為結果編碼前保留每種模式的記錄清單。開啟 [YouTube Comments Actor](https://apify.com/chronometrica/youtube-comments-scraper) 和 [YouTube Audience Comment Research Task](https://apify.com/chronometrica/youtube-comments-scraper/examples/youtube-audience-comment-research)。將歌曲影片換成一段已知公開影片。小規模試行時，將共用的 `maxCommentsPerVideo` 設為 2，將 `commentSortMode` 設為 `both`，並將 `includeReplies` 設為 false。

## 來源與延伸閱讀

- [YouTube Comments Actor](https://apify.com/chronometrica/youtube-comments-scraper)
- [YouTube Audience Comment Research Task](https://apify.com/chronometrica/youtube-comments-scraper/examples/youtube-audience-comment-research)
- [關於留言分析資料收集限制的公開帖文](https://www.reddit.com/r/youtube/comments/1qcpg66/youtube_limits_api_comment_analysis_my_bad/)