JSON Feed è un nuovo standard utile a dare forma a un feed RSS basato su JSON che mira a semplificare la creazione dei feed abbandonando lo standard XML. Implementare un feed nel tuo sito è semplice, e la sintassi è sorprendentemente chiara.
Ecco un esempio:
{ "version": "https://jsonfeed.org/version/1", "title": "My Example Feed", "home_page_url": "https://example.org/", "feed_url": "https://example.org/feed.json", "items": [ { "id": "2", "content_text": "This is a second item.", "url": "https://example.org/second-item" }, { "id": "1", "content_html": "<p>Hello, world!</p>", "url": "https://example.org/initial-post" } ] }
vediamo come creare un feed come questo con un breve esempio.
Prendi un elenco di post
Il primo passo è prendere un elenco di record dal database. In questo sito i record si trovano nella tabella “Posts” e usando Eloquent prendiamo gli ultimi 20 per il feed.
$posts = Post::limit(20)->get();
Setup dei dati per il JSON feed
Le specifiche del JSON Feed prevedono alcuni campi opzionali come ad esempio il titolo, URL del feed, icona del sito, e altri. Visto che non sono dati dinamici li aggiungiamo in un array manualmente:
$data = [ 'version' => 'https://jsonfeed.org/version/1', 'title' => 'Laravel News Feed', 'home_page_url' => 'https://laravel-news.com/', 'feed_url' => 'https://laravel-news.com/feed/json', 'icon' => 'https://laravel-news.com/apple-touch-icon.png', 'favicon' => 'https://laravel-news.com/apple-touch-icon.png', 'items' => [], ];
Il campo vuoto items conterrà tutti i nostri post.
Aggiungiamo gli elementi al JSON Feed
Il passo finale è quello di effettuare un ciclo di tutti i nostri $posts e aggiungerli all’array items. Ecco un esempio utilizzando i miei dati:
foreach ($posts as $key => $post) { $data['items'][$key] = [ 'id' => $post->id, 'title' => $post->title, 'url' => 'https://laravel-news.com/'.$post->uri, 'image' => $post->featured_image, 'content_html' => $post->parsed_content, 'date_published' => $post->created_at->tz('UTC')->toRfc3339String(), 'date_modified' => $post->updated_at->tz('UTC')->toRfc3339String(), 'author' => [ 'name' => $post->user->name ], ]; }
L’unica parte univoca sono i time stamps. Utilizziamo le funzionalità di Carbon per convertire a UTC e al formato RFC 3339 richiesto dalle specifiche JSON.
Risultato finale
Ecco il metodo completo finale:
public function json() { $posts = Post::active()->limit(20)->get(); $data = [ 'version' => 'https://jsonfeed.org/version/1', 'title' => 'Laravel News Feed', 'home_page_url' => 'https://laravel-news.com/', 'feed_url' => 'https://laravel-news.com/feed/json', 'icon' => 'https://laravel-news.com/apple-touch-icon.png', 'favicon' => 'https://laravel-news.com/apple-touch-icon.png', 'items' => [], ]; foreach ($posts as $key => $post) { $data['items'][$key] = [ 'id' => $post->id, 'title' => $post->title, 'url' => 'https://laravel-news.com/'.$post->uri, 'image' => $post->featured_image, 'content_html' => $post->parsed_content, 'date_created' => $post->publishes_at->tz('UTC')->toRfc3339String(), 'date_modified' => $post->updated_at->tz('UTC')->toRfc3339String(), 'author' => [ 'name' => $post->user->name ], ]; } return $data; }
Una cosa da notare è che con Laravel non dobbiamo impostare alcun header particolare o cose del genere, dobbiamo soltanto restituire l’array $data che verrà convertito automaticamente in formato JSON con i corretti header.
Se vuoi implementare un package per questo proposito o hai bisogno di qualche funzionalità avanzata dai un’occhiata al nuovo LaravelJsonFeed di Mateus Guimarães.
LaraMind è il punto di riferimento in Italia per quanto riguarda Laravel e Vue.js, dai un’occhiata ai corsi a catalogo e a tutte le soluzioni formative custom per privati e aziende!
Fonte Laravel News