Amazon でガンプラの定価を表示する Chrome 拡張機能を作ってみて審査通ったけど大改修した話(また審査中)

 先日、Chrome 拡張機能「Get Bandai Gunpla Price」を公開させて頂きました。こちらは先日の記事でも紹介させて頂きましたが Amazon に掲載されているガンプラの商品ページに、バンダイホビーサイトに掲載されている価格を表示させるものです。
 昨今の巣ごもり需要や材料不足によって品薄が続き、Amazon (だけではないですが)のガンプラの価格が、定価とは大きく乖離してしまっている状況を解決したいと思い、作成したものになります。

 無事 Google の審査をクリアして、晴れて「Get Bandai Gunpla Price」は公開されました。またその公開に併せて大きな反響を頂きました。正直驚きました。皆さんも Amazon の表示価格にこれだけの関心があったということでしょうか。

 そうした中で 2021/10/02 時点で 214 人の方に使って頂いているという大変有り難いことになっております。

ただ嬉しい反面、申し訳なく思うとこもあり、それはテストが不十分で表示が出来ないガンプラが多々ある状況でした。体感で正常に表示されるのは 5,6 割と感じでした。最初から全てに完全に対応する気がなく、公開後に少しづつやっていこうかなって思うだったのですが、いきなり多くの方に使っていただいているということ(繰り返しますが非常に有り難いことです、はい)で、早いタイミングで根本から改修しようと決めました。

v 0.0.1 の問題点

 現時点で公開している v 0.0.1 には以下のようなロジックでした。

v 0.0.1 のロジック
  1. 表示している Amazon ページの HTML Title を取得する
  2. 取得した Title からグレード(HG,MG)やスケール(1/144,1/100)、名前(ドム、νガンダム etc)を抽出
  3. バンダイホビーサイトの検索ページで検索・結果取得し、ページに表示する。

 ここで問題になるのが、2と3でした。
 まず2ですが、グレード(HG,MG)やスケール(1/144,1/100)は、ある程度決まった形式なので取得は容易なのですが、問題は名前でした。()などの記号や半角スペースが入ってたり、半角全角がごちゃまぜだったり、改めて見ると結構自由に商品名が付けられています。一筋縄では行きませんでした。一番驚いたのは、まさかの νガンダムの “ν" が小文字の “v"(ブイ)であったということ。

Image
小文字の v で文字列検索しています。二箇所ヒットです。
Amazon の商品登録ってどうやってんだろう….

 次に3です。なんとか Amazon ページから商品名を取得して、バンダイホビーサイトに検索をかけるのですが、バンダイホビーサイトの検索は曖昧検索が出来ないようで、完全一致か部分一致でしか結果を得られません。さらにバンダイも商品名に揺らぎがあって、例えばグレードの HG が、商品によって全角だったり半角だったりします。

 さらに検索結果を DOM で取得してパースしてゴチャゴチャしてって感じで Amazon ページに取得するのですが、DOM で取得するのでバンダイのページのレイアウトが変われば一発でアウトです。機能しなくなります。さらに拡張機能が動くたびにバンダイホビーサイトへのリクエストが発生し、量によっては大きな負荷を与えかねません。
 Amazon ページから商品名が取得しづらいと、前述していますが、それっぽいキーワードを片っ端からバンダイホビーサイトで検索するという荒業も考えましたが、バンダイ側に多大な迷惑をかけることになるので断念した経緯もあります。

v 0.0.1 の問題点
  • Amazon ページから商品名を取得しづらい。
  • バンダイホビーサイトの検索で曖昧検索が出来ない。
  • バンダイホビーサイトのページのレイアウトが変わると検索結果を取得できなくなる。

v 0.0.2 のロジック

 前述した一番の問題はバンダイホビーサイトへの依存性が高いことです。バンダイホビーサイトの検索ロジックとページのレイアウトに機能がドップリ依存しています。なので v 0.0.2 ではバンダイホビーサイトの依存をきっぱりと断ち切りました

 ではどのようにしてバンダイホビーサイトの価格情報を取得するのかと言いますと、事前に私のほうでバンダイホビーサイトをクロールして取得した価格情報を Chrome 拡張機能に組み込んでおります。なので「Get Bandai Gunpla Price」は自身で持っているデータから検索して価格情報を持ってくるようにしました。(一応公開情報の取得とはいえ、クロールする際は 20秒あたり1ページとしてサーバーに負荷を掛けないよう実施しました。)
 これによって Amazon ページから取得した文字列を複数回に渡り検索することが出来、結果表示出来ないページの劇的に減らすことが出来ました。さらに外部(バンダイホビーサイト)へのリクエストも無くなったので表示スピードの向上にも繋がりました。

v 0.0.2 のロジック

Chrome 拡張機能内にある、バンダイホビーサイトのデータから情報を取得

ロジック変更による恩恵
  • 複数回の検索によって情報を取得・表示出来るページが劇的に向上
  • すべての処理がローカルで完結するので処理速度(ページへの表示速度)が向上

 ただし良い点ばかりではありません。情報を Chrome 拡張機能に盛り込んだので、定期的にその情報を更新する必要があります。勿論これは開発者である私の責任になります。今は思っきり手動ですが、自動を行える仕組みを考えたいですね。
 また一応不要な情報は省いてサイズを削減してデータを盛り込んではいますが、データサイズが肥大化する恐れもあります。今のところは動作と Chrome への影響は確認されていませんが、これも将来的に考えたいところです。多分データを自前のサーバーに配置して拡張機能に取得しに来てもらう感じかな。

    {
      "product": "【抽選販売】HG 1/144 ユニコーンガンダム(デストロイモード) Ver.NIKE SB",
      "url": "https://bandai-hobby.net/item/4743/",
      "price": "2,420円(税10%込)",
      "brand": [
        " HG[ハイグレード]"
      ],
      "series": [
        "機動戦士ガンダムUC[ユニコーン]"
      ]
    }

上のような感じでデータを取得し、Chrome 拡張機能に組み込んでいます。

本 Chrome 拡張機能 の開発について

 今まで自分の作業の自動化なのでプログラムを組むことはありましたが、自分作ったものを公開し、他人に使ってもらうということは今回が初めてでした。正直公開してから自分が作ったものが使われるのか、というのをリアルに感じてビビりました。
 ただ自分の作ったものに対してフィードバック(いいね、リツイート、引用リツイート etc)を頂けるのは非常に嬉しいことですね。マジでモチベーションが上がりますね。燃え上がります。

 v 0.0.2 は現在審査中です。審査が通り次第公開となります。今回の v 0.0.2 に留まらず今後とも継続的に機能開発を行っていきますので宜しくおねがいします。最後に以下引用リツイートの一部を紹介させて頂きます。