# Recibir el contenido en tu web

> Guía paso a paso para llevar los artículos de Blogenia a tu propia web: leer con la API, reaccionar a un webhook o dejar que Blogenia publique en tu API.

Versión web: https://blogelia.com/docs/recibir-contenido

Hay tres formas de que los artículos de tu blog aparezcan en tu propia web. Elige según quién debe tomar la iniciativa.

| Opción | Quién inicia | Úsala cuando… | Necesitas |
| --- | --- | --- | --- |
| **A. Leer con la API** | Tu web pide los artículos | Quieres mostrar el blog con tu diseño y te basta con refrescarlo cada pocos minutos. | Una clave de API. Starter o Pro. |
| **B. Webhook + API** | Blogenia avisa y tu web pide el artículo | Quieres enterarte al momento de cada publicación para guardarlo, avisar o regenerar páginas. | Un webhook, una clave de API y una URL `https` en tu servidor. Starter o Pro. |
| **C. Publicar en tu API** | Blogenia envía el artículo a tu API | Tu web ya tiene una API para crear artículos y quieres que Blogenia los publique allí, incluidas las ediciones y los borrados. | Implementar el [contrato](https://blogelia.com/docs/publicar-en-tu-api) en tu servidor. |

> **Nota:** Las opciones A y B no se excluyen: lo habitual es combinarlas. Antes de empezar, lee [Seguridad](https://blogelia.com/docs/seguridad).

## A. Leer con la API

1. En el [panel](https://app.blogelia.com/api), abre **API** y pulsa **Crear clave**. Copia la clave: solo se muestra una vez.
2. Guárdala en tu servidor como variable de entorno `BLOGENIA_API_KEY`. Guarda también el ID del blog en `BLOGENIA_BLOG_ID`.
3. Pide los artículos desde el servidor y guárdalos en caché unos minutos, para no gastar tu [límite](https://blogelia.com/docs/limites) en cada visita.
4. Para el contenido de un artículo, pide `GET /articles/{id}` ([Artículos](https://blogelia.com/docs/articulos)).

**Lista con caché de 5 minutos**

```js
const BASE = 'https://api.blogelia.com/v1';
const TTL_MS = 5 * 60 * 1000;
let cache = { at: 0, data: null };

export async function latestArticles() {
  if (cache.data && Date.now() - cache.at < TTL_MS) return cache.data;
  const res = await fetch(
    BASE + '/blogs/' + process.env.BLOGENIA_BLOG_ID + '/articles?limit=10',
    { headers: { Authorization: 'Bearer ' + process.env.BLOGENIA_API_KEY } },
  );
  if (!res.ok) {
    if (cache.data) return cache.data; // si falla, sirve lo último que tenías
    throw new Error('HTTP ' + res.status);
  }
  const body = await res.json();
  cache = { at: Date.now(), data: body.data };
  return cache.data;
}
```

## B. Webhook y lectura del artículo

1. Crea una clave de API como en la opción A.
2. Expón en tu servidor una URL `https` que reciba `POST` (por ejemplo `/webhooks/blogenia`).
3. En el [panel](https://app.blogelia.com/api), en **Webhooks**, pulsa **Añadir webhook**, pega la URL y copia el secreto (`whsec_…`). Solo se muestra una vez.
4. Guarda el secreto como variable de entorno `BLOGENIA_WEBHOOK_SECRET`.
5. Pulsa **Enviar prueba** y comprueba que tu servidor responde `200`.
6. En cada `article.published`, verifica la firma, responde `200` y pide el artículo completo con su `id`.

**Al recibir article.published**

```js
// isValid(rawBody, headers): ver "Verificar la firma" en Webhooks
app.post('/webhooks/blogenia', express.raw({ type: 'application/json' }), (req, res) => {
  const rawBody = req.body.toString('utf8');
  if (!isValid(rawBody, req.headers)) return res.sendStatus(400);
  res.sendStatus(200); // responde ya; trabaja después

  const event = JSON.parse(rawBody);
  if (event.event !== 'article.published') return;
  const id = event.data.article.id;
  fetch('https://api.blogelia.com/v1/articles/' + id, {
    headers: { Authorization: 'Bearer ' + process.env.BLOGENIA_API_KEY },
  })
    .then((r) => r.json())
    .then((article) => saveInYourDatabase(article)) // tu código
    .catch((err) => console.error(err));
});
```

El código completo de `isValid` está en [Webhooks](https://blogelia.com/docs/webhooks#firma), con Node, Python y PHP.

## C. Publicar en tu propia API

1. Implementa en tu servidor las rutas del [contrato](https://blogelia.com/docs/publicar-en-tu-api): comprobar, crear, actualizar y borrar. Parte del receptor de ejemplo.
2. Crea una clave secreta para Blogenia y guárdala en tu servidor como variable de entorno `BLOGENIA_TOKEN`.
3. En el [panel](https://app.blogelia.com/blog), abre **Blog** y la pestaña **Publicación**. Elige **API propia**, escribe la dirección de tu web, pega la clave como **Clave de acceso** y guarda.
4. Comprueba la conexión. Si va bien, cada artículo que se publique se enviará a tu API.

Para una prueba rápida, arranca el receptor de ejemplo de [Publicar en tu propia API](https://blogelia.com/docs/publicar-en-tu-api#ejemplo) detrás de un túnel `https`.

> **Aviso:** En las tres opciones, las claves y secretos viven solo en tu servidor. Consulta la lista de comprobación de [Seguridad](https://blogelia.com/docs/seguridad).
