跳转到主要内容

概览

revolution/laravel-fullfeed 是一个用于从网页中为 feed 阅读器抽取正文的 Laravel 包。 它通过每个站点的规则(JSON)来提取每篇文章所需的内容。
这个功能原本是在一个私有的 feed 阅读器应用中使用,后来被抽离出来做成了公开的包。

环境要求

  • 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 选择器(优先于 xpath
  • xpath: XPath 表达式
  • enc: 需要字符编码转换时指定的编码
  • callable: 作为前处理执行的自定义 Extractor 类(单个或数组)
  • after_callable: 最后作为后处理执行的 Extractor 类

Extractor 的执行顺序(Pipeline 模式)

FullFeed 通过 Laravel 的 Pipeline 模式,按顺序调度 Extractor。
  1. callable 指定的类
  2. XPathExtractor
  3. SelectorExtractor
  4. after_callable 指定的类
这样在简单的 XPath / CSS 抽取前后都可以插入自定义处理,可以很方便地应对不同站点的差异。

内置 Extractor

RemoveElements

删除指定选择器匹配到的元素。

ReplaceMatches

用正则表达式替换匹配到的字符串(针对 HTML 字符串处理)。

StripTags

相当于 strip_tags(),用来剥离标签。

Squish

使用 Str::squish() 去除多余空白。

添加自定义规则

  1. resources/fullfeed 中添加 JSON 文件
  2. 将其加入 config/fullfeed.phppaths
由于会使用第一个匹配 data.url 的规则,建议把新增文件放在 paths 的前面。
最后修改于 2026年7月18日