井戸端の底
井戸端のlast updated順で一番下の方にあるページって何だろうblu3mo.icon
ほいtakker.icon
code:js
await browse("updated");
last visitedの一番下も気になる
ほいtakker.icon
code:js
await browse("accessed");
井戸端の井戸の底?
code:browse.d.ts
export type SortOptions = "updated" | "accessed" | "views" | "created" | "linked" | "pageRank";
export function browse(type: SortOptions, project?: string): Promise<void>;
code:browse.js
export async function browse(type, project = scrapbox.Project.name) {
const pages = await fetchPages(project);
const messages = pages
.map(({title}) => title);
console.log(messages);
alert(messages.map((title, index) => ${index + 1}\t${title}).join("\n"));
}
alert()で表示できる最大文字数を軽く超えてしまったので、正確なリストはコンソールの方を見てください code: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(
.map(async (index) => {
const res = await fetch(/api/pages/${project}/?limit=${limitParam}&skip=${index*1000});
const {pages} = await res.json();
return pages;
})
)
).flat();
}
code: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;
}
}