概览
revolution/laravel-fullfeed 是一个用于从网页中为 feed 阅读器抽取正文的 Laravel 包。 它通过每个站点的规则(JSON)来提取每篇文章所需的内容。这个功能原本是在一个私有的 feed 阅读器应用中使用,后来被抽离出来做成了公开的包。
环境要求
- 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 选择器(优先于xpath)xpath: XPath 表达式enc: 需要字符编码转换时指定的编码callable: 作为前处理执行的自定义 Extractor 类(单个或数组)after_callable: 最后作为后处理执行的 Extractor 类
Extractor 的执行顺序(Pipeline 模式)
FullFeed 通过 Laravel 的 Pipeline 模式,按顺序调度 Extractor。callable指定的类XPathExtractorSelectorExtractorafter_callable指定的类
内置 Extractor
RemoveElements
删除指定选择器匹配到的元素。ReplaceMatches
用正则表达式替换匹配到的字符串(针对 HTML 字符串处理)。StripTags
相当于strip_tags(),用来剥离标签。
Squish
使用Str::squish() 去除多余空白。
添加自定义规则
- 在
resources/fullfeed中添加 JSON 文件 - 将其加入
config/fullfeed.php的paths
data.url 的规则,建议把新增文件放在 paths 的前面。