1
3

More than 1 year has passed since last update.

【macOS】右クリックから短縮したAmazonリンクをコピーする

Last updated at Posted at 2022-07-27

まとめ

  • Amazonってリンクが無駄に長い
  • そういうサイト1もあるが、macの右クリックからコピーしたい
  • Automatorを使って作った

Amazonのリンクは長い

検索から飛ぶと、こんなに長くなってしまう
https://www.amazon.co.jp/%E3%83%A2%E3%83%AD%E3%83%83%E3%82%B3-%E3%83%95%E3%83%AB%E3%83%BC%E3%83%84%E3%83%A8%E3%83%BC%E3%82%B0%E3%83%AB%E3%83%88-60%E5%80%8B%E5%85%A5%E3%82%8A1BOX/dp/B007CEWVRW/ref=sr_1_4?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&crid=3DI1RMHPRJFY3&keywords=%E3%83%A2%E3%83%AD%E3%83%83%E3%82%B3%E3%83%A8%E3%83%BC%E3%82%B0%E3%83%AB&qid=1656953958&sprefix=%E3%83%A2%E3%83%AD%E3%83%83%E3%82%B3%E3%83%A8%E3%83%BC%E3%82%B0%E3%83%AB%2Caps%2C181&sr=8-4

また、検索バーに入れていた値も引き継がれるため、どうやって検索したのかがわかってしまいます。
他人に共有するときなどは適していません。

Amazonリンクの仕組み

短縮方法

必要なのはdp/B007CEWVRWのような10桁の文字列です。
ASINと呼ばれ、Amazonが商品につける固有のIDとなっています。2

これを使うだけで、こんなに短縮することができます。
https://amazon.co.jp/dp/B007CEWVRW

URLの種類

しかし、アフィリエイトリンクなどではまれにdb/から始まる番号がない場合があるらしい。3
そのため、URLのパターンを網羅する必要があります。

上記サイトによれば、四つのパターンがあるようです。

Amazonリンク
dp/){ASIN}/
gp/product/{ASIN}/
exec/obidos/asin/{ASIN}/
o/ASIN/{ASIN}/

設計

要件がわかってきたところで、今回作るものの概要を考えます。

  1. macで右クリックから呼び出したい
  2. 入力されたURLを正規表現でパーズし、ASINを取り出す
  3. 最小のURLを再構成してクリップボードにコピー

今回はこれを目指すことにします。

要素技術

Automator

今回はURLを選択→右クリックのメニューからコピーや、クリップボードの操作を行いたかったので、OSと親和性の高いAutomatorを用いました。

と言っても、AppleはAutomatorにJavaScriptを対応させており、JavaScriptで完結することができます。
他にもAppleScriptなるものがあるようですが、このために勉強するのはだるいコストが高いのでやめました。

JavaScript

JavaScriptでクリップボードの操作など、OSに関わる操作をする場合、StandardAdditionsパッケージを用いる。

このパッケージはWeb上に公式のリファレンスが存在しない。(多分)
macのローカルに保存されているので、下記手順に従ってリファレンスを参照しましょう。4

  1. スクリプトエディタ
  2. ファイル
  3. 用語説明を開く
  4. 右上のAppleScriptをJavaScriptに変更
  5. StandardAdditions.osaxを開く
  6. それっぽい機能をクリック

例えばクリップボードへのコピーだと、Clipboard CommandssetTheClipboardToに、

Clipboard Commands
setTheClipboardTo method : Place data on an application’s clipboard. Use inside a ‘tell’ block and activate the application first
setTheClipboardTo any : the data to place on the clipboard

とあり、setTheClipboardTo(any)を使えばいいことがわかります。

実装

さて、やることとやり方がわかったので実装をします。

正規表現

今回はamazon.comでもamazon.co.jpでも動かしたかったので、正規表現は下記のようにしました。5

var regList = [];
regList.push(/(?:https?:\/\/)?([^\/]*\/).*dp\/([0-9A-Z]{10})(?:[^0-9A-Z]|$)/i);
regList.push(/(?:https?:\/\/)?([^\/]*\/).*product\/([0-9A-Z]{10})(?:[^0-9A-Z]|$)/i);
regList.push(/(?:https?:\/\/)?([^\/]*\/).*asin\/([0-9A-Z]{10})(?:[^0-9A-Z]|$)/i);

これで四つのパターンが網羅され、ドメインとASINがキャプチャされます。

URLが取れたらクリップボードにコピー

クリップボードにコピーするには、下記のように書きます。

var app = Application.currentApplication();
app.includeStandardAdditions = true;
app.setTheClipboardTo(url);

最初の二行はおまじないと思っています。
includeStandardAdditionsを入れないと、その時開いているソフトの機能しか呼び出せないようです。

URLが取れなかったら警告を吐く

用語説明を漁って、OKボタンのみのダイアログがあることがわかりました。

var dialogText = "Amazonリンクが正しく入力されませんでした。";
app.displayAlert(dialogText, {
    buttons: "終了",
});

完成

成功した時は邪魔にならないように通知を入れたりして、完成したのが下記になります。

function getAsin(target) {
	var regList = [];
	regList.push(/(?:https?:\/\/)?([^\/]*\/).*dp\/([^\/|\?]*)/i);
	regList.push(/(?:https?:\/\/)?([^\/]*\/).*product\/([^\/|\?]*)/i);
	regList.push(/(?:https?:\/\/)?([^\/]*\/).*asin\/([^\/|\?]*)/i);
	for (let reg of regList) {
		var m = reg.exec(target);
		if (m) {
			return [m[1], m[2]];
		}
	}

}

function run(input, parameters) {
    var app = Application.currentApplication();
    app.includeStandardAdditions = true;

	var domain, asin;
	urlInfo = getAsin(input);
	if (urlInfo) {
		[domain, asin] = urlInfo;
		url = "https://" + domain + "dp/" + asin;
		app.setTheClipboardTo(url);
        app.displayNotification("URLをコピーしました",{
            withTitle: "成功",
        })
	}else{
        var dialogText = "Amazonリンクが正しく入力されませんでした。";
        app.displayAlert(dialogText, {
            buttons: "終了",
        });
    }
}

GitHubにも載せてあります。

Automatorに載せる

これをAutomatorに載せて、右クリックから使えるようにします。

基本は画像の通り設定すればOKです。
URLが選択されているときに、右クリックメニューに表示されます。

終わりに

Javascript for Automationって衰退しているのか?ってくらい文献がないですね。
もっといい共有方法を知っている方がいたら教えてください。

  1. めっちゃ便利なツール: https://howtobuyfromjapan.com/amazon_url_shortener.htm

  2. 参考 Amazon: https://www.amazon.co.jp/gp/help/customer/display.html?nodeId=201446530

  3. 参考 ITMedia: https://www.itmedia.co.jp/bizid/articles/0805/13/news065.html

  4. 参考 Apple公式: https://developer.apple.com/library/archive/documentation/LanguagesUtilities/Conceptual/MacAutomationScriptingGuide/OpenaScriptingDictionary.html

  5. 参考 AmazonのURLからASINコードを抜き出すための正規表現コード
    https://penpen-dev.com/blog/ama-asin-nukidasu/

1
3
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
3