scrapbox-external-backup@0.1.0
bundleなしで使える
使い方
code:js
await downloadBackupJSON("project-name", {skip: 100});
project-nameにbackupを取得したいscrapbox projectの名前を入れる
しばらくかかるので待っていよう
進行状況は開発コンソールに表示される
dependencies
code:script.js
import {fetchPages} from '../scrapbox-api-helper/scrapboxAPI.js';
import {downloadObject} from '../web_browserから任意のデータをdownloadするscript/script.js';
export async function downloadBackupJSON(project, {skip = 10} = {}) {
const projectDataPending = fetch(/api/projects/${project});
const titles = (await fetchPages({project})).map(({title}) => title);
const exported = (new Date()).getTime() / 1000;
const pages = [];
// skip件づつfetchする
for (let i =0; i < titles.length; i += skip) {
console.log([scrapbox-external-backup] Start fetching ${i} - ${i + skip} pages.);
// 一気にAPIを叩いてページ情報を取得する
const promises = titles.slice(i, i+skip)
.map(async (pageTitle, j) => {
console.log([page ${i + j}@scrapbox-external-backup] start fetching "/${project}/${pageTitle}");
const res = await fetch(/api/pages/${project}/${encodeURIComponent(pageTitle)});
console.log([page ${i + j}@scrapbox-external-backup] finish fetching "/${project}/${pageTitle}");
const {id, title, created, updated, lines} = await res.json();
pages.push({id, title, created, updated, lines});
});
await Promise.all(promises);
console.log(Finish fetching ${i} - ${i + skip} pages.);
}
const {name, displayName} = await (await projectDataPending).json();
const backupJSON = {name, displayName, exported, pages};
downloadObject(backupJSON);
}