珍しくIEが主役のモノレート自動取得スクリプト

ツールについて

自動でモノレートから販売個数をまとめて取得するツール(サンプル)

更新日:

命名『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結果

ファイル構成なども絡んできますので、一応サンプルコードのダウンロードページを用意しておきました。

monoPeak データ解析処理(販売個数カウント処理)の開発依頼について

以前はココナラにて開発依頼を請け負っておりました。(過去形)

ですが、一時期特定の環境で正常に動かない、といったことがあり、開発作業の請け負いを一旦中止させていただきました。

そして、調査・改善のため新規一転、『monoPeak2』を作成しました。ついでにデータ取りこぼし率も大幅に改善?しました。

何人かの方にはいろいろお手数・ご迷惑をおかけしましたが、それでもmonoPeakは高い評価をいただいております。ありがとうございます。

もともとライセンス数に上限を設けているのですが、想定したよりも早く枯渇してしまいそうであったため、提供方法を変更しました。

ココナラでの開発作業請け負いの再開は未定です。

現在は、当ブログよりマカドをご購入していただいた方に、特典としてmonoPeak2とライセンスキー、特典限定ページの閲覧パスワードを提供しています。

その他にも特典はあります。詳しくは下記をご確認ください。ご検討いただけるとうれしく思います。

マカドは価格改定はあくまでも機会的にしか行えないというデメリットがあります。

ですが、純粋に価格改定の時間を削減し、常時カート価格に追従するため、カート獲得率の向上 = 売上増加 > 回転率向上につながります。

デメリットの分を当ブログの特典で補うことができれば良いと考えております。

スポンサードリンク

-ツールについて
-, , ,

Copyright© 自作ツールと輸入ビジネス , 2024 AllRights Reserved Powered by AFFINGER4.