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

> Laravel-Paket zur Extraktion des Hauptinhalts von Webseiten für Feed-Reader. Nutzt das Pipeline-Pattern von Laravel.

## Überblick

[revolution/laravel-fullfeed](https://github.com/invokable/laravel-fullfeed) ist ein Laravel-Paket, das für Feed-Reader den Fließtext aus Webseiten extrahiert.\
Über site-spezifische Regeln (JSON) werden die benötigten Inhalte je Artikel gezogen.

<Info>
  Ursprünglich war das Feature Teil einer privaten Feed-Reader-Anwendung und wurde extrahiert und als öffentliches Paket veröffentlicht.
</Info>

## Voraussetzungen

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

## Installation

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

Für die Entwicklungsversion:

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

## Konfiguration und Site-Definitionen veröffentlichen

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

Dabei werden folgende Elemente erstellt:

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

## Automatische Aktualisierung der Definitionsdateien (composer post-update-cmd)

Wenn Sie die Site-Definitionen bei `composer update` automatisch neu veröffentlichen lassen möchten, fügen Sie in `composer.json` Folgendes hinzu.

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

## Grundlegende Verwendung

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

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

## Tests

Mit `FullFeed::expects()` können Sie die Facade stubben.

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

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

## Site-Regeln-Dateien

### items\_all.json

`items_all.json` ist die Basis, um Regeln im LDRFullFeed-Format (wedata) einzubinden.\
Livedoor Reader war ein in Japan bekannter Dienst. Der Dienst selbst wurde eingestellt, die Regel-Daten leben aber als Erbe fort. FullFeed nutzt dieses historische Datenformat.

### plus.json

`plus.json` ist eine Beispieldatei für eigene Regeln.

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

## Felder der Regel-Konfiguration

* `url`: Regex zur Zuordnung der Ziel-URL
* `selector`: CSS-Selektor (hat Vorrang gegenüber `xpath`)
* `xpath`: XPath-Angabe
* `enc`: Encoding, falls eine Zeichensatz-Konvertierung nötig ist
* `callable`: Eigene Extractor-Klasse als Vorverarbeitung (einzeln/als Array)
* `after_callable`: Extractor-Klasse, die abschließend als Nachbearbeitung läuft

## Ausführungsreihenfolge der Extractors als Pipeline

FullFeed lässt die Extractors nacheinander durch das **Pipeline-Pattern** von Laravel laufen.

1. Über `callable` angegebene Klassen
2. `XPathExtractor`
3. `SelectorExtractor`
4. Über `after_callable` angegebene Klassen

Da vor und nach einer einfachen XPath-/CSS-Extraktion eigene Verarbeitung eingefügt werden kann, lässt sich mit dieser Architektur gut auf site-spezifische Eigenheiten reagieren.

## Eingebaute Extractors

### RemoveElements

Entfernt die Elemente eines angegebenen Selektors.

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

### ReplaceMatches

Ersetzt per Regex zutreffende Zeichenketten (arbeitet auf dem HTML-String).

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

### StripTags

Entfernt Tags analog zu `strip_tags()`.

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

### Squish

Entfernt mit `Str::squish()` überflüssige Leerzeichen.

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

## Eigene Regeln hinzufügen

1. Legen Sie in `resources/fullfeed` eine JSON-Datei an.
2. Ergänzen Sie sie in `config/fullfeed.php` unter `paths`.

Da die erste in `data.url` zutreffende Regel verwendet wird, empfiehlt es sich, hinzugefügte Dateien am Anfang von `paths` einzufügen.


## Related topics

- [Feed Generator](/de/packages/laravel-bluesky/feed-generator.md)
- [Feedable](/de/packages/feedable/index.md)
- [Liste unterstützter Sites - Feedable](/de/packages/feedable/drivers.md)
- [Bot-Tutorial - Laravel Bluesky](/de/packages/laravel-bluesky/bot-tutorial.md)
- [Core-Paket und eigene Treiber - Feedable](/de/packages/feedable/core.md)
