概觀
revolution/laravel-fullfeed 是為 feed reader 從網頁擷取本文的 Laravel 套件。使用各網站的規則(JSON),為每篇文章擷取所需的內容。
原本是私人 feed reader 應用內部使用的功能,將其抽出並公開為套件。
需求
- PHP >= 8.4(使用
Dom\HTMLDocument) - Laravel >= 12.x
安裝
發佈設定檔與網站定義
config/fullfeed.phpresources/fullfeed
自動更新定義檔(composer post-update-cmd)
若希望composer update 時自動重新發佈網站定義,可在 composer.json 加入以下設定。
基本用法
測試
可用FullFeed::expects() 對 Facade 進行 stub。
網站規則檔
items_all.json
items_all.json 是用於匯入 LDRFullFeed (wedata) 格式規則的基礎。Livedoor Reader 是日本著名的服務,雖然服務本身已停止,但目前規則資料主要作為資產保留下來。FullFeed 活用此歷史資料格式。
plus.json
plus.json 是自訂規則新增的範例。
規則設定欄位
url: 用於比對目標 URL 的正規表達式selector: CSS selector(優先於xpath)xpath: XPath 指定enc: 需要字元編碼轉換時的編碼指定callable: 作為前處理執行的自訂 Extractor 類別(單個/陣列)after_callable: 作為後處理最後執行的 Extractor 類別
作為 Pipeline pattern 的 Extractor 執行順序
FullFeed 使用 Laravel 的 Pipeline pattern 依序執行 Extractor。callable指定的類別XPathExtractorSelectorExtractorafter_callable指定的類別
內建 Extractor
RemoveElements
刪除指定 selector 的元素。ReplaceMatches
以正規表達式取代符合的字串(對 HTML 字串進行處理)。StripTags
以strip_tags() 相同方式移除標籤。
Squish
以Str::squish() 刪除多餘空白。
新增自訂規則
- 在
resources/fullfeed新增 JSON 檔 - 在
config/fullfeed.php的paths加入
data.url 最先符合的規則,建議將新增檔案放在 paths 的最前面。