project内の全てのページ情報を取得するscript
scrapboxのページカードやアイコン情報を取得するのに使う
emoji-completion#5f87f6511280f0000064f594を少し書き換えただけ
/rashitamemo/Scrapboxのページリストをローカルに作成したい#63b4eb4d9dc7d800005e217c
そのとおりですtakker.icon
cf. Javascriptで数列を作る
それと、このプログラムはapi/pages/:projectnameを複数個一気にfetchする仕様になっているため、ページ数が増えるとscrapbox.ioのサーバーに負荷がかかってしまいます
/rashitamemoのスケールなら問題ないです
一度にfetchする量を制限したり、他のREST APIを使うなどの方法を取る必要があります
他のREST API
api/pages/:projectname/search/titles
タイトルとリンクだけ取得するならこれで十分
全部取得するまで時間がかかる
api/page-data/export/:projectname.json
projectの全てのデータを一度に取得できる
code:load.js
async function loadAllPages(project) {
// projectの全ページ数を取得する
const pageNum = await fetch(/api/pages/${project}/?limit=1)
.then(response => response.json())
.then(json => parseInt(json.count));
const maxIndex = Math.floor(pageNum / 1000) + 1;
const result = [];
const promises = ...Array(maxIndex).map(async (_, index) => {
const json = await fetch(/api/pages/${project}/?limit=1000&skip=${index*1000})
.then(res => res.json());
const pages = json.pages;
pages.forEach(page =>
result.push({
project: project,
title: page.title,
image: page.image,
descriptions: page.descriptions,
}));
});
await Promise.all(result);
return result;
}
#2023-01-07 20:48:08
#2020-10-23 09:48:01