generated at
longPageRankingInDeno.ts
rank.ts
import Spinner from "https://deno.land/x/cli_spinners@v0.0.2/mod.ts"; interface ScrapboxPagesJson { count: number; pages: { title: string; charsCount: number }[]; } const getList = (projectName: string, offset: number) => { return fetch( "https://scrapbox.io/api/pages/" + projectName + "/?limit=100&skip=" + encodeURIComponent(offset), ).then((pageRes) => { if (pageRes.ok) { return pageRes.json(); } else { return { pages: [] }; } }).then((pageJson: ScrapboxPagesJson) => { return pageJson.pages; }); }; const allpagelist = (pjname: string) => { const spinner = Spinner.getInstance(); spinner.start("Fetching All Page List..."); const projectName: string = pjname; const marked: { title: string; charsCount: number }[] = []; return fetch("https://scrapbox.io/api/pages/" + projectName).then( (pageRes) => { if (!pageRes.ok) { throw Error; } return pageRes.json(); }, ).then((pageJson: Readonly<ScrapboxPagesJson>) => { const arrayRange = (start: number, stop: number, step: number) => Array.from( { length: (stop - start) / step + 1 }, (_, index) => start + index * step, ); const getiter = arrayRange(0, pageJson.count, 100); function getitertick():Promise<void>|void { const element = getiter.shift(); if (typeof element == "undefined") { return; } spinner.setText( "Fetching All Page List...[" + element.toString().padStart(pageJson.count.toString().length) + "/" + pageJson.count + "]", ); return getList(projectName, element).then((pages) => { marked.push(...pages); return getitertick(); }); } return getitertick(); }).then(() => { spinner.succeed("Fetched All Page List"); spinner.stop(); marked.sort((a, b) => b.charsCount - a.charsCount); let scrapchar = ""; for (const element2 of marked.slice(0, 500)) { scrapchar += " [" + element2.title + "] (" + element2.charsCount + "文字)\n"; } return scrapchar; }); }; allpagelist("villagepump").then((a) => { return Deno.writeTextFile( "villagepumpsoko.txt", a, ); });