Skip to main content

概觀

revolution/laravel-fullfeed 是為 feed reader 從網頁擷取本文的 Laravel 套件。
使用各網站的規則(JSON),為每篇文章擷取所需的內容。
原本是私人 feed reader 應用內部使用的功能,將其抽出並公開為套件。

需求

  • PHP >= 8.4(使用 Dom\HTMLDocument)
  • Laravel >= 12.x

安裝

若使用開發版:

發佈設定檔與網站定義

此指令會建立以下項目:
  • config/fullfeed.php
  • resources/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。
  1. callable 指定的類別
  2. XPathExtractor
  3. SelectorExtractor
  4. after_callable 指定的類別
可在單純的 XPath/CSS 擷取前後插入自訂處理,便於對應各網站的特殊需求。

內建 Extractor

RemoveElements

刪除指定 selector 的元素。

ReplaceMatches

以正規表達式取代符合的字串(對 HTML 字串進行處理)。

StripTags

strip_tags() 相同方式移除標籤。

Squish

Str::squish() 刪除多餘空白。

新增自訂規則

  1. resources/fullfeed 新增 JSON 檔
  2. config/fullfeed.phppaths 加入
因為會使用 data.url 最先符合的規則,建議將新增檔案放在 paths 的最前面。
最後修改於 2026年8月2日