ブックマークレット
Google Gemini に作ってもらったブックマークレット
サイトに設定されている JSON-LD を整形して表示する
code:json-ld.json
javascript:(function(){const scripts=document.querySelectorAll('scripttype="application/ld+json"');if(scripts.length===0){alert('このページにJSON-LDは見つかりませんでした。');return;}const overlay=document.createElement('div');Object.assign(overlay.style,{position:'fixed',top:'5%',left:'5%',width:'90%',height:'90%',backgroundColor:'white',color:'black',zIndex:'2147483647',border:'2px solid #333',borderRadius:'8px',padding:'20px',overflowY:'auto',boxShadow:'0 0 20px rgba(0,0,0,0.5)',fontFamily:'sans-serif'});const closeBtn=document.createElement('button');closeBtn.textContent='閉じる';Object.assign(closeBtn.style,{position:'sticky',top:'0',float:'right',padding:'8px 16px',backgroundColor:'#f44336',color:'white',border:'none',borderRadius:'4px',cursor:'pointer',fontWeight:'bold'});closeBtn.onclick=()=>overlay.remove();overlay.appendChild(closeBtn);const title=document.createElement('h2');title.textContent='JSON-LD 抽出結果';overlay.appendChild(title);const formatValue=(val)=>{if(typeof val==='string'&&val.startsWith('http')){return %60<a href="${val}" target="_blank" rel="noopener" style="color:#1a0dab;word-break:break-all;">${val}</a>%60;}if(Array.isArray(val)){return '<ul style="margin:0;padding-left:20px;">'+val.map(item=>%60<li>${formatValue(item)}</li>%60).join('')+'</ul>';}if(typeof val==='object'&&val!==null){let subTable='<table style="width:100%;border:1px solid #ddd;border-collapse:collapse;font-size:0.9em;">';for(let k in val){subTable+=%60<tr><td style="border:1px solid #ddd;padding:4px;font-weight:bold;background:#fafafa;width:30%;">${k}</td><td style="border:1px solid #ddd;padding:4px;">${formatValue(valk)}</td></tr>%60;}return subTable+'</table>';}return val;};scripts.forEach((script,i)=>{try{const data=JSON.parse(script.innerText);const section=document.createElement('div');section.innerHTML=%60<h3 style="border-bottom:2px solid #eee;padding-bottom:5px;">Block #${i+1}</h3>%60;const table=document.createElement('table');Object.assign(table.style,{width:'100%',borderCollapse:'collapse',marginBottom:'30px'});const entries=Array.isArray(data)?data:data;entries.forEach(entry=>{for(let key in entry){const row=table.insertRow();const cK=row.insertCell(0);const cV=row.insertCell(1);cK,cV.forEach(c=>Object.assign(c.style,{border:'1px solid #ccc',padding:'8px',textAlign:'left',verticalAlign:'top'}));cK.style.backgroundColor='#f1f1f1';cK.style.fontWeight='bold';cK.style.width='20%';cK.textContent=key;cV.innerHTML=formatValue(entrykey);}});section.appendChild(table);overlay.appendChild(section);}catch(e){console.error('JSON-LD Parse Error:',e);}});document.body.appendChild(overlay);})();
Amazon の Kindle 本の商品ページから情報を取得して Scrapbox ページを作成する
<<<ここに作成先の Scrapbox のプロジェクトID を指定する>>> を適宜書き換えて使用する
code:kindle2scrapbox.js
javascript:(function(){var PROJECT_ID="<<<ここに作成先の Scrapbox のプロジェクトID を指定する>>>";var t=document.querySelector("#productTitle,#ebooksProductTitle");if(!t)return alert("タイトル不明");var title=window.prompt('Scrap "Amazon"',t.innerText.trim());if(!title)return;var fullTitle="『"+title+"』";var asin=(document.getElementById("ASIN")||{value:""}).value||(document.getElementsByName("ASIN.0")0||{value:""}).value||(location.href.match(/\/(gp\/product|dp|ASIN)\/(A-Z0-9{10})/)||,"","")2;var code=(asin.match(/^B/)?"ASIN:":"ISBN:")+asin;var descNode=document.querySelector("#bookDescription_feature_div .a-expander-content");var desc=descNode?descNode.innerText.trim().replace(/\n/g,"\n> "):"";var pubInfo="";var detail=document.querySelector("#detailBullets_feature_div,#productDetailsTable");if(detail){var m=detail.innerText.replace(/\s+/g," ").match(/出版社\s*:\s*(^(\n+)\((^)+)\)/);if(m)pubInfo="出版社 : ["+m1.trim()+"] (["+m2.trim()+"])";}var authors=[];document.querySelectorAll(".author").forEach(function(el){var nameNode=el.querySelector("a");if(!nameNode)return;var name=nameNode.innerText.trim();var role=el.innerText.replace(name,"").replace(/\s,、/g,"").match(/\(^)+\)/);role=role?role0:"";if(name&&!name.match(/著者|その|もっと見る/)&&!authors.includes(role+" "+name+"")){authors.push(role+" "+name+"")}});var img=document.querySelector("#landingImage,#ebooksImgBlkFront,#imgBlkFront");var imgSrc=img?img.src:"";var isPurchased=!!document.getElementById("booksInstantOrderUpdate");var tags="#"+title+(isPurchased?" #Kindle":"");var body=""+imgSrc+" "+window.location.href+"\n"+authors.join(" 、 ")+"\n"+pubInfo+"\n"+code+"\n> "+desc+"\n"+tags+"\n";window.open("https://scrapbox.io/"+PROJECT_ID+"/"+encodeURIComponent(fullTitle)+"?body="+encodeURIComponent(body))})();