

# 如何按關鍵字及日期搜尋 X 帖文

你可以使用專用搜尋擷取工具的原生開始及結束時間輸入欄位，收集指定日期範圍內的公開 X 帖文。Actor 是託管的數據收集程式。Task 是已儲存的輸入預設設定。Actor 負責收集來源資料列，而你則負責分析數據。

X Search 公開版本 0.1.30 接受 queries（1 至 20 個）、searchMode（latest、top、photos、videos）、maxItemsPerQuery（1 至 1000），以及選填的 startTime 和 endTime 日期字串。將整份已儲存、包含 2 個查詢的清單，替換為 1 個你要使用的查詢及日期範圍。首次進行限定範圍的核查時，將 maxItemsPerQuery 設為 2，searchMode 設為 latest。只使用 1 組原生 startTime 和 endTime，不要在查詢內重複加入 since 或 until 篩選條件，也不要加入憑空設想的 expansion、includeReplies 或 page 輸入欄位。

目前的對照測試輸入使用 from:OpenAI，startTime 為 2026-07-07，endTime 為 2026-07-09，由此產生實際執行的查詢 from:OpenAI since:2026-07-07 until:2026-07-10。位於第 2 及第 3 位的 2 筆 7 月 9 日回覆資料列，其作者 ID 及 UTC createdAt 值均正確；此外，outsideTimeRange 彙總計數顯示排除了 1 筆資料，但沒有列出被排除的 ID。這證明了已核查的工作流程有效，並不代表已驗證所有搜尋運算子，或涵蓋完整歷史資料。

工具使用的原生欄位包括 inputQuery、executedQuery、searchMode、resultPosition、postId、postUrl、text、createdAt、authorId、authorHandle、authorUrl、isReply、isQuote、isRepost 及 observedAt。輸出的 searchMode 使用首字母大寫的 Latest，而輸入的列舉值則為小寫。資料集的資料列沒有狀態欄位。

## 限定日期範圍搜尋的操作步驟

1. 執行任何指令碼前，先寫下你要搜尋的詞句及日期範圍。初步核查時，將 maxItemsPerQuery 維持在較低數值，並將 searchMode 設為 latest。
2. 將範例查詢清單替換為單一查詢字串，將項目上限設為兩項，並使用原生 startTime 和 endTime 字串。不要在查詢字串內重複加入 since 或 until 條件。
3. 同時儲存 inputQuery 和 executedQuery 字串。例如，結束日期為 7 月 9 日的請求，會產生不包含 7 月 10 日的上限，例如 until:2026-07-10。
4. 解析原生 createdAt 時間戳記，並對照明確指定的 UTC 時間區間進行核查。畫面上只有日期的標示，除非經過轉換，否則不會自行採用本地時區。
5. 缺少時間戳記的資料須保留為未能判定，不要猜測。createdAt 欄位為空時，不能改用 observedAt 來判定其時間排序，因為 observedAt 只記錄收集時間。
6. 核查作者 ID、帳號名稱，以及回覆、引用或轉發等帖文類型。某位作者發出的帖文仍可能是回覆，未必是獨立的原創帖文。
7. 檢查 OUTPUT 的頂層欄位，例如 searchesQueued、searchesStarted、rowsSaved、outsideTimeRange、statusCounts 及 stopReason，同時檢查 queries 陣列內的 inputQuery、executedQuery、status、rowsSaved、outsideTimeRange 及 stopReason。頂層的 queries_exhausted 表示佇列處理已結束，並不表示已找盡所有符合條件的來源帖文；每個查詢的 max_items_per_query 則表示樣本已達到該查詢的數量上限。失敗、沒有結果及達到上限的結果須分開保留。你必須保留來源位置編號中的缺口，不要為已收集的資料列重新排序編號。
8. 交付附日期的資料明細，並附上輸入設定紀錄及排除計數。不要假設小量樣本能代表整個平台上的出現頻率或過往受歡迎程度。

## 原創虛構 UTC 邊界核查範例

下表是原創虛構的測試案例，用於測試 10 月 1 日至 10 月 4 日區間的 UTC 日期邊界。UTC 即協調世界時；半開區間包含開始時間，但不包含上限時間。按照已核查、只指定日期的處理慣例，要求包含 10 月 1 日至 3 日的日期範圍，對應的開始時間為 10 月 1 日 00:00 UTC，不包含在範圍內的上限時間則為 10 月 4 日 00:00 UTC。原生輸入所要求的 endTime 為 10 月 3 日，產生的 until 則為 10 月 4 日，兩者須分開保留。這是供讀者核查的測試案例，並非來自 Actor 對照測試的即時數據。

| 帖文 ID | 建立時間（UTC） | 觀測時間 | 是否在日期範圍內 |
| --- | --- | --- | --- |
| CandidateP1 | 2026-10-01 00:00:00 | 2026-10-01 01:00:00 | 範圍內 |
| CandidateP2 | 2026-10-03 23:59:59 | 2026-10-04 00:00:00 | 範圍內 |
| CandidateP3 | 2026-10-04 00:00:00 | 2026-10-04 01:00:00 | 範圍外 |
| CandidateP4 | null | 2026-10-03 12:00:00 | 未能判定 |

此測試案例有 2 筆位於範圍內的資料列、1 筆位於範圍外的資料列，以及 1 筆建立日期為 null、未能判定的資料列。收集到的樣本可能遺漏較早的帖文，因此某篇帖文沒有出現在樣本中，只表示樣本未有觀測到該帖文，並不表示 X 上沒有該帖文。

## 下一步

擴大日期樣本前，先將 1 個傳回的 createdAt 時間戳記，與你已儲存、實際執行的查詢作核對，並記錄它屬於範圍內、範圍外，還是未能確定。要執行搜尋，請使用 [X Search Scraper Actor](https://apify.com/chronometrica/x-search-scraper) 及 [X and Twitter Search API Dataset Task](https://apify.com/chronometrica/x-search-scraper/examples/x-twitter-search-api-dataset)。

## 來源與延伸閱讀

- [Reddit 網頁擷取討論](https://www.reddit.com/r/webscraping/comments/19bekjv/is_there_a_current_solution_to_scrap_tweets/)