【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で

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

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

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

コメント

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