Scrapboxサルベージ(UserScript)
関連リンクではなく、ページ内にあるリンクを取得して、そのページのテキストをgetする。
function removehashtag,removebracket,addmargin
が重複しているでどちらかで削除すればOK
あるいは、関連リンク取得のUserScrptを一旦消すか。
現状確認している問題
リンクしているページだけでなく、リンクされているページも補足する
リンク先のページが空っぽだと {"name":"NotFoundError","message":"Page not found."}
という行が入る→修正済み
テキストの順番がページの記述通りとは限らない
ページの記述通りにするには、 links
を見るのではなく、 descriptions
を見て一行一行リンクがあるかを確かめていく必要あり。
script.jsconst getlinkpage = function () {
const url = location.href.replace("io/", "io/api/pages/");
let x = new XMLHttpRequest();
x.open("get", url, false);
x.send(null);
let json = x.responseText;
let pagedata = JSON.parse( json );
let linkPagesData = pagedata["links"];
//ループで回して、リンクページの本文を取得していく
let pageContents = [];
let rooturl = location.href.replace("io/", "io/api/pages/").replace(new RegExp("/" + encodeURI(scrapbox.Page.title) + "$"),"/");
for (let i = 0, len = linkPagesData.length; i < len; ++i) {
let relatedurl = rooturl + encodeURI(linkPagesData[i]) + "/text";
//これでXMLHttpRequestを回していく
let y = new XMLHttpRequest();
y.open("get", relatedurl, false);
y.send(null);
let c = y.responseText;
if (! (c == '{"name":"NotFoundError","message":"Page not found."}') ){
c = removehashtag(c,scrapbox.Page.title); //もとハッシュタグを削除しない場合はこの行をコメントアウト
c = removebracket(c);//本文中からブラケット[]を取り除かない場合はこの行をコメントアウト
pageContents.push(addmargin(c));
}
}
//取得したページの中身を使って、新しいwindowをオープンする。
var win = window.open();
win.document.open();
win.document.write(`<title>temporary</title>`);
win.document.write('<pre>');
win.document.write(pageContents.join('\n'));
win.document.write('</pre>');
win.document.close();
}
function removehashtag(text,pageTitle){//本文中からもともとのハッシュタグを削除する
return text.replace(new RegExp('#' + scrapbox.Page.title),"")
}
function removebracket(text){//本文中から閉じと開きのブラケットを削除する
return text.replace(/\[|\]/g,"")
}
function addmargin(text){ //二行目以降に半角スペースを追加する
return text.replace(/\n/g,"\n ")
}
scrapbox.PageMenu.addMenu({
title: 'リンクページ取得',
image: 'https://gyazo.com/da0408108eda84e56a587630be5e4524/raw',
onClick:getlinkpage
})