> ## Documentation Index
> Fetch the complete documentation index at: https://kawax.biz/llms.txt
> Use this file to discover all available pages before exploring further.

# Laravel FullFeed

> Package Laravel qui extrait le contenu principal des pages web pour les lecteurs de flux. Exploite le pattern Pipeline de Laravel.

## Vue d'ensemble

[revolution/laravel-fullfeed](https://github.com/invokable/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.

<Info>
  À 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.
</Info>

## Prérequis

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

## Installation

```bash theme={null}
composer require revolution/laravel-fullfeed
```

Pour utiliser la version de développement :

```bash theme={null}
composer require revolution/laravel-fullfeed:dev-main
```

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

```bash theme={null}
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`.

```json theme={null}
{
  "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

```php theme={null}
use Revolution\Fullfeed\Facades\FullFeed;

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

## Tests

Vous pouvez utiliser `FullFeed::expects()` pour stubber la Facade.

```php theme={null}
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.

```json theme={null}
{
  "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.

```json theme={null}
{
  "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).

```json theme={null}
{
  "after_callable": ["Revolution\\Fullfeed\\Extractor\\ReplaceMatches"],
  "replace": [
    {
      "pattern": "/ data-(h-)?index=\"[0-9]+\"/",
      "replace": ""
    }
  ]
}
```

### StripTags

Retire les balises, équivalent de `strip_tags()`.

```json theme={null}
{
  "after_callable": ["Revolution\\Fullfeed\\Extractor\\StripTags:a,img"]
}
```

### Squish

Supprime les espaces superflus avec `Str::squish()`.

```json theme={null}
{
  "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`.


## Related topics

- [Feed Generator](/fr/packages/laravel-bluesky/feed-generator.md)
- [Laravel Scout](/fr/scout.md)
- [Feedable](/fr/packages/feedable/index.md)
- [Liste des sites pris en charge - Feedable](/fr/packages/feedable/drivers.md)
- [Tests](/fr/packages/laravel-bluesky/testing.md)
