【PHP】AmazonSQSをAWS SDK for PHP 2で利用

PC
スポンサーリンク

最近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公式ブログに設定の仕方も載ってます。

サブスクリプションAPI 設定方法について

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を使う場合、以下の方法が使えます。

  1. Composerを利用してインストールする(推奨)
  2. pharを使う
  3. zipファイルをダウンロードする

この3つの方法で利用できるようですが、2や3ではうまくいかない場合が出てきます。

1の方法を使うことが推奨されているのはそのためのようです。

AWS SDK for PHP 2.8.30 をダウンロード

pharやzipファイルを使う場合は、ダウンロードしてきます。

公式サイトではバージョン3になっているので、バージョン2のダウンロード先を探すだけでも大変です。

Release Version 2.8.30 · aws/aws-sdk-php
Aws\Lambda - Fixed bug in UpdateFunctionCode.

ダウンロード先もバージョンがバラバラなので、よく確認します。

Composerをインストール

インストールする場合、まずはComposerが使えないと話にならないので、これをインストールします。

こちらのサイトがわかりやすいです。

[PHP]Composerを導入&はじめてのパッケージインストールまで | vdeep
こんにちは、okutani(@okutani_t)です。『Composer』というツールを使うことで、PHPで利用できるパッケージを管理することができます。 最近のPHPで利用できるフレームワークはComposerを使って導入する場合がほとんどなので、PHPで開発をおこなう場合は使い方を一通り覚えておく必要があります。

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';

?>

これでようやく下準備が完了です。

ほぼ公式マニュアル通りですが、英語です。

Installation — AWS SDK for PHP 2.8.30 documentation

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分以内に送信されるようなので、実際にするかどうかはともかく、数分ごとに価格改定することも可能です。

価格を変えないにしても、常に新しい情報を得られるといろんな可能性が広がります。

スポンサーリンク
PC PHP WEB
スポンサーリンク
hayoをフォローする
暇なのでいろいろと…

コメント

タイトルとURLをコピーしました