Tutoriales

Hacker News search en JavaScript

Una llamada autenticada a /api/v1/hackernews/search?q=rust&limit=25, la respuesta que devolvió, y la línea que saca un campo de ella.

Lo que necesitas

Node 18 o posterior, donde fetch es global. Ningún paquete que instalar. El mismo código corre en un navegador, salvo que un navegador dejaría tu clave a la vista — llama a esto desde tu servidor.

La llamada

const url = "https://honesthook.com/api/v1/hackernews/search?q=rust&limit=25";

const response = await fetch(url, {
  headers: { Authorization: `Bearer ${process.env.HH_KEY}` },
});

if (!response.ok) {
  throw new Error(`HTTP ${response.status}`);
}

const envelope = await response.json();
console.log(envelope.success, envelope.platform, envelope.endpoint);

Lo que volvió

{
  "success": true,
  "platform": "hackernews",
  "endpoint": "hackernews/search",
  "data": {
    "author": {
      "id": null,
      "handle": null,
      "followers": null
    },
    "items": [
      {
        "id": "46990729",
        "title": "An AI agent published a hit piece on me",
        "url": "https://news.ycombinator.com/item?id=46990729",
        "published_at": "2026-09-28T11:04:22.000Z",
        "metrics": { "points": 412, "comments": 176 },
        "position": 1
      }
    ],
    "has_more": null
  },
  "error": null,
  "cached": false
}

Respuesta registrada, capturada el 30 Sep 2026. Una llamada en vivo devuelve el valor del momento en que preguntas, no este.

Todos los campos de esa captura

En JavaScriptTipo en esta captura
envelope.successboolean
envelope.platformstring
envelope.endpointstring
envelope.data.author.idnull
envelope.data.author.handlenull
envelope.data.author.followersnull
envelope.data.itemsarray (1 in this capture)
envelope.data.has_morenull
envelope.errornull
envelope.cachedboolean

Un campo que no podemos leer vuelve null, nunca 0. Un cero sería una afirmación sobre la cuenta; null es un hecho sobre nuestra recolección. La lista completa de lo que esta ruta no devuelve está en hackernews-api/search.

Leer un campo

console.log(envelope.data.items);

envelope es el objeto del bloque de arriba. Deja la clave en el servidor: una clave enviada a un navegador es una clave que cualquiera puede leer.

Todos los demás tutoriales de aquí leen el perfil de alguien. Este no, y la diferencia se ve en la respuesta: no hay cuenta que describir, así que los campos de autor vienen null y lo que quieres está en items.

Hacker News no tiene grafo de seguidores. No hay número de seguidores que devolver, ni endpoint de perfil tampoco — esa ausencia es una decisión, no una carencia.

Qué estás llamando

Un GET autenticado a nuestro endpoint, con tu clave en una cabecera Authorization. Detrás está el índice público de Algolia de Hacker News. La consulta del ejemplo es la que produjo la respuesta registrada más abajo.

Cada elemento lleva su título, su enlace, cuándo se publicó, y sus puntos y su número de comentarios. La respuesta muestra un elemento; una llamada real devuelve la página que pediste.

Dos cosas sobre el índice

No entiende OR. Una consulta escrita como expresión booleana se lee como palabras, así que obtienes resultados para las palabras — no un error avisándote de que el operador se ignoró.

Y la tolerancia a errores tipográficos está activada por defecto, lo que significa que una consulta corta puede devolver una página de resultados que no tienen nada que ver con lo que escribiste, con el aspecto de una búsqueda perfectamente correcta. Comprueba que los títulos hablan de tu tema antes de contar nada.

Antes de copiar el bloque

Guarda la clave en una variable de entorno — los tres ejemplos leen HH_KEY.

El endpoint en sí

Parámetros, el formato del handle, lo que la ruta no devuelve y lo que cuesta una llamada: hackernews-api/search.

La misma llamada en curl · Python.

Cada ejemplo de arriba corre contra el endpoint real en cuanto tengas una clave. Sin tarjeta, y la clave llega en segundos.

Consigue una clave de API gratis: 1000 créditos al mes, sin tarjeta →

← Tutoriales · hackernews-api · Precios