<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title>Alt&#43;PでAmazon・楽天・Yahoo!・ヨドバシ・ビックカメラのリンクと合計金額＝本体価格＋送料を計算し、標準プロンプト窓に表示｜Tampermonkey on ゆきんこの勉強法</title>
		<link>https://benkyosukisuki.com/tags/alt&#43;p%E3%81%A7amazon%E6%A5%BD%E5%A4%A9yahoo%E3%83%A8%E3%83%89%E3%83%90%E3%82%B7%E3%83%93%E3%83%83%E3%82%AF%E3%82%AB%E3%83%A1%E3%83%A9%E3%81%AE%E3%83%AA%E3%83%B3%E3%82%AF%E3%81%A8%E5%90%88%E8%A8%88%E9%87%91%E9%A1%8D%E6%9C%AC%E4%BD%93%E4%BE%A1%E6%A0%BC%E9%80%81%E6%96%99%E3%82%92%E8%A8%88%E7%AE%97%E3%81%97%E6%A8%99%E6%BA%96%E3%83%97%E3%83%AD%E3%83%B3%E3%83%97%E3%83%88%E7%AA%93%E3%81%AB%E8%A1%A8%E7%A4%BAtampermonkey/</link>
		<description>Recent content in Alt&#43;PでAmazon・楽天・Yahoo!・ヨドバシ・ビックカメラのリンクと合計金額＝本体価格＋送料を計算し、標準プロンプト窓に表示｜Tampermonkey on ゆきんこの勉強法</description>
		<generator>Hugo</generator>
		<language>ja-jp</language>
		
		
		
		
			<lastBuildDate>Mon, 09 Nov 2026 18:34:51 +0900</lastBuildDate>
		
			<atom:link href="https://benkyosukisuki.com/tags/alt+p%E3%81%A7amazon%E6%A5%BD%E5%A4%A9yahoo%E3%83%A8%E3%83%89%E3%83%90%E3%82%B7%E3%83%93%E3%83%83%E3%82%AF%E3%82%AB%E3%83%A1%E3%83%A9%E3%81%AE%E3%83%AA%E3%83%B3%E3%82%AF%E3%81%A8%E5%90%88%E8%A8%88%E9%87%91%E9%A1%8D%E6%9C%AC%E4%BD%93%E4%BE%A1%E6%A0%BC%E9%80%81%E6%96%99%E3%82%92%E8%A8%88%E7%AE%97%E3%81%97%E6%A8%99%E6%BA%96%E3%83%97%E3%83%AD%E3%83%B3%E3%83%97%E3%83%88%E7%AA%93%E3%81%AB%E8%A1%A8%E7%A4%BAtampermonkey/index.xml" rel="self" type="application/rss+xml" />
			<item>
				<title>Alt&#43;PでAmazon・楽天・Yahoo!・ヨドバシ・ビックカメラのリンクと合計金額＝本体価格＋送料を計算し、標準プロンプト窓に表示｜Tampermonkey</title>
				<link>https://benkyosukisuki.com/software/2026-11-08-13-04-42-09-00/</link>
				<pubDate>Sun, 08 Nov 2026 13:04:42 +0900</pubDate>
				<guid>https://benkyosukisuki.com/software/2026-11-08-13-04-42-09-00/</guid>
				<description>&lt;h2 id=&#34;altpでamazon楽天yahooヨドバシビックカメラのリンクと合計金額本体価格送料を計算し標準プロンプト窓に表示tampermonkey&#34;&gt;Alt+PでAmazon・楽天・Yahoo!・ヨドバシ・ビックカメラのリンクと合計金額＝本体価格＋送料を計算し、標準プロンプト窓に表示｜Tampermonkey&lt;/h2&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;// ==UserScript==&#xD;&#xA;// @name         Total Price Format to Prompt (Alt+P)&#xD;&#xA;// @namespace    http://tampermonkey.net/&#xD;&#xA;// @version      10.1&#xD;&#xA;// @description  Alt+PでAmazon・楽天・Yahoo!・ヨドバシ・ビックカメラの合計金額とリンクを計算し、標準プロンプト窓に表示&#xD;&#xA;// @match        https://www.amazon.co.jp/*&#xD;&#xA;// @match        https://*.rakuten.co.jp/*&#xD;&#xA;// @match        https://*.yahoo.co.jp/*&#xD;&#xA;// @match        https://www.yodobashi.com/*&#xD;&#xA;// @match        https://www.biccamera.com/*&#xD;&#xA;// @grant        none&#xD;&#xA;// ==/UserScript==&#xD;&#xA;&#xD;&#xA;(function() {&#xD;&#xA;    &amp;#39;use strict&amp;#39;;&#xD;&#xA;&#xD;&#xA;    document.addEventListener(&amp;#39;keydown&amp;#39;, function(event) {&#xD;&#xA;        // Alt + P の判定&#xD;&#xA;        if (event.altKey &amp;amp;&amp;amp; !event.ctrlKey &amp;amp;&amp;amp; !event.shiftKey &amp;amp;&amp;amp; (event.key === &amp;#39;p&amp;#39; || event.key === &amp;#39;P&amp;#39; || event.code === &amp;#39;KeyP&amp;#39;)) {&#xD;&#xA;            event.preventDefault();&#xD;&#xA;&#xD;&#xA;            var d = document, u = location.href, t = d.title;&#xD;&#xA;            var priceNum = 0;&#xD;&#xA;            var shippingNum = 0;&#xD;&#xA;            var displayPriceStr = &amp;#39;価格不明&amp;#39;;&#xD;&#xA;&#xD;&#xA;            function parseNum(str) {&#xD;&#xA;                return str ? Number(String(str).replace(/[０-９]/g, c =&amp;gt; String.fromCharCode(c.charCodeAt(0) - 0xFEE0)).replace(/[^\d]/g, &amp;#39;&amp;#39;)) || 0 : 0;&#xD;&#xA;            }&#xD;&#xA;&#xD;&#xA;            // ==========================================&#xD;&#xA;            // 1. Amazon の処理&#xD;&#xA;            // ==========================================&#xD;&#xA;            if (u.includes(&amp;#39;amazon.co.jp&amp;#39;)) {&#xD;&#xA;                var eA = d.querySelector(&amp;#39;#corePrice_feature_div .a-price .a-offscreen&amp;#39;) ||&#xD;&#xA;                       d.querySelector(&amp;#39;#priceblock_ourprice&amp;#39;) ||&#xD;&#xA;                       d.querySelector(&amp;#39;#priceblock_dealprice&amp;#39;) ||&#xD;&#xA;                       d.querySelector(&amp;#39;.a-price .a-offscreen&amp;#39;);&#xD;&#xA;                if (eA) priceNum = parseNum(eA.textContent);&#xD;&#xA;&#xD;&#xA;                var deliveryEl = d.querySelector(&amp;#39;[data-csa-c-delivery-price]&amp;#39;);&#xD;&#xA;                if (deliveryEl) {&#xD;&#xA;                    shippingNum = parseNum(deliveryEl.getAttribute(&amp;#39;data-csa-c-delivery-price&amp;#39;));&#xD;&#xA;                } else {&#xD;&#xA;                    var shipElA = d.querySelector(&amp;#39;#ourprice_shippingmessage&amp;#39;) || d.querySelector(&amp;#39;#delivery-message&amp;#39;) || d.querySelector(&amp;#39;[id*=&amp;#34;shipping&amp;#34;]&amp;#39;);&#xD;&#xA;                    var shipTextA = shipElA ? shipElA.textContent : d.body.innerText;&#xD;&#xA;                    if (shipTextA.includes(&amp;#39;無料配送&amp;#39;) || shipTextA.includes(&amp;#39;Prime&amp;#39;) || shipTextA.includes(&amp;#39;プライム&amp;#39;)) {&#xD;&#xA;                        shippingNum = 0;&#xD;&#xA;                    } else {&#xD;&#xA;                        var mA = shipTextA.match(/配送料[^0-9０-９]*([0-9０-９,]+)円/);&#xD;&#xA;                        if (mA) {&#xD;&#xA;                            shippingNum = parseNum(mA[1]);&#xD;&#xA;                        } else {&#xD;&#xA;                            var mA2 = shipTextA.match(/¥\s*([0-9０-９,]+)/);&#xD;&#xA;                            if (mA2) shippingNum = parseNum(mA2[1]);&#xD;&#xA;                        }&#xD;&#xA;                    }&#xD;&#xA;                }&#xD;&#xA;                t = t.replace(/^Amazon\s*\|\s*/, &amp;#39;&amp;#39;);&#xD;&#xA;            }&#xD;&#xA;            // ==========================================&#xD;&#xA;            // 2. 楽天市場 の処理&#xD;&#xA;            // ==========================================&#xD;&#xA;            else if (u.includes(&amp;#39;rakuten.co.jp&amp;#39;)) {&#xD;&#xA;                let jsonParsed = false;&#xD;&#xA;                try {&#xD;&#xA;                    const appDataEl = d.getElementById(&amp;#39;item-page-app-data&amp;#39;);&#xD;&#xA;                    if (appDataEl) {&#xD;&#xA;                        const jsonData = JSON.parse(appDataEl.textContent);&#xD;&#xA;                        const skuInfo = jsonData.api?.itemInfoSku || jsonData.newApi?.itemInfoSku;&#xD;&#xA;                        if (skuInfo) {&#xD;&#xA;                            if (skuInfo.taxIncludedPrice) {&#xD;&#xA;                                priceNum = Number(skuInfo.taxIncludedPrice);&#xD;&#xA;                                jsonParsed = true;&#xD;&#xA;                            }&#xD;&#xA;                            if (skuInfo.shipping &amp;amp;&amp;amp; skuInfo.shipping.postageIncluded) {&#xD;&#xA;                                shippingNum = 0;&#xD;&#xA;                            }&#xD;&#xA;                        }&#xD;&#xA;                    }&#xD;&#xA;                } catch(err) {}&#xD;&#xA;&#xD;&#xA;                if (!jsonParsed || priceNum === 0) {&#xD;&#xA;                    var priceElR = d.querySelector(&amp;#39;meta[property=&amp;#34;product:price:amount&amp;#34;]&amp;#39;) || d.querySelector(&amp;#39;meta[itemprop=&amp;#34;price&amp;#34;]&amp;#39;);&#xD;&#xA;                    if (priceElR) priceNum = parseNum(priceElR.getAttribute(&amp;#39;content&amp;#39;));&#xD;&#xA;                }&#xD;&#xA;&#xD;&#xA;                if (shippingNum === 0) {&#xD;&#xA;                    var shipElR = d.querySelector(&amp;#39;[class*=&amp;#34;postage&amp;#34;]&amp;#39;) || d.querySelector(&amp;#39;[class*=&amp;#34;shipping&amp;#34;]&amp;#39;) || d.querySelector(&amp;#39;.price_delivery&amp;#39;);&#xD;&#xA;                    var shipTextR = shipElR ? shipElR.textContent : &amp;#39;&amp;#39;;&#xD;&#xA;                    if (shipTextR.includes(&amp;#39;送料無料&amp;#39;) || shipTextR.includes(&amp;#39;送料込み&amp;#39;)) {&#xD;&#xA;                        shippingNum = 0;&#xD;&#xA;                    } else {&#xD;&#xA;                        var matchR = shipTextR.match(/([0-9０-９,]+)\s*円/);&#xD;&#xA;                        if (matchR) {&#xD;&#xA;                            shippingNum = parseNum(matchR[1]);&#xD;&#xA;                        } else {&#xD;&#xA;                            var bodyMatchR = d.body.innerText.match(/送料\s*[:：]?\s*([0-9０-９,]+)円/);&#xD;&#xA;                            if (bodyMatchR) shippingNum = parseNum(bodyMatchR[1]);&#xD;&#xA;                        }&#xD;&#xA;                    }&#xD;&#xA;                }&#xD;&#xA;            }&#xD;&#xA;            // ==========================================&#xD;&#xA;            // 3. Yahoo!ショッピング の処理&#xD;&#xA;            // ==========================================&#xD;&#xA;            else if (u.includes(&amp;#39;yahoo.co.jp&amp;#39;)) {&#xD;&#xA;                t = t.replace(/\s*[:\-]\s*(Yahoo!ショッピング|通販).*$/i, &amp;#39;&amp;#39;);&#xD;&#xA;&#xD;&#xA;                var mp = d.querySelector(&amp;#39;meta[property=&amp;#34;product:price:amount&amp;#34;]&amp;#39;) || d.querySelector(&amp;#39;meta[itemprop=&amp;#34;price&amp;#34;]&amp;#39;);&#xD;&#xA;                if (mp) priceNum = parseNum(mp.getAttribute(&amp;#39;content&amp;#39;) || mp.textContent);&#xD;&#xA;&#xD;&#xA;                for (var sc of d.getElementsByTagName(&amp;#39;script&amp;#39;)) {&#xD;&#xA;                    var tx = sc.textContent;&#xD;&#xA;                    if (tx.includes(&amp;#39;postageData&amp;#39;) || tx.includes(&amp;#39;taxIncludedPrice&amp;#39;)) {&#xD;&#xA;                        if (!priceNum) {&#xD;&#xA;                            let m = tx.match(/&amp;#34;taxIncludedPrice&amp;#34;\s*:\s*(\d+)/);&#xD;&#xA;                            if (m) priceNum = Number(m[1]);&#xD;&#xA;                        }&#xD;&#xA;                        if (tx.includes(&amp;#39;&amp;#34;isPostageFree&amp;#34;:true&amp;#39;)) {&#xD;&#xA;                            shippingNum = 0;&#xD;&#xA;                        } else {&#xD;&#xA;                            let m = tx.match(/&amp;#34;fee&amp;#34;\s*:\s*(\d+)/);&#xD;&#xA;                            if (m) shippingNum = Number(m[1]);&#xD;&#xA;                        }&#xD;&#xA;                    }&#xD;&#xA;                }&#xD;&#xA;&#xD;&#xA;                if (shippingNum === 0 &amp;amp;&amp;amp; d.body.innerText.includes(&amp;#39;送料無料&amp;#39;)) {&#xD;&#xA;                    shippingNum = 0;&#xD;&#xA;                } else if (shippingNum === 0) {&#xD;&#xA;                    let m = d.body.innerText.match(/送料[^0-9０-９]*([0-9０-９,]+)円/);&#xD;&#xA;                    if (m) shippingNum = parseNum(m[1]);&#xD;&#xA;                }&#xD;&#xA;            }&#xD;&#xA;            // ==========================================&#xD;&#xA;            // 4. ヨドバシカメラ の処理&#xD;&#xA;            // ==========================================&#xD;&#xA;            else if (u.includes(&amp;#39;yodobashi.com&amp;#39;)) {&#xD;&#xA;                t = t.normalize(&amp;#39;NFC&amp;#39;).replace(/ヨドバシ\.com - (.*?) 通販【全品無料配達】/g, &amp;#39;$1&amp;#39;);&#xD;&#xA;&#xD;&#xA;                var priceElY = d.querySelector(&amp;#39;.js_ppSalesPrice&amp;#39;) || d.querySelector(&amp;#39;meta[property=&amp;#34;product:price:amount&amp;#34;]&amp;#39;) || d.querySelector(&amp;#39;meta[itemprop=&amp;#34;price&amp;#34;]&amp;#39;);&#xD;&#xA;                if (priceElY) {&#xD;&#xA;                    priceNum = parseNum(priceElY.getAttribute(&amp;#39;content&amp;#39;) || priceElY.textContent);&#xD;&#xA;                }&#xD;&#xA;&#xD;&#xA;                if (d.body.innerText.includes(&amp;#39;全品配達料金無料&amp;#39;) || d.body.innerText.includes(&amp;#39;送料無料&amp;#39;)) {&#xD;&#xA;                    shippingNum = 0;&#xD;&#xA;                } else {&#xD;&#xA;                    let m = d.body.innerText.match(/送料[^0-9０-９]*([0-9０-９,]+)円/);&#xD;&#xA;                    if (m) shippingNum = parseNum(m[1]);&#xD;&#xA;                }&#xD;&#xA;            }&#xD;&#xA;            // ==========================================&#xD;&#xA;            // 5. ビックカメラ の処理（強化版）&#xD;&#xA;            // ==========================================&#xD;&#xA;            else if (u.includes(&amp;#39;biccamera.com&amp;#39;)) {&#xD;&#xA;                // タイトル整形（ビックカメラ.com - などを削除）&#xD;&#xA;                t = t.normalize(&amp;#39;NFC&amp;#39;).replace(/^ビックカメラ\.com\s*-\s*/, &amp;#39;&amp;#39;);&#xD;&#xA;&#xD;&#xA;                // 価格の取得 ([itemprop=&amp;#34;price&amp;#34;] またはメタタグ)&#xD;&#xA;                var priceElB = d.querySelector(&amp;#39;[itemprop=&amp;#34;price&amp;#34;]&amp;#39;) || d.querySelector(&amp;#39;meta[property=&amp;#34;product:price:amount&amp;#34;]&amp;#39;);&#xD;&#xA;                if (priceElB) {&#xD;&#xA;                    priceNum = parseNum(priceElB.getAttribute(&amp;#39;content&amp;#39;) || priceElB.textContent);&#xD;&#xA;                }&#xD;&#xA;&#xD;&#xA;                // 送料の取得（DOM要素またはページ全体から「送料〇〇円」を柔軟に検索）&#xD;&#xA;                var bodyText = d.body.innerText;&#xD;&#xA;&#xD;&#xA;                // 「送料無料」が明示されている場合&#xD;&#xA;                if (bodyText.includes(&amp;#39;送料無料&amp;#39;) &amp;amp;&amp;amp; !bodyText.match(/送料\s*[1-9０-９]/)) {&#xD;&#xA;                    shippingNum = 0;&#xD;&#xA;                } else {&#xD;&#xA;                    // 「送料550円」などのパターンを正規表現で厳密に抽出（改行やスペースを許容）&#xD;&#xA;                    var matchShipping = bodyText.match(/送料\s*([0-9０-９,]+)\s*円/);&#xD;&#xA;                    if (matchShipping) {&#xD;&#xA;                        shippingNum = parseNum(matchShipping[1]);&#xD;&#xA;                    } else {&#xD;&#xA;                        shippingNum = 0; // 見つからない場合は0円（または基本無料）として扱う&#xD;&#xA;                    }&#xD;&#xA;                }&#xD;&#xA;            }&#xD;&#xA;&#xD;&#xA;            // 合計金額の組み立て&#xD;&#xA;            if (priceNum &amp;gt; 0) {&#xD;&#xA;                var totalNum = priceNum + shippingNum;&#xD;&#xA;                displayPriceStr = totalNum.toLocaleString() + &amp;#39;円＝&amp;#39; + priceNum.toLocaleString() + &amp;#39;＋&amp;#39; + shippingNum.toLocaleString();&#xD;&#xA;            }&#xD;&#xA;&#xD;&#xA;            var l = &amp;#39;■&amp;lt;a href=&amp;#34;&amp;#39; + u + &amp;#39;&amp;#34; target=&amp;#34;_blank&amp;#34; rel=&amp;#34;nofollow&amp;#34;&amp;gt;【&amp;#39; + displayPriceStr + &amp;#39;】&amp;#39; + t + &amp;#39;&amp;lt;/a&amp;gt;&amp;lt;br&amp;gt;&amp;#39;;&#xD;&#xA;&#xD;&#xA;            // 標準プロンプト窓で表示（Enterキーで閉じられます）&#xD;&#xA;            prompt(&amp;#39;HTML&amp;#39;, l);&#xD;&#xA;&#xD;&#xA;            // クリップボードへのコピーも並行して試みる&#xD;&#xA;            navigator.clipboard.writeText(l).catch(function(err) {});&#xD;&#xA;        }&#xD;&#xA;    });&#xD;&#xA;})();&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;altpでamazon楽天yahooヨドバシのリンクと合計金額本体価格送料を計算し標準プロンプト窓に表示tampermonkey&#34;&gt;Alt+PでAmazon・楽天・Yahoo!・ヨドバシのリンクと合計金額＝本体価格＋送料を計算し、標準プロンプト窓に表示｜Tampermonkey&lt;/h2&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;// ==UserScript==&#xD;&#xA;// @name         Total Price Format to Prompt (Alt+P)&#xD;&#xA;// @namespace    http://tampermonkey.net/&#xD;&#xA;// @version      9.0&#xD;&#xA;// @description  Alt+PでAmazon・楽天・Yahoo!・ヨドバシの合計金額とリンクを計算し、標準プロンプト窓に表示&#xD;&#xA;// @match        https://www.amazon.co.jp/*&#xD;&#xA;// @match        https://*.rakuten.co.jp/*&#xD;&#xA;// @match        https://*.yahoo.co.jp/*&#xD;&#xA;// @match        https://www.yodobashi.com/*&#xD;&#xA;// @grant        none&#xD;&#xA;// ==/UserScript==&#xD;&#xA;&#xD;&#xA;(function() {&#xD;&#xA;    &amp;#39;use strict&amp;#39;;&#xD;&#xA;&#xD;&#xA;    document.addEventListener(&amp;#39;keydown&amp;#39;, function(event) {&#xD;&#xA;        // Alt + P の判定&#xD;&#xA;        if (event.altKey &amp;amp;&amp;amp; !event.ctrlKey &amp;amp;&amp;amp; !event.shiftKey &amp;amp;&amp;amp; (event.key === &amp;#39;p&amp;#39; || event.key === &amp;#39;P&amp;#39; || event.code === &amp;#39;KeyP&amp;#39;)) {&#xD;&#xA;            event.preventDefault();&#xD;&#xA;&#xD;&#xA;            var d = document, u = location.href, t = d.title;&#xD;&#xA;            var priceNum = 0;&#xD;&#xA;            var shippingNum = 0;&#xD;&#xA;            var displayPriceStr = &amp;#39;価格不明&amp;#39;;&#xD;&#xA;&#xD;&#xA;            function parseNum(str) {&#xD;&#xA;                return str ? Number(String(str).replace(/[０-９]/g, c =&amp;gt; String.fromCharCode(c.charCodeAt(0) - 0xFEE0)).replace(/[^\d]/g, &amp;#39;&amp;#39;)) || 0 : 0;&#xD;&#xA;            }&#xD;&#xA;&#xD;&#xA;            // ==========================================&#xD;&#xA;            // 1. Amazon の処理&#xD;&#xA;            // ==========================================&#xD;&#xA;            if (u.includes(&amp;#39;amazon.co.jp&amp;#39;)) {&#xD;&#xA;                var eA = d.querySelector(&amp;#39;#corePrice_feature_div .a-price .a-offscreen&amp;#39;) ||&#xD;&#xA;                       d.querySelector(&amp;#39;#priceblock_ourprice&amp;#39;) ||&#xD;&#xA;                       d.querySelector(&amp;#39;#priceblock_dealprice&amp;#39;) ||&#xD;&#xA;                       d.querySelector(&amp;#39;.a-price .a-offscreen&amp;#39;);&#xD;&#xA;                if (eA) priceNum = parseNum(eA.textContent);&#xD;&#xA;&#xD;&#xA;                var deliveryEl = d.querySelector(&amp;#39;[data-csa-c-delivery-price]&amp;#39;);&#xD;&#xA;                if (deliveryEl) {&#xD;&#xA;                    shippingNum = parseNum(deliveryEl.getAttribute(&amp;#39;data-csa-c-delivery-price&amp;#39;));&#xD;&#xA;                } else {&#xD;&#xA;                    var shipElA = d.querySelector(&amp;#39;#ourprice_shippingmessage&amp;#39;) || d.querySelector(&amp;#39;#delivery-message&amp;#39;) || d.querySelector(&amp;#39;[id*=&amp;#34;shipping&amp;#34;]&amp;#39;);&#xD;&#xA;                    var shipTextA = shipElA ? shipElA.textContent : d.body.innerText;&#xD;&#xA;                    if (shipTextA.includes(&amp;#39;無料配送&amp;#39;) || shipTextA.includes(&amp;#39;Prime&amp;#39;) || shipTextA.includes(&amp;#39;プライム&amp;#39;)) {&#xD;&#xA;                        shippingNum = 0;&#xD;&#xA;                    } else {&#xD;&#xA;                        var mA = shipTextA.match(/配送料[^0-9０-９]*([0-9０-９,]+)円/);&#xD;&#xA;                        if (mA) {&#xD;&#xA;                            shippingNum = parseNum(mA[1]);&#xD;&#xA;                        } else {&#xD;&#xA;                            var mA2 = shipTextA.match(/¥\s*([0-9０-９,]+)/);&#xD;&#xA;                            if (mA2) shippingNum = parseNum(mA2[1]);&#xD;&#xA;                        }&#xD;&#xA;                    }&#xD;&#xA;                }&#xD;&#xA;                t = t.replace(/^Amazon\s*\|\s*/, &amp;#39;&amp;#39;);&#xD;&#xA;            }&#xD;&#xA;            // ==========================================&#xD;&#xA;            // 2. 楽天市場 の処理&#xD;&#xA;            // ==========================================&#xD;&#xA;            else if (u.includes(&amp;#39;rakuten.co.jp&amp;#39;)) {&#xD;&#xA;                let jsonParsed = false;&#xD;&#xA;                try {&#xD;&#xA;                    const appDataEl = d.getElementById(&amp;#39;item-page-app-data&amp;#39;);&#xD;&#xA;                    if (appDataEl) {&#xD;&#xA;                        const jsonData = JSON.parse(appDataEl.textContent);&#xD;&#xA;                        const skuInfo = jsonData.api?.itemInfoSku || jsonData.newApi?.itemInfoSku;&#xD;&#xA;                        if (skuInfo) {&#xD;&#xA;                            if (skuInfo.taxIncludedPrice) {&#xD;&#xA;                                priceNum = Number(skuInfo.taxIncludedPrice);&#xD;&#xA;                                jsonParsed = true;&#xD;&#xA;                            }&#xD;&#xA;                            if (skuInfo.shipping &amp;amp;&amp;amp; skuInfo.shipping.postageIncluded) {&#xD;&#xA;                                shippingNum = 0;&#xD;&#xA;                            }&#xD;&#xA;                        }&#xD;&#xA;                    }&#xD;&#xA;                } catch(err) {}&#xD;&#xA;&#xD;&#xA;                if (!jsonParsed || priceNum === 0) {&#xD;&#xA;                    var priceElR = d.querySelector(&amp;#39;meta[property=&amp;#34;product:price:amount&amp;#34;]&amp;#39;) || d.querySelector(&amp;#39;meta[itemprop=&amp;#34;price&amp;#34;]&amp;#39;);&#xD;&#xA;                    if (priceElR) priceNum = parseNum(priceElR.getAttribute(&amp;#39;content&amp;#39;));&#xD;&#xA;                }&#xD;&#xA;&#xD;&#xA;                if (shippingNum === 0) {&#xD;&#xA;                    var shipElR = d.querySelector(&amp;#39;[class*=&amp;#34;postage&amp;#34;]&amp;#39;) || d.querySelector(&amp;#39;[class*=&amp;#34;shipping&amp;#34;]&amp;#39;) || d.querySelector(&amp;#39;.price_delivery&amp;#39;);&#xD;&#xA;                    var shipTextR = shipElR ? shipElR.textContent : &amp;#39;&amp;#39;;&#xD;&#xA;                    if (shipTextR.includes(&amp;#39;送料無料&amp;#39;) || shipTextR.includes(&amp;#39;送料込み&amp;#39;)) {&#xD;&#xA;                        shippingNum = 0;&#xD;&#xA;                    } else {&#xD;&#xA;                        var matchR = shipTextR.match(/([0-9０-９,]+)\s*円/);&#xD;&#xA;                        if (matchR) {&#xD;&#xA;                            shippingNum = parseNum(matchR[1]);&#xD;&#xA;                        } else {&#xD;&#xA;                            var bodyMatchR = d.body.innerText.match(/送料\s*[:：]?\s*([0-9０-９,]+)円/);&#xD;&#xA;                            if (bodyMatchR) shippingNum = parseNum(bodyMatchR[1]);&#xD;&#xA;                        }&#xD;&#xA;                    }&#xD;&#xA;                }&#xD;&#xA;            }&#xD;&#xA;            // ==========================================&#xD;&#xA;            // 3. Yahoo!ショッピング の処理&#xD;&#xA;            // ==========================================&#xD;&#xA;            else if (u.includes(&amp;#39;yahoo.co.jp&amp;#39;)) {&#xD;&#xA;                t = t.replace(/\s*[:\-]\s*(Yahoo!ショッピング|通販).*$/i, &amp;#39;&amp;#39;);&#xD;&#xA;&#xD;&#xA;                var mp = d.querySelector(&amp;#39;meta[property=&amp;#34;product:price:amount&amp;#34;]&amp;#39;) || d.querySelector(&amp;#39;meta[itemprop=&amp;#34;price&amp;#34;]&amp;#39;);&#xD;&#xA;                if (mp) priceNum = parseNum(mp.getAttribute(&amp;#39;content&amp;#39;) || mp.textContent);&#xD;&#xA;&#xD;&#xA;                for (var sc of d.getElementsByTagName(&amp;#39;script&amp;#39;)) {&#xD;&#xA;                    var tx = sc.textContent;&#xD;&#xA;                    if (tx.includes(&amp;#39;postageData&amp;#39;) || tx.includes(&amp;#39;taxIncludedPrice&amp;#39;)) {&#xD;&#xA;                        if (!priceNum) {&#xD;&#xA;                            let m = tx.match(/&amp;#34;taxIncludedPrice&amp;#34;\s*:\s*(\d+)/);&#xD;&#xA;                            if (m) priceNum = Number(m[1]);&#xD;&#xA;                        }&#xD;&#xA;                        if (tx.includes(&amp;#39;&amp;#34;isPostageFree&amp;#34;:true&amp;#39;)) {&#xD;&#xA;                            shippingNum = 0;&#xD;&#xA;                        } else {&#xD;&#xA;                            let m = tx.match(/&amp;#34;fee&amp;#34;\s*:\s*(\d+)/);&#xD;&#xA;                            if (m) shippingNum = Number(m[1]);&#xD;&#xA;                        }&#xD;&#xA;                    }&#xD;&#xA;                }&#xD;&#xA;&#xD;&#xA;                if (shippingNum === 0 &amp;amp;&amp;amp; d.body.innerText.includes(&amp;#39;送料無料&amp;#39;)) {&#xD;&#xA;                    shippingNum = 0;&#xD;&#xA;                } else if (shippingNum === 0) {&#xD;&#xA;                    let m = d.body.innerText.match(/送料[^0-9０-９]*([0-9０-９,]+)円/);&#xD;&#xA;                    if (m) shippingNum = parseNum(m[1]);&#xD;&#xA;                }&#xD;&#xA;            }&#xD;&#xA;            // ==========================================&#xD;&#xA;            // 4. ヨドバシカメラ の処理&#xD;&#xA;            // ==========================================&#xD;&#xA;            else if (u.includes(&amp;#39;yodobashi.com&amp;#39;)) {&#xD;&#xA;                // ヨドバシ特有のタイトル整形（通販表記などを削除）&#xD;&#xA;                t = t.normalize(&amp;#39;NFC&amp;#39;).replace(/ヨドバシ\.com - (.*?) 通販【全品無料配達】/g, &amp;#39;$1&amp;#39;);&#xD;&#xA;&#xD;&#xA;                var priceElY = d.querySelector(&amp;#39;.js_ppSalesPrice&amp;#39;) || d.querySelector(&amp;#39;meta[property=&amp;#34;product:price:amount&amp;#34;]&amp;#39;) || d.querySelector(&amp;#39;meta[itemprop=&amp;#34;price&amp;#34;]&amp;#39;);&#xD;&#xA;                if (priceElY) {&#xD;&#xA;                    priceNum = parseNum(priceElY.getAttribute(&amp;#39;content&amp;#39;) || priceElY.textContent);&#xD;&#xA;                }&#xD;&#xA;&#xD;&#xA;                // ヨドバシは全品基本送料無料（またはページ内で判定）&#xD;&#xA;                if (d.body.innerText.includes(&amp;#39;全品配達料金無料&amp;#39;) || d.body.innerText.includes(&amp;#39;送料無料&amp;#39;)) {&#xD;&#xA;                    shippingNum = 0;&#xD;&#xA;                } else {&#xD;&#xA;                    let m = d.body.innerText.match(/送料[^0-9０-９]*([0-9０-９,]+)円/);&#xD;&#xA;                    if (m) shippingNum = parseNum(m[1]);&#xD;&#xA;                }&#xD;&#xA;            }&#xD;&#xA;&#xD;&#xA;            // 合計金額の組み立て&#xD;&#xA;            if (priceNum &amp;gt; 0) {&#xD;&#xA;                var totalNum = priceNum + shippingNum;&#xD;&#xA;                displayPriceStr = totalNum.toLocaleString() + &amp;#39;円＝&amp;#39; + priceNum.toLocaleString() + &amp;#39;＋&amp;#39; + shippingNum.toLocaleString();&#xD;&#xA;            }&#xD;&#xA;&#xD;&#xA;            var l = &amp;#39;■&amp;lt;a href=&amp;#34;&amp;#39; + u + &amp;#39;&amp;#34; target=&amp;#34;_blank&amp;#34; rel=&amp;#34;nofollow&amp;#34;&amp;gt;【&amp;#39; + displayPriceStr + &amp;#39;】&amp;#39; + t + &amp;#39;&amp;lt;/a&amp;gt;&amp;lt;br&amp;gt;&amp;#39;;&#xD;&#xA;&#xD;&#xA;            // 標準プロンプト窓で表示（Enterキーで閉じられます）&#xD;&#xA;            prompt(&amp;#39;HTML&amp;#39;, l);&#xD;&#xA;&#xD;&#xA;            // クリップボードへのコピーも並行して試みる&#xD;&#xA;            navigator.clipboard.writeText(l).catch(function(err) {});&#xD;&#xA;        }&#xD;&#xA;    });&#xD;&#xA;})();&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;total-price-format-to-prompt-altpをautohotkey-20で動かす&#34;&gt;Total Price Format to Prompt (Alt+P)をAutoHotkey 2.0で動かす&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;WindowsでAutoHotkeyを使用する場合は、&amp;lsquo;AutoHotkey.ahk&amp;rsquo;へのショートカットを&lt;code&gt;C:\Users\%username%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup&lt;/code&gt;に登録しておくと、起動時にAutoHotkeyを起動して常駐させておくことができる。&lt;/li&gt;&#xA;&lt;li&gt;AutoHotkeyは&amp;rsquo;AutoHotkey.ahk&amp;rsquo;というファイル名、かつ、&amp;lsquo;UTF-8（BOM付き）&amp;rsquo;、かつ、改行コード&amp;rsquo;CR+LF&amp;rsquo;のテキストファイルとして作る（以下の文字列をそのファイルにコピペすればよい）。&lt;/li&gt;&#xA;&lt;li&gt;以下のコードでは、Windows用キーボードの［アプリケーションキー（メニューキー）］を二度押しするとBraveのTampermonkeyを介して、任意のウェブページのリンクコードがクリップボードに得られるようになる。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#Requires AutoHotkey v2.0&#xD;&#xA;#UseHook&#x9;; UseHookをOnにした状態で使用&#xD;&#xA;&#xD;&#xA;AppsKey::&#xD;&#xA;{&#xD;&#xA;    key := &amp;#34;AppsKey&amp;#34;&#xD;&#xA;    ErrorLevel := !KeyWait(key, &amp;#34;T0.3&amp;#34;)&#xD;&#xA;    If (ErrorLevel) {    ; 長押しした場合：MIFES&#xD;&#xA;        Run(&amp;#39;C:\Program Files\MIFES11\MIW.exe&amp;#39;)&#xD;&#xA;        KeyWait(key)&#xD;&#xA;        return&#xD;&#xA;    }&#xD;&#xA;    &#xD;&#xA;    ErrorLevel := !KeyWait(key, &amp;#34;D, T0.2&amp;#34;)&#xD;&#xA;    If (!ErrorLevel) {    ; 2度押しした場合：【旧：短押しの処理】Ctrl+. や GG 送信など&#xD;&#xA;        Send(&amp;#34;!p&amp;#34;)    ; Alt+P を送信 (確実に戻すためにシンプルに記述)&#xD;&#xA;        Sleep(300)    ; 待て&#xD;&#xA;        &#xD;&#xA;        A_Clipboard := &amp;#34;&amp;#34;&#xD;&#xA;        Send(&amp;#34;^a&amp;#34;)&#xD;&#xA;        Sleep(50)&#xD;&#xA;        Send(&amp;#34;^c&amp;#34;)&#xD;&#xA;        if ClipWait(0.5) {&#xD;&#xA;            Send(&amp;#34;{Enter}&amp;#34;)&#xD;&#xA;        }&#xD;&#xA;        &#xD;&#xA;        KeyWait(key)&#xD;&#xA;        return&#xD;&#xA;    } else {    ; 短押しした場合：【旧：2度押しの処理】Alt+C 送信など&#xD;&#xA;        Send(&amp;#34;!c&amp;#34;)    ; Alt+C を送信 (確実に戻すためにシンプルに記述)&#xD;&#xA;        Sleep(300)    ; ポップアップの表示を待つ&#xD;&#xA;        &#xD;&#xA;        ; クリップボードを一旦空にしてからコピーを試みる&#xD;&#xA;        A_Clipboard := &amp;#34;&amp;#34;&#xD;&#xA;        Send(&amp;#34;^a&amp;#34;)    ; 全選択&#xD;&#xA;        Sleep(50)&#xD;&#xA;        Send(&amp;#34;^c&amp;#34;)    ; コピー&#xD;&#xA;        &#xD;&#xA;        ; クリップボードにデータが入ったか少し待つ（最大0.5秒）&#xD;&#xA;        if ClipWait(0.5) {&#xD;&#xA;            Send(&amp;#34;{Enter}&amp;#34;)&#xD;&#xA;        }&#xD;&#xA;        &#xD;&#xA;        KeyWait(key)&#xD;&#xA;        return&#xD;&#xA;    }&#xD;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;</description>
			</item>
	</channel>
</rss>
