Passer au contenu principal

Vue d’ensemble

revolution/laravel-fullfeed est un package Laravel qui extrait le corps de texte des pages web pour les lecteurs de flux.
En utilisant des règles par site (JSON), il extrait le contenu nécessaire pour chaque article.
À l’origine, cette fonctionnalité était utilisée dans une application privée de lecteur de flux ; elle a été extraite et publiée en tant que package public.

Prérequis

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

Installation

composer require revolution/laravel-fullfeed
Pour utiliser la version de développement :
composer require revolution/laravel-fullfeed:dev-main

Publication du fichier de configuration et des définitions de sites

php artisan vendor:publish --tag=fullfeed
Cette commande crée les éléments suivants :
  • config/fullfeed.php
  • resources/fullfeed

Mise à jour automatique des fichiers de définitions (composer post-update-cmd)

Si vous souhaitez re-publier automatiquement les définitions de sites lors de composer update, ajoutez ce qui suit à composer.json.
{
  "scripts": {
    "post-update-cmd": [
      "@php artisan vendor:publish --tag=laravel-assets --ansi --force",
      "@php artisan vendor:publish --tag=fullfeed-site --ansi --force"
    ]
  }
}

Utilisation de base

use Revolution\Fullfeed\Facades\FullFeed;

$html = FullFeed::get($url);

Tests

Vous pouvez utiliser FullFeed::expects() pour stubber la Facade.
use Revolution\Fullfeed\Facades\FullFeed;

FullFeed::expects('get')
    ->with('https://example.com/article/1')
    ->andReturn('<div>Main content</div>');

Fichiers de règles de sites

items_all.json

items_all.json sert de base pour intégrer les règles au format LDRFullFeed (wedata).
Livedoor Reader était un service populaire au Japon ; le service lui-même est terminé, mais les données de règles subsistent principalement comme un patrimoine. FullFeed exploite ce format de données historique.

plus.json

plus.json est un exemple pour ajouter vos propres règles.
{
  "name": "note",
  "data": {
    "url": "^https://note\\.com/",
    "selector": "div[data-name=\"body\"]",
    "xpath": "//div[@data-name=\"body\"]",
    "enc": "UTF-8",
    "callable": "App\\FullFeed\\CustomExtractor"
  }
}

Champs de configuration des règles

  • url : expression régulière à faire correspondre à l’URL cible
  • selector : sélecteur CSS (prioritaire sur xpath)
  • xpath : spécification XPath
  • enc : encodage si une conversion de jeu de caractères est nécessaire
  • callable : classe Extractor personnalisée exécutée en pré-traitement (seule ou en tableau)
  • after_callable : classe Extractor exécutée en dernier, en post-traitement

Ordre d’exécution des Extractors en tant que pattern Pipeline

FullFeed enchaîne les Extractors dans l’ordre en utilisant le pattern Pipeline de Laravel.
  1. Classes spécifiées dans callable
  2. XPathExtractor
  3. SelectorExtractor
  4. Classes spécifiées dans after_callable
Comme vous pouvez intercaler du traitement personnalisé avant et après une simple extraction XPath/CSS, la conception permet de gérer facilement les particularités de chaque site.

Extractors intégrés

RemoveElements

Supprime les éléments correspondant aux sélecteurs indiqués.
{
  "after_callable": ["Revolution\\Fullfeed\\Extractor\\RemoveElements"],
  "remove": ["svg", "button", "script"]
}

ReplaceMatches

Remplace les chaînes correspondant à une expression régulière (traitement sur la chaîne HTML).
{
  "after_callable": ["Revolution\\Fullfeed\\Extractor\\ReplaceMatches"],
  "replace": [
    {
      "pattern": "/ data-(h-)?index=\"[0-9]+\"/",
      "replace": ""
    }
  ]
}

StripTags

Retire les balises, équivalent de strip_tags().
{
  "after_callable": ["Revolution\\Fullfeed\\Extractor\\StripTags:a,img"]
}

Squish

Supprime les espaces superflus avec Str::squish().
{
  "after_callable": ["Revolution\\Fullfeed\\Extractor\\Squish"]
}

Ajouter vos propres règles

  1. Ajoutez un fichier JSON dans resources/fullfeed
  2. Ajoutez-le à paths dans config/fullfeed.php
Comme c’est la première règle correspondant à data.url qui est utilisée, il est recommandé de placer les fichiers ajoutés en tête de paths.
Dernière modification le 13 juillet 2026