La estructura de un feed

Un feed JSON comienza con alguna información en la parte superior: dice de dónde proviene el feed, y puede decir quién lo creó, etc. Después de eso, hay una serie de objetos, elementos, que describen cada objeto en la lista.

json

{

"version": "https://jsonfeed.org/version/1",

"title": "My Example Feed",

"homepageurl": "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"

}

]

}

Ejemplo rápido con laravel: obtener la lista de post

php

$posts = Posts::latest();

Configura los datos básicos para el JSON Feed

La especificación de JSON Feed tiene algunos campos de nivel superior opcionales, como título, URL de fuente, ícono de sitio y más. Estos campos no son dinámicos por lo que hay que agregarlos a un arreglo de forma manual:

php

$data = [

'version' => 'https://jsonfeed.org/version/1',

'title' => 'El nombre de tu feed',

'homepageurl' => 'https://domain.tld',

'feed_url' => 'https://domain.tld/feed/json',

'icon' => 'https://domain.tld/apple-touch-icon.png',

'favicon' => 'https://domain.tld/apple-touch-icon.png',

'items' => [],

];

Agregando los items al feed

Este punto es lo más sencillo del mundo, únicamente hay que hacer:

php

foreach ($posts as $key => $post) {

$data['items'][$key] = [

'id' => $post->id,

'title' => $post->title,

'url' => 'https://domain.tld/'.$post->uri, // o la ruta de los post

'image' => $post->featured_image,

'content_html' => $post->content,

'datepublished' => $post->created_at->tz('UTC')->toRfc3339String(),

'datemodified' => $post->updated_at->tz('UTC')->toRfc3339String(),

'author' => [

'name' => $post->user->name

],

];

}

El resultado final

Nuestro método quedaría de esta forma:

php

public function jsonFeed()

{

$posts = Posts::latest();

$data = [

'version' => 'https://jsonfeed.org/version/1',

'title' => 'El nombre de tu feed',

'homepageurl' => 'https://domain.tld',

'feed_url' => 'https://domain.tld/feed/json',

'icon' => 'https://domain.tld/apple-touch-icon.png',

'favicon' => 'https://domain.tld/apple-touch-icon.png',

'items' => [],

];

foreach ($posts as $key => $post) {

$data['items'][$key] = [

'id' => $post->id,

'title' => $post->title,

'url' => 'https://domain.tld/'.$post->uri, // o la ruta de los post

'image' => $post->featured_image,

'content_html' => $post->content,

'datecreated' => $post->created_at->tz('UTC')->toRfc3339String(),

'datemodified' => $post->updated_at->tz('UTC')->toRfc3339String(),

'author' => [

'name' => $post->user->name

],

];

}

return $data;

}