[PR]増税前Amazonビッグセール中

LaravelとAmazon APIでセール情報自動更新ページを作ろうとしたら挫折した件について【PHPフレームワーク】

LaravelでAmazonセール情報自動更新ページを作ろうとしたら挫折した件について【PHPフレームワーク】

ぼーる丸
どうも、バーチャルブロガーのぼーる丸です。

ぼーる丸、あるときひらめいたのです。

ぼーる丸
Amazonのセール情報自動更新ページを作れば、
わざわざセール情報を集めて記事を書かなくても良いのでは?

そう、ぼーる丸はセールが大好きなバーチャルカラーひよこ。

当ブログでも結構な頻度でペンタブやイラスト教本のセール情報記事を書いていたので、
それを自動化すれば幾分かはブログ運営も楽になるのではと思い、
元プログラマーという強みを活かすため開発に踏み切りました。

そしてこの記事がこのブログに掲載されているということは、
私はそのプロジェクトに挫折したということです!

一週間ほどブログの更新とお絵かきを控えて全てのリソースを投入したのに、
この結果は残念でなりません。

時間を無駄にしただけではちょっと悲しすぎるので、
今回の調査でわかった情報をここに全て掲載致します!

同じアイデアをひらめいた方がこれを参考にし、
作るかどうかの指標になれば幸いです。

ぼーる丸
今回イラストとは関係無いですが、プログラミングに興味がある人は見てみてね!

発端はKindle書籍のセール情報ページが存在したこと

Amazon APIを利用すればセール自動更新ページを作れるのではと思い立ったときに、
見つけたのが以下の記事です。

参考 【Kindle】Amazon APIを使ってKindle書籍のセール情報を横断的に見られるページを作ったよ - めめんとめめんと
ぼーる丸
おお、既に同じ構想で作っている方が居るではないか!

と、私は浮かれました。

上記の記事に書かれている設計を基にツールを作成するため、
私はPHPフレームワーク「Laravel」の学習を始めました。

学習に使ったのはこちらの本。すごくわかりやすかったです。
(ただし、ある程度のPHPの知識は必要)

セール情報の取得が上手くいかずに挫折

結論から書くと、
Amazon APIでのセール情報の取得が上手くいかずに挫折しました。

セール情報に関してはちょっと工夫しないと上手く取得できないようです。

そして取得できたとしても、セール開始前と終了後が混在して微妙な感じになりました。

あと商品画像が一部取得できなかったりなどの問題もあって色々面倒くさかったです。
(この辺はテキストリンクのみにするなどで対応は可能ですが…)

で、ある程度は調べたのですが具体的な対処方法が見つからなかったため、
これ以上工数がかかるのもコスパが悪いと思い断念したわけです。

ぼーる丸
詳しい方、TwitterのDM等で情報求ム!

利用したツール

Laravelで開発するにあたり、様々なツールを導入しました。

Visual Studio Code

PHP+Laravelでコーディングするために利用したコードエディタ。

Laravel用の拡張機能を入れればより開発しやすくなります。

参考 Laravelで気持ちよく開発をするための拡張機能のまとめ - QiitaQiita

DB Browser for SQLite

テーブルを作ったり編集するためのブラウザ。
(SQLite用)

XAMPP

Apache + MariaDB + PHP + Perlの環境が構築できる。
(正直SQLiteがあれば必要無かった気もする)

Tera Term

サーバーにLaravelをインストールするときに利用したターミナルエミュレータ。

コマンドプロンプト

Windows環境でLaravelプロジェクトを作成するときに利用。
(Windowsの場合は標準搭載のため、インストール不要)

Laravelをインストール

これが第一関門だと思いますが、
まずはサーバーにLaravelをインストールする必要があります。

WordPressみたいに簡単にインストールできるものではないので、
割と慣れていないと厳しいかもしれません。

参考にした記事は以下の通り。
(当ブログはエックスサーバーなので、それ向けの解説です)

参考 XSERVER(エックスサーバー)にLaravelアプリを構築する方法 | 実践的Web開発メソッド実践的Web開発メソッド 参考 エックスサーバー(Xserver)にLaravelをインストールする方法 | 84LIFEブログ84LIFEブログ | LIFE IS CONTENT 参考 laravel サーバー(XSERVER)で環境構築方法 - Programing NotePrograming Note

ちなみに一部コマンドが間違っていたりしたので、
複数のサイトを参考にインストールしてみてください。
(サイトごとに若干インストール手順が違います)

とりあえずはLaravelのIndexページが表示されるようになればOKだと思います。

途中でviでのテキスト編集が出てきますが、
独特な操作方法なので以下の記事を参考にしてみてください。

参考 viコマンド(vimコマンド)リファレンス - QiitaQiita

ローカル環境でLaravelプロジェクトを作成

ローカルでのLaravelのインストール方法については、
公式ドキュメントがわかりやすいです。

参考 インストール 5.8 LaravelLaravel Document

私の場合、PHPフレームワーク Laravel入門を参考にLaravelプロジェクトを作成し、
Bladeなどの機能を学んでいきました。

Laravelで開発するにはPHPやSQLの基礎知識などが事前に必要だと思います。

もしその辺りの知識がない場合は、
ドットインストールなどのプログラミングが学べるサイトで先に勉強しておきましょう!

Laravelプロジェクトに関しては、
コマンドプロンプトでコマンドを実行するだけで作成できます。
(これも全部本に載ってますし、多分ググれば出てきます)

AmazonAPIの呼び出し

Laravel環境と開発環境が整ってやっとAmazon APIの登場です。

Amazon APIの導入に関しては以下の記事を参考にしました。

参考 「Amazon API」の使い方を紹介します!最安値やランキング取得できるよ①-アソシエイトID(タグ)登録編- | HPcodeHPcode(えいちぴーこーど)

また、Laravel用のAmazon APIモジュールというのもあります。

参考 Laravel用AmazonAPIモジュール – Sheltie's GarageSheltie's Garage

動作は同じなのでどっちを使っても良いと思いますが、
Laravel用のAmazon APIモジュールの方がコードがスッキリします。

また、NodeLookupというページに表示されている商品データを取得する方法もあります。

参考 Amazonカテゴリ一覧 23,420 件(BrowseNodeデータ収集結果) - QiitaQiita

ページを指定するには「BrowseNode」が必要なのですが、
これのおかげでペンタブのセール情報がまとまってるページも見つけられました。

参考 ペンタブレット 通販 | AmazonAmazon

でもこれ経由で商品データを取得すると、何故か画像が取得できなかったという…
(このページだけかもしれないですけどね)

データベース設計

Amazon APIのデータは入れるためのデータベース設計に関しては、
以下の記事が参考になりますが、正直ここまでの作り込みは必要ないと思います。

参考 AmazonAPIの商品を保存するデータベース設計 - QiitaQiita

恐らく必要な列は以下の通り。

  • id(プライマリキー用)
  • ASIN
  • title
  • amazon_detail_page_url
  • price
  • amazon_image_id

もっと正確な表示にしたい場合はセール終了日などの列も必要ですが、
私はそのセール終了日がどこで取れるのかわからず断念しました。

なのでセール関係なく表示させたいって場合は、セール終了日の列は必要ありません。

で、このテーブルの使い方としては、
定期的にAmazonの商品データをテーブルにINSERTして、
表示するときはAmazon APIを通さずにテーブルから直接データを引っ張ってくる。

というのを考えていました。

プログラムの定期実行に関しては『cron』が使えるかなと。

参考 【PHP】バッチ処理をcronで自動実行する - QiitaQiita 参考 Cron設定 | レンタルサーバー【エックスサーバー】エックスサーバー

なのでINSERTと表示のphpは別々にする形ですね。

一応セール情報を取得する方法はあるにはある?

一応セール情報を取得する方法はあるにはあるみたいです。

参考 Kindleの最新セール情報を知るためのオフィシャルな方法たつをの ChangeLog

ただ、これ読んでも正直よくわかんなかったですね。

しかしこういった方法を使って『キンセリ』を実現しているらしいので、
今も使える手法だと思います。是非参考に!

おわりに

そんな感じで、これだけ調べたのに残念ながら挫折しました…

でもまあ後ちょっとのところでもあったので、
また別の機会に再チャレンジしても良いかなと。

時間を無駄にしたというよりも、
久々にプログラミングに挑戦できて楽しかったなーという気持ちが大きいです。

ぼーる丸
というわけで誰か代わりに作って、あわよくば私に提供してください!