Estoy tratando de consumir datos de este punto final en lichess.org .
Aquí hay un ejemplo de trabajo mínimo de un componente React que consume ese flujo de datos. Estoy usando una biblioteca llamada can-ndjson-stream .
import ndjsonStream from "can-ndjson-stream" import { useEffect } from "react" function App() { useEffect(() => { fetch("https://lichess.org/api/tv/feed") .then(res => ndjsonStream(res.body)) .then(stream => { const streamReader = stream.getReader() streamReader.read().then(async res => { while (!res || !res.done) { res = await streamReader.read() console.log(res.value) } }) }) .catch(console.error) }, []) return <>Lorem Ipsum</> } export default AppSin embargo, si intento escribir este mismo código y ejecutarlo en Node de esta manera:
import ndjsonStream from "can-ndjson-stream" import fetch from "node-fetch" fetch("https://lichess.org/api/tv/feed") .then(res => ndjsonStream(res.body)) .then(stream => { const streamReader = stream.getReader() streamReader.read().then(async res => { while (!res || !res.done) { res = await streamReader.read() console.log(res.value) } }) }) .catch(console.error)me sale este error:
ReferenceError: ReadableStream no está definido en ndjsonStream
Por lo tanto, parece que la res de la recuperación es nula o indefinida, pero la recuperación de otras API funciona bien.
También intenté usar axios en lugar de node-fetch así:
import ndjsonStream from "can-ndjson-stream" import axios from "axios" axios .get("https://lichess.org/api/tv/feed") .then(res => ndjsonStream(res.data)) .then(stream => { const streamReader = stream.getReader() streamReader.read().then(async res => { while (!res || !res.done) { res = await streamReader.read() console.log(res.value) } }) }) .catch(console.error)Pero simplemente se cuelga y no muestra ningún resultado. Gracias a cualquiera que pueda arrojar algo de luz sobre esto u ofrecer alguna forma alternativa de ejecutar esto en Node.
Gracias a los comentarios de tromgy, pude hacer algo que funciona. Fui con la hiperbúsqueda de la biblioteca para ayudar a manejar la solicitud y la canalización de la transmisión. También usé la biblioteca ndjson .
Aquí hay un código de trabajo:
hyperquest("https://lichess.org/api/tv/feed") .pipe(ndjson.parse()) .on("data", console.log) Tenga en cuenta que puede manipular los objetos a medida que llegan con el segundo argumento de on() , como se muestra a continuación.
... .on("data", (obj) => { foo(obj) })