概要
revolution/laravel-fullfeed は、フィードリーダー向けにWebページから本文を抽出するLaravelパッケージです。サイトごとのルール(JSON)を使って、記事ごとに必要なコンテンツを取り出します。
もともとはプライベートなフィードリーダーアプリで使われていた機能が切り出され、公開パッケージ化されています。
要件
- PHP >= 8.4(
Dom\HTMLDocumentを利用) - Laravel >= 12.x
インストール
設定ファイルとサイト定義の公開
config/fullfeed.phpresources/fullfeed
定義ファイルの自動更新(composer post-update-cmd)
composer update 時にサイト定義を自動で再公開したい場合は、composer.json に以下を追加します。
基本的な使い方
テスト
FullFeed::expects() でFacadeをスタブできます。
サイトルールファイル
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クラス
PipelineパターンとしてのExtractor実行順
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 の先頭に置くのがおすすめです。