背景
Amazonのページのリンクをコピペすると、こんな感じになる。長い!!🥺
もっとひどい場合だと(上と同じもの)、めっちゃ長い!!!!😭
本当は、これだけでよい😊(3つともクリックしてみてください。同じページに飛びます)
不必要にURLが長いので、
- URLをメールやLINEで送るときに困る
- 自分の読書メモにURLを貼っておこうとおもったときに困る
AmazonのURLを短縮するサービスはいくつかあるみたいだけれど、仕組みは単純なので、正規表現も使ってみたい年頃だし、ワンライナーで書いてみた。
短縮の方針
Amazonの商品ページURLをきれいにするロジックを考えるや[Amazon URL短縮ブックマークレット][02]にあるように、要は
https://www.amazon.co.jp/d/番号/
(番号は10桁の半角英数字、アルファベットは大文字のみ)とすればよい。
sed
コマンドで短縮する。
ワンライナー
下記コマンドで短縮できる。
$ sed -E 's/(https:\/\/[^/]+\/).+([0-9A_Z]{10}).+/\1d\/\2/'
じっさいには、(macOSの場合)URLを(クリップボードに)コピーし
$ pbpaste | sed -E 's/(https:\/\/[^/]+\/).+([0-9A_Z]{10}).+/\1d\/\2/'
上記URLをコピーして、上記sed
をすると
$ pbpaste | sed -E 's/(https:\/\/[^/]+\/).+([0-9A_Z]{10}).+/\1d\/\2/'
https://www.amazon.co.jp/d/4791714059
しあわせだ……!
コマンドのなかみの解説
pbpaste
はmacOSのシステムクリップボードから内容を取得している。これをパイプ(|
)で'sed`コマンドにわたしている。
sed
の-E
オプションは、拡張正規表現。ざっくりといえば、各種記号を(ほとんど)エスケープしなくてよいので、目に優しく書きやすい。
sed
での基本的な発想は
-
https://www.amazon〜/
を拾う(\1
と名付けられる) -
xxxxxxxxxx
という10桁の英数字を拾う(\2
と名付けられる) -
\1
と\2
をくっつける
https://〜
については、www.amazon.co.jp
の場合とwww.amazon.com
の場合を想定。
xxxxxxxxxx
については、10桁の半角英数字(アルファベットは大文字のみ)を想定。
(いずれも[Amazon URL短縮ブックマークレット][02]による)
sed -E 's/(https:\/\/[^/]+\/).+([0-9A_Z]{10}).+/\1d\/\2/'
を日本語訳すると
sed -拡張正規表現をつかう '置換/2つの文字列を拾う/1こめと2こめをくっつける'
となる。
https://www.amazon〜/
を拾う
正規表現はhttps:\/\/[^/]+\/
-
\/
は、/
はエスケープが必要のため。 -
[^/]
は、「/以外の文字」 -
[^/]+
で、「/以外の文字が1文字以上続く」
ということで、日本語訳すると「https://
につづいて、/
以外の文字が1文字以上続き、そのつぎに/
となる」ものを探せ、となる。
マッチに対して()
でくくると、\1
などの名前で使えるようになる。カッコでくくったところまで表現すると
(https:\/\/[^/]+\/)
xxxxxxxxxx
という10桁の英数字を拾う
正規表現は[0-9A_Z]{10}
-
[0-9]
で、「任意の半角数字1文字」 -
[A-Z]
で、「任意の半角英字1文字(大文字)」 - くっつけて、
[0-9A-Z]
で、「任意の半角英数字1文字(アルファベットは大文字)」 -
[0-9A-Z]{10}
で、「任意の半角英数字10文字(アルファベットは大文字)」
おなじく、マッチを\2
でつかえるようにカッコでくくると
([0-9A_Z]{10})
残りの部分
(https:\/\/[^/]+\/).+([0-9A_Z]{10}).+
は、半分日本語訳にすると
(https://アマゾン).+(半角英数字10文字).+
となる。
.+
は「文字ならなんでもいい」ので、これで全体にマッチする。
\1
と\2
をくっつける
sed
の後半部分(s/検索/置換/
の置換
部分)は
\1d\/\2
これは略。(\1
と\2
はマッチを意味して、\/
は/
をエスケープしている)
おわりに
これをどう使うか
pbpaste
を併用したワンライナーもじゅうぶん便利だけど、Alfred Workflowと組み合わせてつかいたい。Alfred Workflowの作成については、別記事で。
なぜURLが長いか
Amazonの商品ページURLをきれいにするロジックを考えるにもあるとおり、Amazon側の都合によるのであって、ユーザ側にいいことがあるわけではない(アフィリエイトの人は別として)。
リソース
- 01.第1回 Amazonの商品ページURLをきれいにするロジックを考える
- [02.Amazon URL短縮ブックマークレット][02]
- [03.sed コマンド - 基本正規表現と拡張正規表現][03]
[02]:https://kosu.blog/2019/02/09/amazon-url-shortening/)
[03]:http://hydrocul.github.io/wiki/commands/sed.html#extended-regexp
環境
- macOS BigSur 11.1
- MacBook Pro (13-inch, 2020, Four Thunderbolt 3 Ports)