プログラムで生活をHACKする

YRen-LaB

Keepa API

モノレートが閉鎖するのでkeepaAPI使ってリサーチしてみた

投稿日:


経緯

セドリや輸入やっている人の大半が利用しているモノレートが2020/6末を以て閉鎖する。
そのため、今までモノレートで取得していた3か月の出品者数及び、ランキングの変動回数(売れた個数)
を別のサービスから取得しようと思った。

その候補としてkeepaAPIがあり、実際に使用してみたのでメモ程度に記載する
https://keepa.com/#
!language/5

本記事の範囲

  1. Asinの商品データ取得
    ※keepaの登録等はこの本記事では触れないため他のサイトで保管してください。

AccessToken周り

keepaに登録すると画像のページから「access key」が確認できます。(画像上赤枠)
利用可能なToken数は画像した赤枠。
画像だと「7」しかないが、月1,500円くらいのやつだとデフォルトで「300」ある。

APIをコールするたびにこのtokenが消費される。消費量はAPIや取得する内容によって変わる。
このtokenは1分で5token回復する。

SDK

keepaのSDKもある。keepakeepa
ただseller情報取得するAPIでは私の書き方がわるかったのか
設定できないRequestパラメータがあったため使用はやめた。

ASIN取得するだけなら問題なかった。

Asin商品データの取得

Asinのデータを取得するには
Request ProductAPIを利用する

tokenのコストは「"ASIN1つにつき" 1 」

リファレンス Request Product

Request URL

https://api.keepa.com/product?key="yourAccessKey" &domain="domainId"&asin="ASIN" [or] &code="productCode"

  1. yourAccessKey
    上で紹介したtoken
  2. domain
    日本なら「5」
    [ 1: com | 2: co.uk 65 | 3: de | 4: fr | 5: co.jp | 6: ca | 8: it | 9: es | 10: in ]
  3. ASIN
    ASINのカンマ区切りリスト。最大100

例)

https://api.keepa.com/product?key=fadsattwtdasfads&domain=5&asin=B07MNM8DRR,B088Q9TBBF
この場合は2token消費。

Response

Request ProductのResponseとしてProduct Objectが返ってくる。

商品の基本情報は格納されている。
商品名や説明はもちろん、パッケージのサイズや重量、画像などAmazonの画面で表示されるものは
だいたい取得できる。
※詳しくは各自翻訳してもろて

Product ObjectProduct Object

{
    "productType": Integer,
    "asin": String,
    "domainId": Integer,
    "title": String,
    "trackingSince": Integer,
    "listedSince": Integer,
    "lastUpdate": Integer,
    "lastRatingUpdate": Integer, 
    "lastPriceChange": Integer,
    "lastEbayUpdate": Integer,
    "imagesCSV": String,
    "rootCategory": Integer,
    "categories": Long array,
    "categoryTree": Object array,
    "parentAsin": String,
    "variationCSV": String,
    "frequentlyBoughtTogether": String array,
    "eanList": String array,
    "upcList": String array,
    "manufacturer": String,
    "brand": String,
    "productGroup": String,
    "partNumber": String,
    "author": String,
    "binding": String,
    "numberOfItems": Integer,
    "numberOfPages": Integer,
    "publicationDate": Integer,
    "releaseDate": Integer,
    "languages":  two dimensional String array,
    "model": String,
    "color": String,
    "size": String,
    "edition": String,
    "format": String,
    "features": String array,
    "description": String,
    "packageHeight": Integer,
    "packageLength": Integer,
    "packageWidth": Integer,
    "packageWeight": Integer,
    "itemHeight": Integer,
    "itemLength": Integer,
    "itemWidth": Integer,
    "itemWeight": Integer,
    "availabilityAmazon": Integer,
    "ebayListingIds": Long array,
    "isAdultProduct": Boolean,
    "newPriceIsMAP": Boolean,
    "isEligibleForTradeIn": Boolean,
    "isEligibleForSuperSaverShipping": Boolean,
    "fbaFees": Object,
    "variations": Object array,
    "coupon": Integer array,
    "promotions": Promotion Object array,
    "stats": Statistics Object,
    "salesRankReference": Long,
    "salesRanks": Object,
    "rentalDetails": String,
    "rentalSellerId": String,
    "rentalPrices": Rental Object,
    "offers": Marketplace Offer Object array,
    "liveOffersOrder": Integer array,
    "buyBoxSellerIdHistory": String array,
    "isRedirectASIN": Boolean,
    "isSNS": Boolean,
    "offersSuccessful": Boolean,
    "csv": two dimensional Integer array
}

一部だけ紹介すると
時間とデータが欲しいときは「csv」項目を見ればだいたいできそう。
以下がcsv項目の中身。

0-AMAZON:Amazonの価格履歴
1-NEW:マーケットプレイスの新しい価格履歴。
2-使用:マーケットプレイスの価格履歴
3-販売:販売ランクの履歴。すべての製品に販売ランクがあるわけではありません。通常、バリエーションアイテムには個別の販売ランクはありません。
4-LISTPRICE:リスト価格の履歴
5-収集可能:収集可能な価格履歴
6-再生品:再生品の価格履歴
7-NEW_FBM_SHIPPING:サードパーティ(Amazonを除く)配送料を含む新しい価格履歴。販売者(FBM)のみが実行します。
8-LIGHTNING_DEAL:Lightning Dealの価格履歴。 Lightningのお得な情報は、以下の関連する重要な情報です。
9-WAREHOUSE:Amazon Warehouseの価格履歴。
10-NEW_FBA:最下位のサードパーティ(Amazon / Warehouseは含まない)の価格履歴。Amazonによって実行される新しいオファー
11-COUNT_NEW:新しいオファーの数の履歴(=新規として製品を販売するマーケットプレイス販売者の数)
12-COUNT_USED:使用済みオファーのカウント履歴
13-COUNT_REFURBISHED:再生品の提供数の履歴
14-COUNT_COLLECTIBLE:収集可能なオファーのカウント履歴
15-EXTRA_INFO_UPDATES:
すべてのオファーパラメーター関連データに対する過去の更新履歴:オファー、buyBoxSellerIdHistory、isSNS、isRedirectASIN、およびcsvタイプNEW_FBM_SHIPPING、WAREHOUSE、NEW_FBA、RATING、COUNT_REVIEWS、BUY_BOX_SHIPPING、USED _ * _ SHIPPING、COLLECTIBLEED_SHIPPING、COLPECTIBLE_SHIPPING、および* _SHIPPINGこれらのフィールドは頻繁に更新されないため、システムがいつ更新したかを知ることが重要です。絶対値は、特定の時間にフェッチされたオファーの量を示します。値が正の場合、利用可能なすべてのオファーがフェッチされたことを意味します。取得した数よりも多くのオファーがあった場合、それはマイナスになります。
16-レーティング:製品のレーティング履歴。評価は0〜50の整数です(たとえば、45 = 4.5スター)
17-COUNT_REVIEWS:商品のレビュー数の履歴。
18-BUY_BOX_SHIPPING:新規購入ボックスの価格履歴。ショッピングカートボックスの対象となるオファーがない場合(またはショッピングカートボックスが中古オファーの場合)、価格の値は-1になります。送料込み。
19-USED_NEW_SHIPPING:送料を含む「中古-新品同様」の価格履歴。
20-USED_VERY_GOOD_SHIPPING:送料を含む「中古-非常に良い」価格履歴。
21-USED_GOOD_SHIPPING:送料を含む「中古-良い」価格履歴。
22-USED_ACCEPTABLE_SHIPPING:送料を含む「中古-許容」価格履歴。
23-COLLECTIBLE_NEW_SHIPPING:送料を含む「収集可能-新品同様」の価格履歴。
24-COLLECTIBLE_VERY_GOOD_SHIPPING:送料を含む「収集可能-非常に良い」価格履歴。
25-COLLECTIBLE_GOOD_SHIPPING:送料を含む「収集可能-良い」価格履歴。
26-COLLECTIBLE_ACCEPTABLE_SHIPPING:送料を含む「収集可能-許容可能な」価格履歴。
27-REFURBISHED_SHIPPING:送料を含む再生価格の履歴。
28-EBAY_NEW_SHIPPING:送料を含む、それぞれのeBayロケールでの最低の新価格の価格履歴。
29-EBAY_USED_SHIPPING:送料を含む、それぞれのeBayロケールでの最低使用価格の価格履歴。
30-TRADE_IN:21の価格履歴での取引。 Amazonの下取りは、すべてのロケールで利用できるわけではありません。
31-レンタル:レンタル価格の履歴。レンタルの使用が必要で、パラメータを提供します。 Amazonレンタルは、Amazon USでのみご利用いただけます。

「3ヶ月の出品者数の平均」及び「3ヶ月のランキングの変動数(販売数)」を取得する

モノレートでは「3か月間の出品者数の平均」及び「ランキングの変動数(販売数)」を取得していた。
このAPIで上記2項目を取得するには以下のようにする。

  1. 3か月の出品者数の平均
    上記のcsv項目の[11]番目

    11-COUNT_NEW:新しいオファーの数の履歴(=新規として製品を販売するマーケットプレイス販売者の数)

    を利用した。この値にはKeepa Time minutes時点で○人新品で出品中というデータが入っているため
    現在日時から90日間のデータを取得し、平均を取ればい良い。

  2. 3ヶ月のランキングの変動数(販売数)
    上記のcsv項目の[3]番目

    3 - SALES: 販売ランクの履歴。すべての製品に販売ランクがあるわけではありません。通常、バリエーションアイテムには個別の販売ランクはありません。

    がそれに該当する。...が
    この項目には本来無視すべき微々たる変動も含まれるため正確な販売数をカウントするには精度が悪すぎる。
    純粋にいくら売れたか知りたい場合は「stats」がある。

    「stats」には「Statistics Object」が格納されており1ヶ月、3ヶ月、6ヶ月のデータが集約されたデータが格納されている。
    3カ月のランキングは「Statistics Object」の「salesRankDrops90」に格納されている

statsオブジェクトを受け取るには

先程の基本形のRequestではstatsはnullが返ってくる。
statsを受け取るにはRequestのQueryStringに「stats」を付与するよう必要がある。

✜ stats
No extra token cost. If specified the product object will have a stats field with quick access to current prices, min/max prices and the weighted mean values. If the offers parameter was used it will also provide buy box information.
You can provide the stats parameter in two forms:
Last x days (positive integer value): calculates the stats of the last x days, where x is the value of the stats parameter.
Interval: You can provide a date range for the stats calculation. You can specify the range via two timestamps (unix epoch time milliseconds) or two date strings (ISO8601, with or without time in UTC).
Note: If there is insufficient historical data for a price type the actual interval of the weighted mean calculation may be shorter than specified. All data provided via the stats field are calculated using the product object’s csv history field, so there is no new data provided through this parameter.
Example:
&stats=180 (the last 180 days)
&stats=2015-10-20,2015-12-24 (in the range from Oct. 20 to Dec. 24 in 2015)
&stats=2011-01-01,2025-01-01 (covering our complete history)
&stats=1445299200000,1450915200000 (unix epoch time milliseconds, in the range from Oct. 20 to Dec. 24 in 2015)

statsを含める場合のRequest

https://api.keepa.com/product?key=fadsattwtdasfads&domain=5&asin=B07MNM8DRR,B088Q9TBBF&stats=90

これでResponseのstatsにデータが格納されて返却される。

statsには「Statistics Object」で返却される。

{
    "current": Integer array,
    "avg": Integer array,
    "avg30": Integer array,
    "avg90": Integer array,
    "avg180": Integer array,
    "atIntervalStart": Integer array,
    "min": two dimensional Integer array,
    "max": two dimensional Integer array,
    "minInInterval": two dimensional Integer array,
    "maxInInterval": two dimensional Integer array,
    "outOfStockPercentageInInterval": Integer array,
    "outOfStockPercentage30": Integer array,
    "outOfStockPercentage90": Integer array,
    "lastOffersUpdate": Integer,
    "salesRankDrops30": Integer
    "salesRankDrops90": Integer
    "salesRankDrops180": Integer
    "totalOfferCount": Integer,
    "lightningDealInfo": Integer array,

    // the following fields are only set if the offers parameter was used
    "retrievedOfferCount": Integer,
    "buyBoxPrice": Integer,
    "buyBoxShipping": Integer,
    "buyBoxIsUnqualified": Boolean,
    "buyBoxIsShippable": Boolean,
    "buyBoxIsPreorder": Boolean,
    "buyBoxIsBackorder": Boolean,
    "buyBoxIsFBA": Boolean,
    "buyBoxIsAmazon": Boolean,
    "buyBoxIsMAP": Boolean,
    "buyBoxMinOrderQuantity": Boolean,
    "buyBoxMaxOrderQuantity": Boolean,
    "buyBoxAvailabilityMessage": String,
    "buyBoxShippingCountry": String,
    "buyBoxIsPrimeExclusive": Boolean,
    "buyBoxIsPrimeEligible": Boolean,
    "buyBoxIsPrimePantry": Boolean,
    "buyBoxIsUsed": Boolean,
    "isAddonItem": Boolean,
    "sellerIdsLowestFBA": String array,
    "sellerIdsLowestFBM": String array,
    "offerCountFBA": Integer,
    "offerCountFBM": Integer
}

上記レスポンスの「salesRankDrops90」が過去90日間の
売り上げランキングが低下した回数となる。

これで自分がモノレートから取得していたデータを取得することができた。

まとめ

Request例
https://api.keepa.com/product?key=fadsattwtdasfads&domain=5&asin=B07MNM8DRR,B088Q9TBBF&stats=90

90日間の販売個数は
Response > stats >salesRankDrops90
に格納されている。

平均出品者数は
Response > csv[11]
を月で割ればよい。

所感

モノレートが閉鎖したので
keepaAPIに少しふれてみた。

結果として数値で判断しやすくなったため、明確な基準により
より仕入れても問題ない商品の振り分けが可能になった。

また、安定性もモノレートをスクレイピングしていた時よりも
格段にあがり、IP制限もないためToken次第で1日中リサーチすることもできるようになった。





単純作業にお悩みではありませんか?

何百とあるワードを検索してファイルにまとめたり 数ある商品情報から条件にあるものだけ目で探してリ...

その単純作業プログラムで解決できるかもしれません。 もしよろしければ単純作業からの解放をお手伝いさせてください。

詳しくは以下のページからDM、または見積もり相談お願い致します。

お仕事依頼 ・ 見積もり依頼

adsense




-Keepa API
-,

Copyright© YRen-LaB , 2024 AllRights Reserved Powered by AFFINGER4.