Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

246
Vistas
¿Cómo puedo recuperar una URL de imagen de una llamada API?

Estoy tratando de obtener una URL de imagen de la API de los más vendidos del NYT y por mi vida no puedo hacer que funcione

Aquí está mi código hasta el momento, en este momento solo estoy tratando de consolar. Registrar la URL solo para ver cómo funciona antes de implementarla (he omitido la clave API pero la tengo y funciona)

Cuando lo ejecuto en mi navegador, el terminal devuelve el código de estado 200 https y el archivo JSON completo como una cadena antes de encontrar "SyntaxError: final inesperado de la entrada JSON en JSON.parse () en IncomingMessage. (C:\Users\esmee\ Desktop\project-bookworm\index.js:18:29) en IncomingMessage.emit (nodo:eventos:520:28) en IncomingMessage.Readable.read (nodo:internal/streams/readable:527:10) en flujo (nodo :internal/streams/readable:1012:34) en resume_ (node:internal/streams/readable:993:3) en processTicksAndRejections (node:internal/process/task_queues:83:21)" y falla

 const express = require("express");const https = require("https"); const app = express(); app.get("/", function(req, res) { const url = "https://api.nytimes.com/svc/books/v3/lists/current/hardcover-fiction.json?api-key=" https.get(url, function(response) { console.log(response.statusCode); response.on("data", function(data) { const bookData = JSON.parse(data); const book1url = bookData.results.books[0].book_image; console.log(book1url); }) }) res.send("Server is up and running"); }) app.listen(3000, function() { console.log("Server is running on port 3000."); })

Aquí hay una captura de pantalla del JSON devuelto en el navegador desde la URL:

Llamada JSON de la API del superventas del NYT

about 4 years ago · Juan Pablo Isaza
2 Respuestas
Responde la pregunta

0

Usando https

El problema con su código es que intenta analizar el evento de data , pero el evento data solo indica que se ha recibido una parte de los datos. Por lo tanto, debe concatenar todos los fragmentos de datos juntos y solo tan pronto como se reciba el evento end , que indica que se han recibido todos los fragmentos de datos, puede analizar todo el cuerpo.

 import https from "https"; const options = { headers: { // tell API you are expecting a JSON returned in the body "Accept": "application/json" }, }; const url = "https://api.nytimes.com/svc/books/v3/lists/current/hardcover-fiction.json"; https.get(url, options, (res) => { let body = ""; // data is called multiple times and just a chunk of data is returned! res.on("data", (chunk) => { body += chunk; }); // end signals that all data is returned => you can now parse res.on("end", () => { try { const json = JSON.parse(body); console.log(res.statusCode); console.log(json); if(res.statusCode !== 200){ // error handling here console.log(json.fault.faultstring); } else { // successful request -> log the body console.log(json) } } catch (error) { console.error(error.message); } }); }) .on("error", (error) => { console.error(error.message); });

Uso node-fetch

Como toda esta construcción que usa el paquete https no es muy sencilla, muchas personas usan el paquete node-fetch que simplifica esto y está basado en Promise .

 import fetch from "node-fetch"; (async () => { const options = { headers: { // tell API you are expecting a JSON returned in the body Accept: "application/json", }, }; const url = "https://api.nytimes.com/svc/books/v3/lists/current/hardcover-fiction.json"; try { const resp = await fetch(url, options); console.log(resp.status); const body = await resp.json(); console.log(body); if (!resp.ok) { // status code other than 200-299 // some error handling here // in this case log the error message returned from the API console.log(body.fault.faultstring); } else { // successful request -> log the body console.log(body) } } catch (error) { console.error(error); } })();

Rendimiento esperado

Ambas versiones deben imprimir el mismo resultado. Si no proporciona una clave de API como hice yo, este será el resultado:

 401 { fault: { faultstring: 'Failed to resolve API Key variable request.queryparam.api-key', detail: { errorcode: 'steps.oauth.v2.FailedToResolveAPIKey' } } } Failed to resolve API Key variable request.queryparam.api-key
about 4 years ago · Juan Pablo Isaza Denunciar

0

Parece que la solicitud no devuelve una salida JSON.

Dado que es una solicitud GET, puede abrir la URL directamente en un navegador y ver qué devuelve.

Se puede publicar el resultado para que tengamos una mejor idea de lo que está pasando.

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda