命名『monoPeak』
今回のお話はあくまでもサンプルのソースコード、スクリプトです。モノレートの結果をASINをもとに、まとめて自動取得するという案のひとつです。
モノレートからまとめてデータを自動取得できるツールはないかなぁ、とお悩みの方はこの記事が参考になるかもしれません。
たとえば100件のASINを読み込ませれば、自動で100件の3ヶ月分月間販売個数をモノレートから取得することができるようになります。
Amazonからはランキング変動数、月間販売数までは取得することができませんので、そういった情報はモノレートから取得するしかありません。
自分でモノレート相当のツールを作るというのもアリですが、データを溜め込むのに時間がかかります。数ヶ月から1年といった期間が必要でしょう。
また、常に最新データを取得する必要があるため、24時間動かしっぱなしにしなければなりません。
Windows上で動くツールだとパソコンをずっとシャットダウンできないのはちょっと心配だし、じゃあwebアプリにすれば…PHPでプログラムを書けばいいのかというとソースコードが丸見えになるので公開できなくなるし…。
それにPHPで作るとサーバのレンタルや設定など、複雑になりすぎてしまいますしね。というわけでモノレートからまとめて月間販売個数を取得するにはスクリプト、VBScriptを使うという案に落ち着いたわけです。
VBScriptのいいところは、環境構築が不要で『書けば動く』というところにあります。プログラミングの知識がなくとも、ただソースコードをコピペするだけで動かせるので扱いやすいです。
2020年6月いっぱいでモノレート終了!多くの方はKeepa有料プラン(月額15€)を使ってランキング変動数、予想販売個数を取得すると思います。
当ブログではmonoPeakの開発を停止し、Keepa APIを使った『AsinKeeper』を開発しました。条件付きですが、ツール本体は実質無料で使用することもできますので、ぜひ参考にしてみてください。
以下、現状では動作しませんが、参考までにサンプルソースコードは残しておきます。お勉強用にどうぞ。
悪用厳禁!モノレートからまとめて自動でデータ取得するサンプルスクリプト
まず最初に、これはサンプルスクリプトでありwebスクレイピングを助長するものではありません、と言っておきます。
あくまでもこういう方法でインターネットエクスプローラを自動で制御してモノレートからデータ取得ができる、というひとつの案です、ってことにしてください。
サンプルコードのご利用は自己責任でお願いします。
サンプルスクリプト『monoPeak』
まずは手っ取り早くサンプルスクリプトを置いておきます。一応名前をつけていまして…monoPeakとしています。モノレートの山の数をカウントするスクリプトなので。…どちらかというと谷ですけどね。
'***** ユーザ設定 ***** Dim max: max = 0 ' データ取得するASIN数(多いとブロックされるため任意で指定) Dim isIeVisibled: isIeVisibled = true ' 実行中にIEを表示するか。true or false '********************** Dim asinList Set asinList = CreateObject("System.Collections.ArrayList") getAsinList() Dim isExec isExec = MsgBox("処理を開始します。",vbOKCancel,"確認") If isExec = 2 Then MsgBox "キャンセルしました。終了します。",,"確認" End If Dim resultFileName resultFileName = "00_result/00_result_" + Replace(FormatDateTime(Now(),2),"/","") + Replace(FormatDateTime(Now(),4),":","") + Right("0" & Second(Now()) , 2) +".csv" Set fso = WScript.CreateObject("Scripting.FileSystemObject") Dim outputFile Set outputFile = fso.OpenTextFile(resultFileName, 2, True) outputFile.WriteLine "ASIN,過去1ヶ月目販売数,過去2ヶ月目販売数,過去3ヶ月目販売数" Set objShell = WScript.CreateObject("WScript.Shell") Dim cnt cnt = 0 For Each elem In asinList If cnt >= max Then Exit For End If Dim resultAry resultAry = getMono( elem ) Dim resultStr If UBound( resultAry ) = 2 Then resultStr = elem + "," + resultAry(0) + "," + resultAry(1) + "," + resultAry(2) Else resultStr = elem + ",---,---,---" End If outputFile.WriteLine resultStr cnt = cnt + 1 objShell.SendKeys "+" Next outputFile.Close MsgBox "処理完了",,"お知らせ" Function getMono( asin ) Dim monoUrl monoUrl = getMonoUrl( asin ) Set IE = CreateObject("InternetExplorer.Application") IE.Visible = isIeVisibled IE.navigate monoUrl Do While IE.Busy Or IE.readyState < 4 Loop WScript.Sleep 3000 Dim strBody Dim lngPos strBody = IE.Document.body.innerText lngPos = InStr(1, strBody, "Forbidden") If InStr(1, strBody, "Forbidden") > 0 Then MsgBox "終了します。",,"アクセスブロック検出" WScript.Quit End If If InStr(1, strBody, "parmission") > 0 Then MsgBox "終了します。",,"アクセスブロック検出" WScript.Quit End If If InStr(1, strBody, "画像認証") > 0 Then MsgBox "終了します。",,"画像認証検出" WScript.Quit End If IE.Document.Script.setTimeout getPeakNumFuncStr(), 30 WScript.Sleep 3000 getMono = url2peakNumAry( IE.LocationURL ) IE.Quit Set IE = Nothing End Function Sub getAsinList() Dim fsoLocal Set fsoLocal = WScript.CreateObject("Scripting.FileSystemObject") Dim asinListFile Set asinListFile = fsoLocal.OpenTextFile("01_asin/00_asin_table.csv", 1, False, 0) Do Until asinListFile.AtEndOfStream asinList.add asinListFile.ReadLine Loop asinListFile.Close Set fsoLocal = Nothing Set asinListFile = Nothing End Sub Function url2peakNumAry( url ) Dim peakNumAry peakNums = Replace( url, "https://mnrate.com/", "" ) peakNumAry = Split( peakNums, "," ) url2peakNumAry = peakNumAry End Function Function getMonoUrl( asin ) Dim monoUrlAry monoUrlAry = Array( "https://mnrate.com/item/aid/", asin ) getMonoUrl = Join( monoUrlAry, "" ) End Function Function getPeakNumFuncStr() Dim fsoLocal Set fsoLocal = WScript.CreateObject("Scripting.FileSystemObject") Dim asinListFile Set asinListFile = fsoLocal.OpenTextFile("98_lib/getPeakNum.js", 1, False, 0) lineStr = asinListFile.ReadAll asinListFile.Close Set fsoLocal = Nothing Set asinListFile = Nothing getPeakNumFuncStr = lineStr End Function ' EOF
サンプルスクリプトを動作させるには別途、データ解析スクリプトが必要
上記のサンプルスクリプトはインターネットエクスプローラをVBScriptで遠隔操作してモノレートを自動巡回するスクリプトです。
完全体にするには、モノレートからダウンロードしたデータを解析するスクリプトが必要になります。
すべてを公開してしまうとモノレートに多大な迷惑をかけてしまう可能性があるため、その部分に関しては非公開とします。プログラムに詳しい方であれば残りの部分を作り上げることができるでしょう。
いじわるしているわけではなく、秩序の維持・モラルを重んじているということをご理解ください。
ちなみに実行結果は下記のようになります。(2017/07/20に実行した結果です)
ファイル構成なども絡んできますので、一応サンプルコードのダウンロードページを用意しておきました。
monoPeak データ解析処理(販売個数カウント処理)の開発依頼について
以前はココナラにて開発依頼を請け負っておりました。(過去形)
ですが、一時期特定の環境で正常に動かない、といったことがあり、開発作業の請け負いを一旦中止させていただきました。
そして、調査・改善のため新規一転、『monoPeak2』を作成しました。ついでにデータ取りこぼし率も大幅に改善?しました。
何人かの方にはいろいろお手数・ご迷惑をおかけしましたが、それでもmonoPeakは高い評価をいただいております。ありがとうございます。
もともとライセンス数に上限を設けているのですが、想定したよりも早く枯渇してしまいそうであったため、提供方法を変更しました。
ココナラでの開発作業請け負いの再開は未定です。
現在は、当ブログよりマカドをご購入していただいた方に、特典としてmonoPeak2とライセンスキー、特典限定ページの閲覧パスワードを提供しています。
その他にも特典はあります。詳しくは下記をご確認ください。ご検討いただけるとうれしく思います。
マカドは価格改定はあくまでも機会的にしか行えないというデメリットがあります。
ですが、純粋に価格改定の時間を削減し、常時カート価格に追従するため、カート獲得率の向上 = 売上増加 > 回転率向上につながります。
デメリットの分を当ブログの特典で補うことができれば良いと考えております。