JSON feed

Angel Cruz
Angel Cruz
Tabla de contenidos

JSON feed es un nuevo estándar para formalizar un feed RSS basado en JSON que pretende simplificar la creación de feeds eliminando el estándar XML. La implementación de un feed para su sitio es simple y la especificación es sorprendentemente clara.

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.

1{
2 "version": "https://jsonfeed.org/version/1",
3 "title": "My Example Feed",
4 "homepageurl": "https://example.org/",
5 "feed_url": "https://example.org/feed.json",
6 "items": [
7 {
8 "id": "2",
9 "content_text": "This is a second item.",
10 "url": "https://example.org/second-item"
11 },
12 {
13 "id": "1",
14 "content_html": "<p>Hello, world!</p>",
15 "url": "https://example.org/initial-post"
16 }
17 ]
18}

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

1$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:

1$data = [
2 'version' => 'https://jsonfeed.org/version/1',
3 'title' => 'El nombre de tu feed',
4 'homepageurl' => 'https://domain.tld',
5 'feed_url' => 'https://domain.tld/feed/json',
6 'icon' => 'https://domain.tld/apple-touch-icon.png',
7 'favicon' => 'https://domain.tld/apple-touch-icon.png',
8 'items' => [],
9];

Agregando los items al feed

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

1<?php
2 
3foreach ($posts as $key => $post) {
4 $data['items'][$key] = [
5 'id' => $post->id,
6 'title' => $post->title,
7 'url' => 'https://domain.tld/' . $post->uri, // o la ruta de los post
8 'image' => $post->featured_image,
9 'content_html' => $post->content,
10 'datepublished' => $post->created_at->tz('UTC')->toRfc3339String(),
11 'datemodified' => $post->updated_at->tz('UTC')->toRfc3339String(),
12 'author' => [
13 'name' => $post->user->name
14 ],
15 ];
16}

El resultado final

Nuestro método quedaría de esta forma:

1<?php
2 
3class JsonApi
4{
5 public function jsonFeed()
6 {
7 
8 $posts = Posts::latest();
9 
10 $data = [
11 'version' => 'https://jsonfeed.org/version/1',
12 'title' => 'El nombre de tu feed',
13 'homepageurl' => 'https://domain.tld',
14 'feed_url' => 'https://domain.tld/feed/json',
15 'icon' => 'https://domain.tld/apple-touch-icon.png',
16 'favicon' => 'https://domain.tld/apple-touch-icon.png',
17 'items' => [],
18 ];
19 
20 foreach ($posts as $key => $post) {
21 $data['items'][$key] = [
22 'id' => $post->id,
23 'title' => $post->title,
24 'url' => 'https://domain.tld/' . $post->uri, // o la ruta de los post
25 'image' => $post->featured_image,
26 'content_html' => $post->content,
27 'datepublished' => $post->created_at->tz('UTC')->toRfc3339String(),
28 'datemodified' => $post->updated_at->tz('UTC')->toRfc3339String(),
29 'author' => [
30 'name' => $post->user->name
31 ],
32 ];
33 }
34 
35 return $data;
36 }
37}
Te podrá interesar
Cursor anunció un ajuste en sus precios a partir del 15 de septiembre de 2025. Descubre cómo afectará a los usuarios, por qué ocurre este cambio y qué alternativas existen.
GitHub no cierra, pero ya no será lo mismo. Con la salida de Thomas Dohmke como CEO y la decisión de Microsoft de no reemplazarlo, la plataforma dejará de operar como entidad independiente y pasará a formar parte del equipo CoreAI, liderado por Jay Parikh.
Aprende cómo crear reglas personalizadas en Cursor IDE paso a paso. Incluye ejemplos, mejores prácticas y un generador de reglas online para facilitar el proceso.
Logo de Angel Cruz

Made with ♥️ & 🧉 in Montevideo, Uruguay Buenos Aires, Argentina.

[AC].dev is not affiliated with Laravel or Laravel LLC. Laravel is a Trademark of Taylor Otwell.

Code highlighting provided by Torchlight.