最近Amazonのマーケットプレイスに出品していて思ったのが、競合出品者の価格変更が早いってことです。
自分が価格改定すると、ほんの10分や15分後には競合相手の価格も変わります。
PA-APIの改定があってからAmazonMWSを使って価格改定をしていたので、どんな手段を使えばそれが可能なのかと思っていたら、2年以上前にサブスクリプションAPIというものができてたんですね。
WEBツールの「プライスター」や「マカド」などもおそらくこれを使っているんでしょう。
こういったサービスが提供されているのなら自分でも作れるんじゃないかと思い、PHPで自作した価格改定ツールをバージョンアップしました。
1から新しいものを作り直して1週間弱、出来栄えには満足しているのですが、1番ハマったのが、AmazonSQSの取得方法です。これさえなければ、3日でできたのに……。
というわけで、価格改定ツールの詳細は後日記事にするとして、今回はAmazonSQSの使い方のメモを残しておきます。
サブスクリプションAPI
サブスクリプションAPIの詳細は、MWS公式ブログが詳しいです。
簡単に言えば、今まで情報をこちらから取りにいっていたものを、Amazon側から知らせてくれるというものです。
現在提供されているのは、出品している商品の価格に変更があった時に知らせてくれる「AnyOfferChangedNotification」と、FBAマルチチャネルサービスのフルフィルメント出荷、納品、返品のステータスが変更されたときに知らせてくれる「FulfillmentOrderStatus Notification」の2つです。
価格改定には「AnyOfferChangedNotification」を購読して、AmazonSQSにメッセージを蓄えてもらいます。
このメッセージを定期的に取得して価格改定をすれば、効率的でしかもMWSのスロットル制限にも引っかからないというわけです。
AmazonSQSの利用方法
MWS公式ブログに設定の仕方も載ってます。
Amazon AWSを使ったことがない人は新たに登録をしなければなりません。
毎月100万件までは無料で受信できますが、それを超えると有料なので、クレジットカードの登録が必要です。
個人で使う場合は、制限を超えることはないと思いますが、出品数が多い人は注意が必要です。
AmazonSQSのキューからメッセージを取り出す
問題はここからです。
キューの設定は公式ブログに書かれた方法で問題なくでき、「AnyOfferChangedNotification」を受信することもできますが、PHPでどうやって取り出せばいいのか?
英語のマニュアルを読むほどの気力もないので、日本語の情報を頼りに試行錯誤した結果、AWS SDK for PHP のバージョン2を使って何とかなりました。
AWS SDK for PHP
どうしてハマったのかというと、AWS SDK for PHPのバージョンによる互換性があまりないためです。
最新バージョンは3系なのですが、情報が乏しいです。
1や2は比較的情報があるのですが、かなり混在しています。
最初はバージョン3を使っていろいろと試したのですが、どうもうまくいかず、最終的には2を使うことでメッセージを受信できました
何でも最新にするのではなくて、情報が多いものを使えってことです。
バージョン2を使う場合、以下の方法が使えます。
- Composerを利用してインストールする(推奨)
- pharを使う
- zipファイルをダウンロードする
この3つの方法で利用できるようですが、2や3ではうまくいかない場合が出てきます。
1の方法を使うことが推奨されているのはそのためのようです。
AWS SDK for PHP 2.8.30 をダウンロード
pharやzipファイルを使う場合は、ダウンロードしてきます。
公式サイトではバージョン3になっているので、バージョン2のダウンロード先を探すだけでも大変です。
ダウンロード先もバージョンがバラバラなので、よく確認します。
Composerをインストール
インストールする場合、まずはComposerが使えないと話にならないので、これをインストールします。
こちらのサイトがわかりやすいです。
ComposerでAWS SDK for PHPをインストール
「composer.json」というファイルを作成し、以下のように記述します。
{ "require": { "aws/aws-sdk-php": "2.*" } }
インストール
php composer.phar install
すると、「vendor」というフォルダができます。
これができたらインストールは成功です。
AWS SDK for PHPを使う
「vendor」フォルダ内の「autoload.php」を読み込んで使います。
パスは環境によって変えてください。
<?php require '/vendor/autoload.php'; ?>
これでようやく下準備が完了です。
ほぼ公式マニュアル通りですが、英語です。
AmazonSQSのキューからメッセージを取り出す
// メッセージを受信 require_once '/vendor/autoload.php'; use \Aws\Sqs; $sqs = Sqs\SqsClient::factory(array( 'key' => $access_key_id, 'secret' => $secret_access_key, 'region' => ['region'], 'version' => 'latest', )); $queueUrl = ['キューのURL']; try { $result = $sqs->receiveMessage(array( 'QueueUrl' => $queueUrl, 'MaxNumberOfMessages' => 10, )); } catch (Exception $e) { echo '例外: ', $e->getMessage(), "\n"; }
// メッセージを削除 foreach ($result->getPath('Messages') as $Message) { $deletemessage = $sqs->deleteMessage(array( 'QueueUrl' => $queueUrl, 'ReceiptHandle' => $Message['ReceiptHandle'], )); }
「region」の値は、キューのURLのリージョンを入れます。
「version」も入れておかないと怒られたりしますので、「latest」を入れておけば動きます。
まとめ
SQSのメッセージさえ受け取れれば、あとは自由です。
「AnyOfferChangedNotification」は1分以内に送信されるようなので、実際にするかどうかはともかく、数分ごとに価格改定することも可能です。
価格を変えないにしても、常に新しい情報を得られるといろんな可能性が広がります。
コメント