generated at
井戸端の底
井戸端のlast updated順で一番下の方にあるページって何だろうblu3mo
死んだテキストが堆積しているはず
ほいtakker
js
import {browse} from "https://scrapbox.io/api/code/villagepump/井戸端の底/browse.js"; await browse("updated");
last visitedの一番下も気になる
ほいtakker
js
import {browse} from "https://scrapbox.io/api/code/villagepump/井戸端の底/browse.js"; await browse("accessed");

井戸端の井戸の底?

browse.d.ts
export type SortOptions = "updated" | "accessed" | "views" | "created" | "linked" | "pageRank"; export function browse(type: SortOptions, project?: string): Promise<void>;
browse.js
import {fetchPages} from "https://scrapbox.io/api/code/villagepump/井戸端の底/fetch.js"; export async function browse(type, project = scrapbox.Project.name) { const pages = await fetchPages(project); const messages = pages .sort((a, b) => a[type] - b[type]) .map(({title}) => title); console.log(messages); alert(messages.map((title, index) => `${index + 1}\t${title}`).join("\n")); }
alert()で表示できる最大文字数を軽く超えてしまったので、正確なリストはコンソールの方を見てください

fetch.js
export async function fetchPages(project) { const pageNum = await getProjectPageCount(project); //取得するページ数 const limitParam = pageNum > 1000 ? 1000 : pageNum; // APIで一度に取得するページ数 const maxIndex = pageNum > 1000 ? Math.floor(pageNum / 1000) + 1 : 1; // APIを叩く回数 // 一気にAPIを叩いてページ情報を取得する return ( await Promise.all( [...Array(maxIndex).keys()] .map(async (index) => { const res = await fetch(`/api/pages/${project}/?limit=${limitParam}&skip=${index*1000}`); const {pages} = await res.json(); return pages; }) ) ).flat(); }

fetch.js
async function getProjectPageCount(project) { try { const response = await fetch(`/api/pages/${project}/?limit=1`); if(!response.ok) throw Error(`Invalid response. status code: ${response.status}`); const json = await response.json(); return parseInt(json.count); } catch(e) { throw e; } }