不可控的外部依賴(第三方站點、網路、加密、檔案系統)不代表不能測、不能重構——關鍵是找到每種依賴各自的替身策略。這個系列會用一個真實運作的 HLS 分段式串流下載工具為案例,從爬蟲抽象層設計、協定與加密處理、非同步下載引擎,到怎麼測試滿是外部依賴的程式碼,一步步把「能跑就好」的工具變成「改了會有信心」的工具。
前言:這種「小工具」有必要寫測試嗎? 「不就是一個爬蟲加下載器嗎?能跑就好,寫什麼測試?」 這大概是很多人對這類個人專案的第一反應。我自己也是這樣開始的:先求能...
前言:多支援一個來源站,就要多寫一份爬蟲嗎? 「反正每個網站長得不一樣,乾脆一個網站寫一支獨立的爬蟲程式,簡單暴力。」 這個想法短期最快,長期最痛。如果每個來源...
前言:呼叫端要知道「這個網址該用哪個爬蟲」嗎? 「呼叫端傳個網址進來,判斷一下網域是哪個站台,new 對應的爬蟲就好了吧?」 問題是:這個判斷邏輯只寫一次,很快...
前言:頁面裡的資料格式,不會照你希望的方式長 「網頁原始碼裡就是一段文字,用正規表達式撈出網址不就好了?」 理論上是。實務上,很多頁面會把設定資料用 JSON...
前言:「應該都是數字」這個假設,撐不了多久 「項目標題長得像『第 3 項』,正規表達式撈出數字轉成 int 就好了。」 這句話在資料乾淨的時候完全成立。但只要來...
前言:只有一個來源站的時候,需要 Template Method 嗎? 前幾天講的 Template Method、Factory,聽起來都是「顯然正確」的設計...
前言:爬蟲層到底該做到哪裡為止? 第一部這六天,講的都是「怎麼把爬蟲這一層設計得好維護」,但還沒明講一件事:爬蟲層的責任邊界劃在哪裡,超過這條線的事它不該碰。...
前言:「不就是一份片段網址清單」這個理解,缺了什麼? 第一次接觸 M3U8 的人,常見的理解是「打開看起來就是一堆網址列表,逐行下載就好」。這個理解在最簡單的情...
前言:「抓到清單」不代表「抓到片段列表」 昨天講的是最單純的情況:一份 M3U8 清單裡直接列著片段網址。但實務上常常打開一份 M3U8,裡面沒有任何 #EXT...
前言:片段加密了,但金鑰藏在哪? 昨天解析出的 Media playlist,除了片段清單,有時候還會帶一個 #EXT-X-KEY 標籤,宣告這份清單的片段是加...