scrapbox-local-universe-dl
現在のページからn-hop以内のlinkで繋がっているページたちのjsonをダウンロードするUserScript
とりあえず n=2
cf.
用途
コンテキスト指向ではないタグやリンクを可視化して、コンテキスト的にはどういう構造をしているのか見る
近すぎるページをまとめるとか
やってみたが、ノード間の距離が意味的な距離をあんまり反映していないような気がする

リンク数?を1とか2くらいまで小さくしてノードが増えると構造が見えてきた!
script.jsconst title = 'Download linked pages';
scrapbox.PageMenu.addMenu({
title: title,
image: 'https://i.gyazo.com/51930110c969662dd514a52974d890c8.png',
onClick: async () => await run(),
});
async function run() {
const project = encodeURIComponent(scrapbox.Project.name);
const center = scrapbox.Page.title;
const { relatedPages: { links1hop, links2hop } } = await (await fetch(`/api/pages/${project}/${encodeURIComponent(center)}`)).json();
const links = links1hop.concat(links2hop);
const jsonExport = {pages: []};
const promises = links.map(async (link) => {
const json = await (await fetch(`/api/pages/${project}/${encodeURIComponent(link.title)}`)).json();
jsonExport.pages.push({
title: json.title,
lines: json.lines.map(line => line.text
.replace(new RegExp(`\\[${center}\\]|#${center}`, 'g'), center)
),
});
});
await Promise.all(promises);
const blob = new Blob([JSON.stringify(jsonExport)], { type: 'octet/stream' });
//const blob = new Blob([JSON.stringify(jsonExport, null, ' ')], { type: 'octet/stream' });
const url = window.URL.createObjectURL(blob);
const a = document.createElement('a');
a.href = url;
a.download = `links_from_${scrapbox.Page.title}.json`;
a.style.display = 'none';
document.body.appendChild(a);
a.click();
window.URL.revokeObjectURL(url);
a.parentNode.removeChild(a);
window.open('https://daiiz-apps.appspot.com/scrap-graph');
}
