au PAYマーケットの商品情報を取得するAPIサーバの作成

プログラム概要&依頼背景

今回依頼者様から下記のご相談を受けました。

【概要】
au PAYマーケット(https://wowma.jp/)でJANコードで検索した際の検索結果をスクレイピングしてAPIのように結果を返すプログラムを作りたいと思っております。

【依頼背景】
弊社は価格比較サイトを運営しておりまして、新たに「au PAYマーケット」を検索対象に追加したいと思っているのですが、「au PAYマーケット」はAPIの提供がないため、スクレイピングで対応したいと思っています。 尚、弊社でプログラム設置後に「au PAYマーケット」側にスクレイピングの許可をとる予定でいます。

【依頼詳細】
■開発言語:Python
例えば、そのプログラムを自分のサーバー(●●●.com)に設置して、 https://www.●●●.com/index.py?jancode=4902370545319 とアクセスするとプログラムがau PAYマーケットにアクセスし、 結果を取得して、APIのようにjson形式などで結果を返してくれるプログラムです。
■取得項目:商品名 ・商品画像URL ・店名 ・価格 ・ポイント数 ・商品詳細URL ・送料無料かどうか

端的に言うと、au PAYマーケットに商品情報を取得するAPIが無いので、それを自前で実行するAPIサーバを作成して欲しいというものでした。

GETリクエストでjancodeを渡すと、商品情報がjsonで返ってくる仕様ですね。なるほどなるほど…

使用技術

今回はPythonとの指定がありましたので、下記ライブラリを使って作成することにしました。カッコ内に使用用途も記載しておきます。

  • multiprocessing(マルチプロセス処理)
  • re(正規表現を使った送料無料ラベル有無判定)
  • requests_html(Webページの取得)
  • bs4(取得したWebページのパース)
  • flask(サーバ機能)
  • json(結果をjsonで返す)

Pythonだと便利なライブラリが沢山あるので、APIサーバも比較的楽に作成できて良いですね!

ちなみにスクレイピングでよく使われるrequestsではなく、requests_htmlを使っているのはjavascriptでレンダリングされるページを取得するためです。

javascriptによって動的にレンダリングされるページだと、requestsでは上手くページ情報が取得できません。au PAYマーケットはそのタイプだったので、今回はrequests_htmlを使っています。

とても便利なライブラリですので、気になった方はドキュメントをご確認ください。

余談ですが、requests_htmlをGoogleで検索するとドキュメントより上位に個人ブログ記事が3つほど出てきます。これらを参考にするのも悪くはないのですが、一番最初はやはり公式のドキュメントを読むようにしています。

英語なので多少抵抗がある方もおられるかも知れませんが、まず最初に見るべきはやはり公式ドキュメントです。

実行結果

実行結果のスクリーンショットを下記に記載します。(一部抜粋)

試験として、今回はlocalhostで実行しています。

5000番のポートにGETリクエストでjancodeを渡すと、検索結果の商品情報がjsonで返って来ているのが分かると思います。

ちなみに私はFirefoxのjsonを整形して表示してくれるアドオンを使用しています。実行結果をさっと確認したいときに重宝します!

依頼の要件を満たしているため、これにて納品となりました。

作成所感

スクレイピング×APIサーバといった内容はPythonと相性が良いと思いました。(その筋のライブラリが豊富なので)

公式がAPIを提供していないとなると今回のようにスクレイピングして商品情報を取得する必要が出てきたりするのですが、二度手間ですよね。。

一方、楽天はAPIを提供していますし、全体としても楽天APIを使ったご依頼は多いですね。

メジャーサイトになるとAPIの他にも、結構スクレイピングプログラムの説明をしている個人ブログやQiita記事等がありますが、私が調べた限りau PAYマーケットのスクレイピングに関するブログ記事は1つも見つかりませんでした。

その点を鑑みても今回は稀有な依頼だったと思いますが、スムーズに作成できて良かったです!

ご依頼について

今回のようなAPIサーバの作成やスクレイピングのご依頼があれば是非一度ご相談ください。

もちろん内容によってはお断りするものもあるかと思いますが、ご相談・お見積りは無料にて承っておりますので、お気軽にご連絡下さい。

お問い合わせはこちらのページからご確認頂けます。