Vai al contenuto principale

Panoramica

revolution/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.
In origine era una funzionalità usata in un feed reader privato, che è stata estratta e resa pacchetto pubblico.

Requisiti

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

Installazione

composer require revolution/laravel-fullfeed
Per usare la versione di sviluppo:
composer require revolution/laravel-fullfeed:dev-main

Pubblicazione del file di configurazione e delle definizioni dei siti

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.
{
  "scripts": {
    "post-update-cmd": [
      "@php artisan vendor:publish --tag=laravel-assets --ansi --force",
      "@php artisan vendor:publish --tag=fullfeed-site --ansi --force"
    ]
  }
}

Uso base

use Revolution\Fullfeed\Facades\FullFeed;

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

Testing

Puoi stubbare la Facade con FullFeed::expects().
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.
{
  "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.
{
  "after_callable": ["Revolution\\Fullfeed\\Extractor\\RemoveElements"],
  "remove": ["svg", "button", "script"]
}

ReplaceMatches

Sostituisce le stringhe che corrispondono all’espressione regolare (opera sulla stringa HTML).
{
  "after_callable": ["Revolution\\Fullfeed\\Extractor\\ReplaceMatches"],
  "replace": [
    {
      "pattern": "/ data-(h-)?index=\"[0-9]+\"/",
      "replace": ""
    }
  ]
}

StripTags

Rimuove i tag in modo equivalente a strip_tags().
{
  "after_callable": ["Revolution\\Fullfeed\\Extractor\\StripTags:a,img"]
}

Squish

Rimuove gli spazi in eccesso con Str::squish().
{
  "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.
Ultima modifica il 13 luglio 2026