結論から言うと
[^0-9A-Z]([0-9A-Z]{10})([^0-9A-Z]|$)
という正規表現で、AmazonのURLからASINコードを抜き出せます。
ASINコードとは
最初から説明していくと
Amazonの商品はすべて、ASINというコードで管理されています。(紙の本を除く)
なので、ASINコードさえ分かれば商品を特定できます。
そしてASINコードは商品URLにも基本的に含まれています。
例えば、以下のような形式で。
https://www.amazon.co.jp/dp/B004W6ISOI https://www.amazon.co.jp/長ったらしい商品の名前/dp/B004W6ISOI?長ったらしいオプション https://www.amazon.co.jp/gp/product/B004W6ISOI https://www.amazon.co.jp/o/ASIN/B004W6ISOI http://www.amazon.co.jp/exec/obidos/ASIN/B004W6ISOI
(なんでこんなにいっぱいあるんだ・・)
ASINコードの法則
ASINコードは
B004W6ISOI
のような形で、基本的に大文字のBではじまる10文字の数字+大文字英字の組み合わせです。
ですが稀にBから始まらない商品もあります。
この法則についてはAmazonは公開していないらしいので詳しいことはわかりません。
ASINコードは書籍以外の商品を管理する、当サイト独自の商品番号であり、特に法則などはございませんことをご了承下さいますようお願い申し上げます。
ただ、現状のASINコードから推測するに
- 10文字
- 数字+大文字英字
という条件で作られているみたいです。
正規表現の解説
というわけでここまでの前提を踏まえた上で、以下の正規表現の解説です。
[^0-9A-Z]([0-9A-Z]{10})([^0-9A-Z]|$)
まず[^0-9A-Z]
の部分ですが
これは先頭1文字目が「0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ」以外だったら一致する…という意味です。
[]
:「どれかの文字に一致する」という意味[]
の中の先頭に^
が付くと:「どの文字にも一致しない」という否定の意味になる
次に([0-9A-Z]{10})
の部分ですが
これは2~11文字目の文字が「0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ」だったら一致する…という意味です。
{10}
は直前の文字を10回繰り返すという意味なので、この場合「0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ」のいずれかの文字を10回繰り返すという意味です。
つまり、ここで一致する文字がASINコードになります。
最後に([^0-9A-Z]|$)ですが
これは12文字目が
- 「0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ」以外
- もしくは空文字
だったら一致するという意味です。
空文字を指定するのは、以下のように最後に/
などの文字が付かないURLがあるためです。
https://www.amazon.co.jp/dp/B004W6ISOI
JavaScriptのサンプル
以下、JavaScriptのサンプルです。(以下のリンクをブックマークなどに保存して、Amazonの商品ページで実行すると短縮URLにできます)
そんな感じです。
おわり
コメント