Amazonからブックマークでページを作るとき内容紹介も取り込む
2018/10/27発案
Amazonページの
CSSが、この部分に特別なClassかIDを当ててれば可能。
とりあえず紙の本
productDescription が親要素のID。これを取得して中身をゲットすれば、たぶんいける。
Kindle版は
productDescription が親要素のID
productDescriptionWrapperが本文の中身
両方存在するし、同じID名。ただし、中身の作り方が違う。厄介。
とりあえず、まずproductDescriptionの中身を取得する、というコードを
JavaScriptで書くのが最初の一歩になりそう。
2018/10/28 01:43
内容紹介の部分がiflame内部にあるのに気がつかずに、盛大に躓いていた。
とりあえず、取り込めたが、本によってはすごく内容が長い。
文字数カウントしてカットする手もある
あるいは内容を取得せず、そのとき選択しているテキストがあればそれを取り込む機能を作り、テキストを自分で選んだ方がいいかもしれない。
script.js javascript:(function(){
var p = document.getElementById("productTitle");
if (!p) var p = document.getElementById("ebooksProductTitle");
var d = document.getElementById("productDescription");
if (!d) {
var subdoc = document.getElementById("product-description-iframe").contentWindow.document;
var d = subdoc.getElementById("productDescription");
}
var d1 = d.getElementsByTagName("p")[0];
if (!d1) var d1 = d.getElementsByClassName("productDescriptionWrapper")[0];
var d2 = d1.innerText.replace(/\n/g,'\n>');
var title=window.prompt('Scrap "Amazon" to your scrapbox.', p.innerHTML);
if (!title) return;
title = '『'+ title +'』';
var imagecontainer=document.getElementById("imageBlockContainer");
if (!imagecontainer) var imagecontainer = document.getElementById("ebooksImageBlockContainer");
let image = imagecontainer.getElementsByTagName("img")[0];
let imageurl = image.getAttribute("src");
let pub = [];
var c = document.getElementsByClassName('author');
for (g = 0; g < c.length ;g++){
var at = c[g].innerText.replace(/,/,'');
var pu = at.match(/\(.+\)/);
var ct = at.replace(/\(.+\)/,'').replace(/ /g,'');
pub.push(pu + ' [' + ct + ']');
}
var lines='['+imageurl+' '+window.location.href+']\n' + pub.join(' ') + '\n>' + d2 + '\n#本';
var body=encodeURIComponent(lines);
window.open('https://scrapbox.io/rashitaobj/'+encodeURIComponent(title.trim())+'?body='+body)
})();
以下が標準ブックマークレット用
script_min.jsjavascript:(function(){var p=document.getElementById("productTitle");if(!p)var p=document.getElementById("ebooksProductTitle");var d=document.getElementById("productDescription");if(!d){var subdoc=document.getElementById("product-description-iframe").contentWindow.document;var d=subdoc.getElementById("productDescription");}var d1=d.getElementsByTagName("p")[0];if(!d1)var d1=d.getElementsByClassName("productDescriptionWrapper")[0];var d2=d1.innerText.replace(/\n/g,'\n>');var title=window.prompt('Scrap "Amazon" to your scrapbox.', p.innerHTML);if(!title)return;title='『'+title+'』';var imagecontainer=document.getElementById("imageBlockContainer");if(!imagecontainer) var imagecontainer = document.getElementById("ebooksImageBlockContainer");let image=imagecontainer.getElementsByTagName("img")[0];let imageurl=image.getAttribute("src");let pub=[];var c=document.getElementsByClassName('author');for (g=0;g<c.length;g++){var at=c[g].innerText.replace(/,/,'');var pu=at.match(/\(.+\)/);var ct=at.replace(/\(.+\)/,'').replace(/ /g,'');pub.push(pu+' [' + ct + ']');}var lines='['+imageurl+' '+window.location.href+']\n'+pub.join(' ')+'\n>'+d2+'\n#本';var body=encodeURIComponent(lines);window.open('https://scrapbox.io/rashitaobj/'+encodeURIComponent(title.trim())+'?body='+body)})();
ご利用の際は、 https://scrapbox.io/rashitaobj/
の部分を、ご自分のプロジェクトのURLに差し替えてください。
ブランチを切る