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

> Pacchetto Laravel che estrae il contenuto principale di pagine web per i feed reader. Sfrutta il pattern Pipeline di Laravel.

## Panoramica

[revolution/laravel-fullfeed](https://github.com/invokable/laravel-fullfeed) è un pacchetto Laravel che estrae il corpo del testo dalle pagine web per i feed reader.\
Utilizza regole per sito (in JSON) per prelevare il contenuto necessario per ciascun articolo.

<Info>
  In origine era una funzionalità usata in un feed reader privato, che è stata estratta e resa pacchetto pubblico.
</Info>

## Requisiti

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

## Installazione

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

Per usare la versione di sviluppo:

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

## Pubblicazione del file di configurazione e delle definizioni dei siti

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

Con questo comando vengono creati:

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

## Aggiornamento automatico dei file di definizione (composer post-update-cmd)

Se vuoi ripubblicare automaticamente le definizioni dei siti a ogni `composer update`, aggiungi quanto segue a `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"
    ]
  }
}
```

## Uso base

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

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

## Testing

Puoi stubbare la Facade con `FullFeed::expects()`.

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

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

## File delle regole per sito

### items\_all.json

`items_all.json` è la base per importare le regole nel formato LDRFullFeed (wedata).\
Livedoor Reader era un servizio molto conosciuto in Giappone, ma è stato chiuso; oggi restano soprattutto i dati delle regole come patrimonio. FullFeed sfrutta questo formato storico.

### plus.json

`plus.json` è un esempio per aggiungere regole personalizzate.

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

## Campi di configurazione delle regole

* `url`: espressione regolare per il match sull'URL target
* `selector`: selettore CSS (prioritario su `xpath`)
* `xpath`: specifica XPath
* `enc`: specifica dell'encoding, se serve conversione del set di caratteri
* `callable`: classe Extractor personalizzata da eseguire come preprocessing (singola o array)
* `after_callable`: classe Extractor da eseguire alla fine come postprocessing

## Ordine di esecuzione degli Extractor come pipeline

FullFeed usa il **pattern Pipeline** di Laravel e fa scorrere gli Extractor in ordine.

1. Le classi indicate in `callable`
2. `XPathExtractor`
3. `SelectorExtractor`
4. Le classi indicate in `after_callable`

Puoi inserire elaborazioni personalizzate prima e dopo la semplice estrazione XPath/CSS: design ideale per adattarsi alle peculiarità di ogni sito.

## Extractor integrati

### RemoveElements

Rimuove gli elementi identificati dai selettori indicati.

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

### ReplaceMatches

Sostituisce le stringhe che corrispondono all'espressione regolare (opera sulla stringa HTML).

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

### StripTags

Rimuove i tag in modo equivalente a `strip_tags()`.

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

### Squish

Rimuove gli spazi in eccesso con `Str::squish()`.

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

## Aggiungere regole personalizzate

1. Aggiungi un file JSON in `resources/fullfeed`
2. Aggiungilo a `paths` in `config/fullfeed.php`

Viene usata la prima regola il cui `data.url` corrisponde, quindi è consigliato mettere il file aggiuntivo all'inizio di `paths`.


## Related topics

- [Feed Generator](/it/packages/laravel-bluesky/feed-generator.md)
- [Feedable](/it/packages/feedable/index.md)
- [Laravel Scout](/it/scout.md)
- [Elenco dei siti supportati - Feedable](/it/packages/feedable/drivers.md)
- [Pacchetto core e driver personalizzati - Feedable](/it/packages/feedable/core.md)
