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