Amazon の URL から余計なパラメータを取り除くユーザースクリプトを書いた
created: 2022-03-19
Amazon の商品ページの URL には、商品タイトルや遷移パラメータなどが含まれている。 商品ページを共有したいだけの時に長大な URL をシェアすると余計な情報まで共有されてしまうかもしれない。
そこで、余計なパラメータを取り除くユーザースクリプトを書いた。
gist.github:3a7d37f840ccfcbf345e302750f2b23b
例えば https://www.amazon.co.jp/%E9%8B%BC%E9%89%84%E9%83%BD%E5%B8%82-%E3%83%8F%E3%83%A4%E3%82%AB%E3%83%AF%E6%96%87%E5%BA%AB-SF-336-%E3%82%A2%E3%82%A4%E3%82%B6%E3%83%83%E3%82%AF%E3%83%BB%E3%82%A2%E3%82%B7%E3%83%A2%E3%83%95/dp/4150103364/ref=pd_bxgy_1/355-0796311-2845020?pd_rd_w=88Sk2&pf_rd_p=020fee25-8ced-4191-bce3-27e7ce0c0e3b&pf_rd_r=40NVSRRD1YVKHDQ9CYTD&pd_rd_r=8b36acfc-e358-4d1e-94f2-325f1a793021&pd_rd_wg=mVsYB&pd_rd_i=4150103364&psc=1 のページを表示しようとすると https://www.amazon.co.jp/dp/4150120072/ に移動してくれる。
Firefox において GreamseMonkey と TemperMonkey で軽く動作を確認した。
スクリプト本体も以下に記載する。
// ==UserScript==
// @name Amazon URL canonicalizer
// @description Replace Amazon product page url with canonical form (`https://amazon.co.jp/dp/XXXXXXXX/`)
// @version 1.0.0
// @match *://*.amazon.co.jp/dp/*
// @match *://*.amazon.co.jp/*/dp/*
// @match *://*.amazon.co.jp/gp/product/*
// @match *://*.amazon.co.jp/*/ASIN/*
// @match *://*.amazon.com/dp/*
// @match *://*.amazon.com/*/dp/*
// @match *://*.amazon.com/gp/product/*
// @match *://*.amazon.com/*/ASIN/*
// @icon https://www.amazon.co.jp/favicon.ico
// @run-at document-start
// ==/UserScript==
/**
* get ASIN from page location.
* ASIN is also known as productId and is some-digit alphanumeric ID.
* @return {string|null} ASIN
*/
const getASIN = () => {
const patterns = [
/(?:.+\/)?dp\/([^/?]+)/,
/gp\/product\/([^/?]+)/,
/ASIN\/([^/?]+)/,
];
for(const pattern of patterns){
const asin = location.href.match(pattern);
if (asin) {
return asin[1];
}
}
// cannot get ASIN
return null;
}
const isCanonicalUrl = () => {
const pathPattern = /^\/dp\/[a-zA-Z0-9]+\/?$/;
return location.pathname.match(pathPattern) !== null;
}
/**
* location.replace(canonicalURL)
*/
const canonicalize = () => {
const asin = getASIN();
if (!asin) {
return;
}
// i.e. https://www.amazon.co.jp/dp/XXXXXXXX/
const canonicalUrl = `${location.protocol}//${document.domain}/dp/${asin}/`;
location.replace(canonicalUrl);
}
const main = () => {
if (!isCanonicalUrl()) {
canonicalize();
}
}
main();