chatGPTとのやりとりをScrapboxに貼り付ける方法
2023/6/30
code:コードブロック.py
javascript:(function(){
const getNextjsPageProps$$module$src$chatgpt=()=>{const a=document.querySelector("script#__NEXT_DATA__");return JSON.parse(a?.textContent||"{}").props?.pageProps||{}},getChatTitle$$module$src$chatgpt=()=>document.querySelector("title").textContent,isUsedPluginsModel$$module$src$chatgpt=()=>{const a=document.querySelector("main div.w-full");return a?a.textContent.replace(/\s/gi,"").toLowerCase().includes("model:plugins"):!1},getPluginNames$$module$src$chatgpt=(a,d)=>{a=a.parentElement.querySelector(d).querySelector("div.flex-col.items-start");
return!a||a.classList.contains("whitespace-pre-wrap")?[]:a.textContent.replace(/^used\s+/gi,"").split(/,\s/).map(c=>c.trim()).filter(c=>!!c)},getChatContents$$module$src$chatgpt=({userName:a,aiName:d},{user:c})=>{const l=isUsedPluginsModel$$module$src$chatgpt(),e=[],h=document.querySelectorAll("div.text-base");for(let m=0;m<h.length;m++){var f=hm,b=(f.parentElement.querySelector("div.text-base div.markdown")||f.parentElement.querySelector("div.text-base > div:nth-child(2)").querySelector("div.whitespace-pre-wrap")).textContent, g=f.querySelector(".rounded-sm svg");const k=f.querySelector("imgalt:not(alt='')");let n=a;g&&(n=d);k&&!a&&(n=c?.name||"me");g=[];l&&g.push(...getPluginNames$$module$src$chatgpt(f,"div.text-base > div:nth-child(2)"));f=[${n.replace(/\s/g,"_")}.icon];0<g.length&&(f+= Used ${g.join(", ")});n===d?(b=b.split("\n"),e.push(f,...b.map(p=> ${p}),"")):e.push(${f} ${b})}return e}; function extractChatGPTTexts$$module$src$chatgpt({userName:a,chatgpt:d}){var c=getNextjsPageProps$$module$src$chatgpt();const l={userName:a,aiName:d.aiName};a=getChatTitle$$module$src$chatgpt();c=getChatContents$$module$src$chatgpt(l,c);return{title:a,contents:c,hashtagLine:d.hashtagLine}}var module$src$chatgpt={};module$src$chatgpt.extractChatGPTTexts=extractChatGPTTexts$$module$src$chatgpt;const getUserName$$module$src$bard=()=>document.querySelector(".gb_Ab")?.textContent||"",getChatTitle$$module$src$bard=()=>(document.querySelector(".user-query-container .query-text")?.textContent||"No title").substring(0,50),getChatContents$$module$src$bard=({userName:a,aiName:d})=>{const c=[],l=document.querySelectorAll(".conversation-container");for(let m=0;m<l.length;m++){var e=lm,h=e.querySelector(".user-query-container");e=e.querySelector(".response-container");h=h.querySelector(".query-text")?.textContent|| "";var f=[${a.replace(/\s/g,"_")}.icon];c.push(${f} ${h});h=e.querySelector(".model-response-text .markdown").children;e=[];for(f=0;f<h.length;f++){var b=hf;if("UL"===b.tagName||"OL"===b.tagName){b=b.querySelectorAll("li");for(var g=0;g<b.length;g++)e.push( ${b[g]?.textContent||""})}else if("CODE-BLOCK"===b.tagName)b=b.querySelector("div.code-block"),g=b.querySelector("div.header")?.textContent||"",e.push(code:${g.toLowerCase()}),b=(b.querySelector("pre")?.textContent||"").split("\n").filter(k=> !!k),e.push(...b.map(k=> ${k}));else if(b.classList.contains("horizontal-scroll-wrapper")&&b.querySelector("table")){b=b.querySelector("table tbody").querySelectorAll("tr");g=[];for(let k=0;k<b.length;k++){const n=bk.querySelectorAll("td,th"),p=[];for(let q=0;q<n.length;q++)p.push(nq?.textContent||"");0===k&&g.push("table:table");g.push( ${p.join("\t")})}e.push(...g)}else e.push(b?.textContent||"")}h=[${d.replace(/\s/g,"_")}.icon];c.push(h,...e.map(k=> ${k}),"")}return c}; function extractBardTexts$$module$src$bard({userName:a,bard:d}){var c={userName:getUserName$$module$src$bard()||a||"me",aiName:d.aiName||"ai"};a=getChatTitle$$module$src$bard();c=getChatContents$$module$src$bard(c);return{title:a,contents:c,hashtagLine:d.hashtagLine}}var module$src$bard={};module$src$bard.extractBardTexts=extractBardTexts$$module$src$bard;const config$$module$index=Object.freeze({userName:"",chatgpt:{aiName:"chatgpt",hashtagLine:"#ChatGPT\u65e5\u8a18"},bard:{aiName:"bard",hashtagLine:"#Bard\u65e5\u8a18"}}),createScrapboxLines$$module$index=a=>{const d=[];let c;"https://chat.openai.com"===a?c=extractChatGPTTexts$$module$src$chatgpt(config$$module$index):"https://bard.google.com"===a&&(c=extractBardTexts$$module$src$bard(config$$module$index));if(!c)return d;const {title:l,contents:e,hashtagLine:h}=c;d.push(l);d.push((new Date).toLocaleDateString(), "");d.push(...e);d.push("",h);return d},copyToClipboard$$module$index=async a=>{await navigator.clipboard.writeText(a);alert("Copied to clipboard!")},main$$module$index=()=>{copyToClipboard$$module$index(createScrapboxLines$$module$index(window.location.origin).join("\n"))};main$$module$index();var module$index={};
})()
このブックマークレットは、Scrapboxに貼り付けるために使用されるものです。以下は使い方の手順です。ブックマークバーまたはブックマークマネージャを開きます。新しいブックマークを作成します。
ブックマークのURL欄に、与えられたJavaScriptコードをまるごとコピーします。ブックマークの名前を入力します(例: "Scrapboxに貼り付ける")。
ブックマークの保存ボタンをクリックして、ブックマークを作成します。これでブックマークが作成されました。
Scrapboxのページを開きます。ブックマークバーまたはブックマークマネージャから、先ほど作成した「Scrapboxに貼り付ける」ブックマークを選択します。ブックマークが実行され、Scrapboxにコンテンツが貼り付けられます。
このブックマークレットは、現在のページがChatGPTまたはBardの会話ページであることを前提としています。