> ## 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

> Een Laravel-pakket dat de hoofdinhoud van webpagina's extraheert voor feedreaders, met gebruik van het Pipeline-patroon van Laravel.

## Overzicht

[revolution/laravel-fullfeed](https://github.com/invokable/laravel-fullfeed) is een Laravel-pakket dat de hoofdtekst van webpagina's extraheert voor feedreaders.\
Met regels per site (JSON) haal je per artikel precies de inhoud op die je nodig hebt.

<Info>
  Deze functionaliteit werd oorspronkelijk gebruikt in een privéfeedreader-app en is later als openbaar pakket uitgebracht.
</Info>

## Vereisten

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

## Installatie

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

Als je de ontwikkelversie wilt gebruiken:

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

## Configuratiebestand en sitedefinities publiceren

```bash theme={null}
php artisan vendor:publish --tag=fullfeed
```

Dit commando maakt het volgende aan.

* `config/fullfeed.php`
* `resources/fullfeed`

## Definitiebestanden automatisch bijwerken (composer post-update-cmd)

Als je de sitedefinities automatisch opnieuw wilt publiceren bij `composer update`, voeg dan het volgende toe aan `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"
    ]
  }
}
```

## Basisgebruik

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

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

## Testen

Met `FullFeed::expects()` kun je de facade stubben.

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

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

## Siteregelbestanden

### items\_all.json

`items_all.json` is de basis voor het importeren van regels in het LDRFullFeed-formaat (wedata).\
Livedoor Reader was een bekende dienst in Japan, maar de dienst zelf is gestopt; wat vooral overblijft is de regeldata als erfgoed. FullFeed maakt gebruik van dit historische dataformaat.

### plus.json

`plus.json` is een voorbeeld voor het toevoegen van eigen regels.

```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"
  }
}
```

## Velden in de regelconfiguratie

* `url`: reguliere expressie die op de doel-URL moet matchen
* `selector`: CSS-selector (heeft voorrang op `xpath`)
* `xpath`: XPath-expressie
* `enc`: encoding, voor als tekencodering-conversie nodig is
* `callable`: eigen Extractor-klasse(n) die als voorbewerking worden uitgevoerd (enkelvoudig of als array)
* `after_callable`: Extractor-klasse(n) die als laatste, als nabewerking, worden uitgevoerd

## Uitvoervolgorde van Extractors als Pipeline-patroon

FullFeed laat de Extractors op volgorde doorlopen met het **Pipeline-patroon** van Laravel.

1. De klasse(n) opgegeven via `callable`
2. `XPathExtractor`
3. `SelectorExtractor`
4. De klasse(n) opgegeven via `after_callable`

Doordat je vóór en na eenvoudige XPath/CSS-extractie eigen verwerking kunt toevoegen, is het ontwerp goed bestand tegen de eigenaardigheden van individuele sites.

## Ingebouwde Extractors

### RemoveElements

Verwijdert elementen die matchen met de opgegeven selectors.

```json theme={null}
{
  "after_callable": ["Revolution\\Fullfeed\\Extractor\\RemoveElements"],
  "remove": ["svg", "button", "script"]
}
```

### ReplaceMatches

Vervangt strings die matchen met een reguliere expressie (bewerking op de HTML-string).

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

### StripTags

Verwijdert tags, vergelijkbaar met `strip_tags()`.

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

### Squish

Verwijdert overtollige witruimte met `Str::squish()`.

```json theme={null}
{
  "after_callable": ["Revolution\\Fullfeed\\Extractor\\Squish"]
}
```

## Eigen regels toevoegen

1. Voeg een JSON-bestand toe aan `resources/fullfeed`
2. Voeg het toe aan `paths` in `config/fullfeed.php`

Omdat de eerste regel die matcht op `data.url` wordt gebruikt, is het aan te raden je extra bestanden vooraan in `paths` te plaatsen.


## Related topics

- [Feed Generator](/nl/packages/laravel-bluesky/feed-generator.md)
- [Feedable](/nl/packages/feedable/index.md)
- [Laravel Scout](/nl/scout.md)
- [Lijst met ondersteunde sites - Feedable](/nl/packages/feedable/drivers.md)
- [Core-package en eigen drivers - Feedable](/nl/packages/feedable/core.md)
