Amazonの長い長いURLを短縮するワンライナー(正規表現を勉強してみた)


背景

Amazonのページのリンクをコピペすると、こんな感じになる。長い!!🥺

もっとひどい場合だと(上と同じもの)、めっちゃ長い!!!!😭

本当は、これだけでよい😊(3つともクリックしてみてください。同じページに飛びます)

不必要にURLが長いので、

  • URLをメールやLINEで送るときに困る
  • 自分の読書メモにURLを貼っておこうとおもったときに困る

AmazonのURLを短縮するサービスはいくつかあるみたいだけれど、仕組みは単純なので、正規表現も使ってみたい年頃だし、ワンライナーで書いてみた。

短縮の方針

Amazonの商品ページURLをきれいにするロジックを考えるAmazon URL短縮ブックマークレットにあるように、要は
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短縮ブックマークレットによる)

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側の都合によるのであって、ユーザ側にいいことがあるわけではない(アフィリエイトの人は別として)。

リソース

環境

  • macOS BigSur 11.1
  • MacBook Pro (13-inch, 2020, Four Thunderbolt 3 Ports)