ツールをパワーアップしてみよう

前回の初歩初歩ランキング取得ツールをサンプルにして、今回はいくつかパワーアップしてみましょう。

項目を追加してみよう

ランキング取得ツールなのでランキング以外は必要ないといえば必要ないのですが、元々はマスタ取得ツールを応用したものなので、いろいろ項目を追加することはできます。

ASINとランキング(Salesrank)しか取得していなかったところをこんな風に最低価格や出品者数の項目を追加して、

CSVファイルへの出力項目にも追加してあげることで、項目を増やすことができます!

出力サンプル(見出しはボクが追加しました)

rankgetex1

価格や出品者数があると、よりモノレートっぽくなりますね!

取得できる項目については、この辺りが参考になります。国やカテゴリーによって取得可能な項目に差があるのでご注意ください

http://docs.aws.amazon.com/ja_jp/AWSECommerceService/latest/DG/RG_Large.html

取得先の国を変えてみよう

$baseURLを変更することで接続するアマゾンの国を変えることができます。

上記はアメリカに接続するときの変更例ですが、出力結果はドル単位ではなくセント単位なことに注意しましょう。

新品価格:1365→13ドル65セント

これでアメリカのアマゾンの商品マスターや価格の取得、あるいはアメリカのランキング変動を取得することで輸出にも応用できるかもしれません。
※ボクは輸出は手掛けていないので有効性は不明です!

エラー率を減らそう

前回たった10件でも1~2件発生してしまうエラー問題(エラーなしの時もたまにはありました)。

完全回避はむずかしいとしても、エラー率を減らすにはどうしたらよいのでしょうか?

100件のデータをサンプルにエラーを少なくする方策を試してみたいと思います。

前回のソースのまま100ASINのランキング取得を行ったところ、

Normal-1: 82件取得
Normal-2:85件取得

となりました。平均エラー率16.5%。これを減らしていくことを目標とします。

ゆっくりやる

最初に試してみたいのは、処理速度を落としたらもっと確実にやってくれてエラーは出なくなるのではないか、ということで

の(1)の中が停止する秒数なので、こちらを(2)にして1秒→2秒にしてみました。

すると、、

slow-1:75件取得
slow-2:83件取得

エラー率21%、、処理時間が遅くなって、特に正確性も増してない、、というかちょい悪くなってるのは誤差の範囲かな。。

じゃあもしかしてここで1秒待つ必要ないんじゃないか!!!???と思い、

sleep(0.1);で0.1秒に設定してみたところ・・・

fast-1:52件取得
fast-2:45件取得

エラー率51.5%!

ちょっと誤差とはいえないレベルの、明確な悪影響が出ました!

少なくともボクの環境では1秒待つことに意味はあるようです。
でも2秒にしても効果はない、という感じでしょうか。

もしかしたら0.8秒でも同様の結果が得られるのかもしれませんが、とりあえずここをいじっても前回よりエラー率は下げられない模様です。

エラー対象を複数回処理する

前回のソースでは元々下記部分でエラーだった場合、salesrank/work/RankingCheck-error.txtにエラーが発生したASINリストを書き出す仕組みにしています。

このエラーリストを利用して、

1回目:ASINリストを元に処理→80%前後を処理
2回目:エラーリストを元に処理→エラーが発生したASINの80%前後を処理

といった2回処理を回す形にしたらエラー率は20%×20%の4%まで下がるのでは?と思い2回処理にトライしてみます。

やり方はかんたんです。

まず、1回目の//ランキングチェック対象リスト取得~ /* 繰り返し終わり */ までの行を コピーして、/* 繰り返し終わり */ の行の後に貼り付けして、

貼り付けた最初の行の

//ランキングチェック対象リスト取得を//エラー出力対象リスト取得、にでも変えて(//の後はコメントなので自由に書いてOKです)、その下の読み込みファイルの場所を指定している箇所を、ランキングチェック対象リストからエラーリストに変更します。

2回目もエラーになったものがわかるように、2回目エラーの出力先ファイル名も変えておきましょう

 

これで、2回目は1回目にエラーが出たASINのみを対象として処理が行われるようになります。

こちらのテスト結果は・・・

Double-1:96件取得
Double-2:98件取得

エラー率3%!!!

見事想定通りの結果が出て超うれしいですw!!

ではもしかしてさらに1回、2回目に出力したエラーリストをもう1回やったらもうちょっと上がるのかな??

一応やってみたところ(試してみたい方は2回目処理の追加を参考に、変更してみてください。コピペして入力ファイル/エラー出力ファイルの名前を変えるだけです)

Triple-1:99件取得
Triple-2:98件取得

エラー率1.5%まで来ました!

大量に処理する場合は1%の差でも大きいので、エラー対象ASINに対して処理を繰り返すのは非常に有効といえます。

・・・ただ、なぜか取得できていないのにエラーリストに出てこないASINがたまに出てくるので、途中でASINがモレてしまうならば、たとえ10回繰り返しても100%にはならない可能性があります。

追記型じゃなくて実行単位で別のファイルにしよう

前回のソースだと、処理を実行するたびに処理結果がRankingCheck.csvに追加されていきます。

ランキングの推移を見るために1つのファイルにまとめてある方が便利な場合はそのままでかまいません。
しかし、もし実行のたびにファイルを分けたい場合は、毎回実行前に前回のファイル名を変える、といった作業が必要になります。

そのため、ソースの最初の方に下記をつけてあげることで、まず前回のファイルを前回ファイル名+現在日時にしてから処理をするようになります。

 

こんな感じで、実行ごとに前回ファイルが過去ログになっていきます。

jprankinggetrename

まとめて超スピードアップしよう

これはボクも少し前に知ったのですが(お恥ずかしい)!PA-APIは実は1回のリクエストで10ASINの処理をすることができます。

たとえば、リクエストするASINを1件じゃなくて5件追加する書式は、カンマ区切りでこんな感じになります。

5件ずつ、10件ずつ処理をすることで

処理が飛躍的にスピードアップ!

しかし、エラーも5個・10個単位で発生するので先ほどのようなエラー対策は必須です。

1回目は10件ずつ全件→2回目は5件ずつでエラーのみ→3回目は2回目のエラーのみ1件ずつ、といった処理がおすすめです。

あとは、10件ずつ処理する場合、たとえば100ASINの処理なら10の倍数なのでキレイに処理できますが、

・10個単位で処理するようなくりかえしの制御
・99ASINの場合最後9ASINの処理をどうするか、といった端数処理の問題

などグッとプログラミングっぽい要素が出てくるので、ある程度の経験か情熱が無いと難しいかもしれません。

99ASINの場合、90件であきらめて9件は捨てる!というのも1つの方法だと思います。
※ボクは端数処理を解決できずに、最後に無用なASINを10件足す、といった工夫をしていた時期があります。。

ボクは2回くらい断念した後、いろいろ試す中で何とか10件単位で端数処理も含めて動くものを作ることができました!

が、もはや修正ではなく作り直しに近く、どこのサイトからコピペしたのか素性がわからない箇所を含むため、こちらはソースの公開は差し控えておきたいと思います。。

ここまで読んでいただきありがとうございました!次回は取得したランキングデータを活用してランキングアップ回数を集計する方法、をご紹介する予定です。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です