『山と渓谷』の目次を取得するbookmarklet
引用部分を自動取得する
リンクは自動で外す
書影を貼り付ける
以下のhashtagをつける
#『山と渓谷』_n月号
『山と渓谷』は月ごとに話題が似通るので、月ごとにページを閲覧できると便利 code:bookmarklet.js
code:script.js
javascript: (() => {
// utilities
const ng = text => text.trim().replace(/[\\\n]/g, ' '); const zero = n => String(n).padStart(2, '0');
const toYYYYMMDD_HHMMSS = d => [${d.getFullYear()}-${zero(d.getMonth()+1)}-${zero(d.getDate())}] ${zero(d.getHours())}:${zero(d.getMinutes())}:${zero(d.getSeconds())};
const today = toYYYYMMDD_HHMMSS(new Date());
code:script.js
// 引用する範囲を取得する
let quoteRawText = '';
if (document.getElementById('SECTION-TOC')) {
const main = document.getElementById('SECTION-TOC').innerText;
const temp = document.getElementById('SECTION-TOC')
.previousElementSibling.previousElementSibling;
const topic = temp.innerText !== '' ? temp.innerText : temp.previousElementSibling.innerText;
const comment = document.getElementsByClassName('notes _comments')?.0?.innerText ?? ''; console.log({topic, main, comment});
} else {
const temp =document.getElementsByClassName('h2')
quoteRawText = (temp?.innerText ? temp?.innerText : temp.nextElementSibling?.innerText) ?? '';
}
const quote = quoteRawText.trim()
.split(/\n\r?|\r?\n|\r|\f/g) // 改行区切りで配列化
.filter(line => line !== '') // 空行は削除
.map(line => >${ng(line)}); // 引用記号
// 発売日を取得する
const tds = document.getElementsByClassName('product-properties')?.0 ?.getElementsByTagName?.('td');
console.log(tds);
.textContent.slice(0, 10).split('.')
.map(number => parseInt(number));
const project = 'takker';
const title = 『山と渓谷 ${year}年${month + 1}月号』; // 一ヶ月前に発行される
// 書影を取得する
const imageURL = document.getElementsByClassName('figure')?.0 ?.getElementsByTagName?.('img')?.0?.src; // 見本へのリンクを取得する
const sampleLink = document.getElementById('SECTION-SAMPLE') ?
[[${window.location.href}#SECTION-SAMPLE 目次の画像]] : [];
// scrap pageを作成する
const lines = [
...imageURL ? [[${imageURL} ${window.location.href}]] : [],
...quote,
...sampleLink,
'',
#『山と渓谷』_${month + 1}月号, // 一ヶ月前に発行される
Added on ${today},
Published on [${year}-${zero(month)}-${zero(date)}],
];
const e = text => encodeURIComponent(text);
window.open(https://scrapbox.io/${project}/${e(title)}?body=${e(lines.join('\n'))}, '_self');
})();