1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import { DOMParser } from "https://deno.land/x/deno_dom/deno-dom-wasm.ts";
import { Readability } from "npm:@mozilla/readability";
// inspired by https://www.val.town/v/stevekrouse/fetchJSON
export const fetchReadable = async (url: string) => {
const r = await fetch(url, { headers: { "content-type": "text/html" }, redirect: "follow" });
try {
const text = await r.text();
const parser = new DOMParser();
const node = parser.parseFromString(text, "text/html");
const relative = node.createElement("base");
relative.href = url;
node.head.appendChild(relative);
return new Readability(node).parse();
} catch (err) {
throw new Error(`fetchReadable error: ${err.message} in ${url}`);
}
};