Amazon書籍をScrapboxに保存するbookmarklet
Amazon書籍をScrapboxに保存するbookmarklet
a2s
todos
bookmarklet実行時にgyazoに送りたい
code:JavaScript
javascript: (function () {
const project = "mrsekut-pr";
const title = encodeURIComponent(getTitle());
const authors = getAuthors();
const imageUrl = getImageUrl();
const date = getPubDate();
const publisher = getPublisher();
const lines = renderLines({ authors, imageUrl, date, publisher });
const body = encodeURIComponent(lines);
const url = https://scrapbox.io/${project}/『${title}』?body=${body};
window.open(url);
})();
function renderLines({ authors, imageUrl, date, publisher }) {
const authorLines = authors.map(renderAuthor);
const lines = link(imageUrl), date, ...authorLines, link(publisher);
return lines.map((l) => ${l}).join("\n");
}
function renderAuthor({ author, pu }) {
return ${link(author)} ${pu};
}
function link(str) {
return [${str}];
}
function getTitle() {
return (
document.getElementById("productTitle")?.innerHTML.trim() ?? "untitled"
);
}
function getImageUrl() {
return document.getElementById("landingImage")?.getAttribute("src");
}
function getAuthors() {
const spans = document.getElementsByClassName("author");
return ...spans.map((span) => {
const at = span.innerText.replace(/,/, "");
const author = at
.replace(/\(.+\)/, "")
.replace(/  +/g, "")
.replace(/(A-Z)/g, " $1")
.trim();
const pu = at.match(/\(.+\)/)0.replace(/\((.+)\)/, "$1");
return {
author,
pu,
};
});
}
function getPubDate() {
const ul = document.querySelector("#detailBullets_feature_div ul.detail-bullet-list");
if (!ul) return null;
const li = ...ul.querySelectorAll("li").find((li) => {
const bold = li.querySelector("span.a-text-bold");
const label = (bold?.textContent ?? "").replace(/\s\u200e\u200f::/g, "");
return label === "発売日";
});
if (!li) return null;
const valueSpan = li.querySelector("span.a-text-bold + span");
return valueSpan?.textContent?.trim() ?? null;
}
function getPublisher() {
const ul = document.querySelector("#detailBullets_feature_div ul.detail-bullet-list");
if (!ul) return null;
const li = ...ul.querySelectorAll("li").find((li) => {
const bold = li.querySelector("span.a-text-bold");
const label = (bold?.textContent ?? "").replace(/\s\u200e\u200f::/g, "");
return label === "出版社";
});
if (!li) return null;
const valueSpan = li.querySelector("span.a-text-bold + span");
return valueSpan?.textContent?.trim() ?? null;
}