前々回、ランキングの上昇回数をモノレートやプライスチェックのグラフを目で追って数えるのではなく、モノレートの数値データをコピペしてExcelで簡易的にカウントする方法を紹介しました。
今回は簡易カウントから発展した、自作ツールへと進んでいきます!
簡易カウントでもしんどい
簡易カウント法で、ある程度の「売れている、売れていない」をすばやく数値化して判断できるようになり、なんとなく「10個くらい」よりは明確な数字が好きなボクには非常に助かりました。
しかし、モノレートにランキングデータが無かったり、あっても飛び飛びで十分なデータが無いこともありました。
簡易カウントのおかげで数えるのは楽にはなりましたが、一定期間内のランキング上昇回数は、
季節や販売開始からの時間経過などによって刻々と変化していきます。
「リサーチした時は売れていたのに・・・」
と、もう売れていない商品を仕入れないためには、過去の一時点の売行きデータをいつまでも使っているわけにもいきません。
とはいえ、仕入のたびに再度カウントし直すのは、扱う商品数が多いボクには簡易カウントでもけっこうな手間になります。
そこで、ボクは考えました。
「モノレート」ってただの過去の蓄積データでしょ?
※「ただの」で十分すごいんですが!
なら、モノレートと同じように自分もランキングを継続的に貯めていけばいいんだ!
自分専用のモノレートを作るしかない!と進むことにしました。
公開!初歩のランキングデータ取得ツール
今回も前回と変わらずPA-APIで作りました。
ASINから商品マスタの情報を取得するツール自体は以前にもうできていたため、あとはどう継続的に情報を取得するか、の方がテーマになります。
ずばり言って、ボクの取得ツールは↓このサイトの情報を大きく参考にして応用したものなので、こちらを参考にしていただければ、取得ツールとしてはほぼ同じものができるんじゃないかと思います。
今回は「ツールって意外とかんたん」、ということをお伝えするため、
そしてもし「自作ツールとか意味不明!むり!」と思っている方がいるなら、そこまでむずかしくないよ!と心理的ハードルを下げていただくために、
ボクが使っていた拙いランキング取得ツールのソースを公開してしまいます。もしかしたらそのうち恥ずかしくて削除するかもしれません!
たぶん本職の方が見たら「もっとキレイに!」「効率的に!」できると思いますが、これもハードルを下げるための苦肉の策だと思って笑ってやってくださいw
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 |
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>JPSalesRank取得</title> </head> <body> <?php //初期設定(work内のファイルを削除) $dir="salesrank/work/"; //エラーファイルの保存ディレクトリworkをsalesrank内に作成しておく $fileName = 'salesrank/work/*.*'; foreach (glob($fileName) as $val) { unlink($val); } // ログイン情報 $access_key_id = '自分のAPIアクセスキーID'; $AssociateTag = '自分のアソシエイトタグ'; $secret_access_key = '自分の秘密アクセスキー'; //ランキングチェック対象リスト取得 $data = file_get_contents("salesrank/RankingCheckList.txt"); //ランキングチェック対象ASINリスト(salesrankディレクトリ内) $data = explode( "\r\n", $data ); //ASINを改行コードごとに分解して格納 $cnt = count( $data ); // ASIN数 //パラメーター取得 if(isset($_GET['all'])) { $all = $_GET['all']; } if(isset($_GET['page'])) { $page = $_GET['page']; } for( $j=0;$j<$cnt;$j++ ){ //取得ループスタート // 各パラメータ設定 $params=array(); $params['Service'] = 'AWSECommerceService'; $params['AWSAccessKeyId'] = $access_key_id; $params['Version'] = '2011-08-02'; $params['AssociateTag'] = $AssociateTag; $params['Timestamp'] = gmdate('Y-m-d\TH:i:s\Z'); $params['ResponseGroup'] = 'Large'; $params['Operation'] = 'ItemLookup'; $id=$j; $params['ItemId'] = $data[$id]; // ASINを5個パラメータに入れる // パラメータの順序を昇順に並び替えます ksort($params); // Site URL $baseurl = 'http://ecs.amazonaws.jp/onca/xml'; // URLの追加部分を作成します $option_string = ''; foreach ($params as $k => $v) { // URLの追加部分をURLエンコードして&でつなげる。 $option_string .= '&'.urlencode_rfc3986($k).'='.urlencode_rfc3986($v); } // 最初の"&"のみ削除 $option_string = substr($option_string, 1); // URL作成 $context = stream_context_create(array( 'http' => array('ignore_errors' => true) )); $parsed_url = parse_url($baseurl); $string_to_sign = "GET\n{$parsed_url['host']}\n{$parsed_url['path']}\n{$option_string}"; // - HMAC-SHA256 を計算し、BASE64 エンコード $signature = base64_encode(hash_hmac('sha256', $string_to_sign, $secret_access_key, true)); // - リクエストの末尾に署名を追加 $url = $baseurl.'?'.$option_string.'&Signature='.urlencode_rfc3986($signature); // HTMLアクセスを行う $get_contents = file_get_contents($url, false, $context); $pos = strpos($http_response_header[0], '200'); if ($pos === false) { // エラー時処理 $file = 'salesrank/work/RankingCheck-error.txt'; // ファイルをオープンして既存のコンテンツを取得します $current = file_get_contents($file); $current .= $data[$id]."\r\n"; //エラーになったASIN // 結果をファイルに書き出します file_put_contents($file, $current); }else { //エラー処理終了 //エラーが無い場合の処理 // XMLパラメータをオブジェクトとして読み込む $amazon_xml = simplexml_load_string($get_contents); foreach($amazon_xml->Items->Item as $item){ $getdata = array(); // 取得したxMLデータをgetdataへ値を代入 $getdata['asin'] = $item->ASIN; $getdata['salesrank'] = $item->SalesRank; //ランキング // 現在日時を設定 $curDate = sprintf ("%04d%02d%02d", date("Y"), date("n"), date("j")) . "_" . sprintf ("%02d%02d%02d", date("G"), date("i"), date("s")); $file = 'salesrank/RankingCheck.csv'; //出力ファイル先 // ファイルをオープンして既存のコンテンツを取得します $current = file_get_contents($file); $current .= $getdata['asin'].','.$curDate.','.$getdata['salesrank']."\r\n"; // 結果をファイルに書き出します file_put_contents($file, $current); } // foreach end } // エラーなしの場合End sleep(1); //PA-APIのリクエスト数規制に引っかからないように、1秒停止してから次に進みます } // for j loops /* 繰り返し終わり */ // RFC3986 形式で URL エンコードする関数 function urlencode_rfc3986($str){ return str_replace('%7E', '~', rawurlencode($str)); } ?> </body> </html> |
ツールを動かしてみよう
動かし方がわからねぇ、、、という方は何とか今回や過去の参考リンクから、xamppなどをインストールして環境を作ってぜひがんばってみてください!
というのも、人のPC環境をサポートするほどの能力はボクにはありませんので・・・
とはいえ自分の資産は自分で守らなければなりません。
くれぐれも、PCに何かインストールしたり実行してPCの動作がおかしくなったりトラブルが起きても自己責任、の覚悟の上でお願いします!
以下WindowsPCにxamppをインストールした、PHPを実行できる環境ができている、という前提で進めますが、動作環境ができたら、
- このソースの35~37行目のアカウント情報を自分のアソシエイト情報に書き換えた上で、”JPRankGet.php“と名付けてxampp/htdocsに保存
- そのhtdocs内にsalesrankフォルダを作成
- salesrankフォルダの中にASINを10個程度、こんな感じで記載したRankingCheckList.txtというファイルを用意して
12345678910B0048H3SLOB00005B20SB00KJB0YP6B008EPB246B00AHFM5EWB002Q6GGZOB00000J2CUB00BQDC530B0000AZJZLB005AFTAH4 - 同じくsalesrank内にworkフォルダを作成
- 「何があっても自己責任」と唱えてから、
- ブラウザのURLに http://localhost/JPRankGet.php を入力またはコピペして実行
※PA-APIアカウントの登録方法は、ボクはこのページを参考にしました!
うまく動いた場合、少し経つとこんな画面になります。

(ボクの環境では)警告が2つ出てきましたが、特に心配ありません。
1つ目は「ランキングの出力ファイルが無かった(から作ったよ)」
2つ目も「エラー出力ファイルが無かった(から作ったよ)」
的なものです。
実はもうすでに処理は終わっています。
では、出力ファイルはどうなっているのか?sakesrankフォルダを見てみると、

RankingCheck.csvが出力データになります。ファイルの中を見てみましょう!

何かできていますね!
ASIN、取得日時、そして現在のランキングが取得されています!
データが正しいかどうか一番上のASINを実際のページで見てみましょう!
https://www.amazon.co.jp/dp/B0048H3SLO

↑こんな商品ページが開きました!そして下へ行くと!

本当に234,211位!!
当たり前といえば当たり前ですが、去年は一歩一歩、こんなことができるだけで大はしゃぎでした。
26.7%
ただ、この出力結果をもう一度よく見てください。。。

10個ASINを用意したのに、、8個しか出力されていませんね、、
そういえば、エラー出力ファイルが無かった(から作ったよ)という警告が出てましたので、workフォルダを見てみると・・・

エラーファイルができていました!
中を開くと

やはり、データを取得できなかった2つのASINが吐き出されています。
うーん、なんでかなー。というか、このエラーの多さがPA-APIの抱える問題なので。。。ボクはもうあきらめています。
たとえば、もう1回そのまま「http://localhost/JPRankGet.php」を再実行して、先ほどと同じ10件のASINのデータ取得を試みるとどうなるか・・・

(ちなみにモノレートのように「データを蓄積」していくために、実行するたびに同じファイルにデータを追加していく方式をとっています)
1回目は10件中8件のデータが取れましたが、2回目は9件取れています!
そして、今回は先ほどは取れていなかった2件が無事取れました!
・・・しかし、先ほど取れていた1件が今回は取れませんでした。。
と、まったく意味不明です。そういう気まぐれなものだと受け止めて、
エラーの発生を前提にして、どう処理していくのか
を考えて付き合っていくしかないと思っています。。
ちなみに1500件でエラー件数をカウントしたところ、1099/1500がOKでした・・・
エラー率26.7%!
今回はここまでです!読んでいただきありがとうございます!そして、もし試してみた方がいたら、ぜひ感想聞かせてください!
スポンサーリンク
[…] PHPでAmazonのMWSを使用して,マケプレの出品情報を取得する http://nanoappli.com/blog/archives/4371 nanoappli.com 5 users Amazon MWSのサンプルコードでClass not found – Qiitahttp://qiita.com/moyashimanjyu/items/d2ef443785233a26fdd4## Amazon MWSとはAmazonマーケットプレイスに出店してるショップ向けに、商品管理や注文管理ができるAPIが提供されている。Amazon マーケットプレイスWebサービス(MWS)… Qiita 【AmazonAPI】APIを使ってAmazonの在庫状況を取得しよう(Amazon Product Advertising API) – *いしのなかにいる*http://blog.malor.net/entry/2016/03/17/000000こんにちは! ちょいと思い立ってAmazon Product Advertising APIの勉強を始めました。 後で読み返せるように、アプリを動かすまでの手順をまとめておきます。 前準備:… *いしのなかにいる* 初歩のランキング取得ツールのソースを公開しますhttp://amaasin.com/rankingget1/前々回、ランキングの上昇回数をモノレートやプライスチェックのグラフを目で追って数えるのではなく、モノレートの数… 副業だからツールで稼ぐアマゾン輸入! […]
はじめまして
コピペして、必要な部分を変更して実行しましたが、下記のエラーメッセージが出ました。
Warning: file_get_contents(salesrank/work/RankingCheck-error.txt): failed to open stream: No such file or directory in C:\xampp\htdocs\JPRankGet.php on line 93
全くの初心者です。
どのように変更すればいいのでしょうか。
亀ちゃんさん こんにちは。
試してくださってありがとうございます!
それはたしか記事中の画像にも出てくる「RankingCheck-error.txtファイルがないよ(だから作るよ)」という警告(Warning)なので、実際には処理の実行はされていると思われます。
他にエラーが無ければ、フォルダを確認してみたらランキングデータがGetできているかもしれません。