LoginSignup
2
2

More than 1 year has passed since last update.

アマゾンのセール情報からASINを取得する

Last updated at Posted at 2020-09-21

アマゾンのセール情報からASINを取得

 以前とは違ってアマゾンのセール情報からASINを取得してみよう。セール情報から取得する場合はアマゾンが作ったセール用のnode番号が必要になる。

sync-requestとjsdomを使っていたが、今回はrequestとjsdomを使う。

Amazonの検索結果からasinをスクレイピング
https://qiita.com/99nyorituryo/items/c5d53a3ca8a4967b5927

ASINの取得

 例として、「秋のKADOKAWAコミック&ラノベ フェア」のアドレスからASINをとる。
https://www.amazon.co.jp/b?ie=UTF8&node=8420570051

上のページを開いてからkindle本、ページ2を選ぶ。なぜそうするかというと、ページ番号を可変させて、一括でASINを取得したいから。
 下のアドレスから、page=2を探して2の部分を入れ替えながら、requestで取得する。

jsdomやrequestをインストールする。

npm install jsdom
npm i request

ページからjsdomでasinを配列として出力している。1ページあたり16冊まで表示する。
サンプルコードは下のリンク先に置いています。
https://github.com/kyukyunyorituryo/books-paapi-sample

kindle_sale_asin_request.js


const request = require("request");
 const jsdom = require("jsdom");
const { JSDOM } = jsdom;
fs = require('fs');

function asinGet(html){
    const dom = new JSDOM(html);
table=dom.window.document.querySelectorAll("h2.a-size-mini > a")
asin=[]//配列宣言
for (let i = 0; i < table.length; i++) {
asin[i]=table[i].href
asin[i]=asin[i].replace( /^.+dp\/(\w+)\/.+$/g , '$1' )
}
/*
ul class="a-pagination" li class="a-disabled a-last"
*/
if(dom.window.document.querySelectorAll("ul.a-pagination > li").length !== 0){

li=dom.window.document.querySelectorAll("ul.a-pagination > li")
flag=li[li.length-1].getElementsByTagName('a').length
}
else{flag=0}
console.log(asin)
console.log(flag)

return asin
}

function sleep(second) {
    return new Promise(resolve => {
        setTimeout(() => {
            resolve()
        }, second * 1000)
    })
}

function requestPromise(param){
    return new Promise((resolve, reject)=>{
        request(param, function (error, response, body) {
            if(error){
                reject("ページを取得できませんでした");
            }else{
//                console.log(body);
                asin=asinGet(body)
                asinarray=asinarray.concat(asin)
                resolve("取得できました");
            }
        })
    })
}

(async function(){

day='秋のKADOKAWA'
flag=1
asinarray=[]
filename=day+'k.json'
//https://www.amazon.co.jp/s?rh=n%3A2250738051%2Cn%3A%212275265051%2Cn%3A%212275277051%2Cn%3A%218172192051%2Cn%3A%218187544051%2Cn%3A%218187545051%2Cn%3A%218187561051%2Cn%3A8187562051&page=2&qid=1594419906&ref=lp_8187562051_pg_2

//&price=100-10000
//'+i+'
loop1:for (let i =1; i <=500;  i ++) {

var url='https://www.amazon.co.jp/s?i=digital-text&bbn=8420570051&rh=n%3A2250738051%2Cn%3A2275265051%2Cn%3A2275277051%2Cn%3A8172192051%2Cn%3A8419007051%2Cn%3A8420502051%2Cn%3A8420569051%2Cn%3A8420570051%2Cn%3A2275256051&dc&page='+i+'&fst=as%3Aoff&qid=1600614637&rnid=2250739051&ref=sr_pg_2'
if(flag==0){break loop1;}
 await sleep(3) 
await requestPromise(url);
console.log(i)
  }

  console.log(asinarray)
  if(asinarray.length==0){

  }else{
  console.log('ファイルを書き込みます')
fs.writeFileSync(__dirname + '/json/kindle_sale/asin/'+filename, JSON.stringify(asinarray, null, 1),'utf-8')

}
}
)();
console.log("リクエスト開始");

 取得したASINは次のリンクで説明するようにPA-APIでアフィリエイトサイトの情報やリンクを生成する。

PA-API v5でAmazonの商品情報を取得する
https://qiita.com/99nyorituryo/items/e337e6a75c361521f297

このASINを利用して実際のセールのページを作りました。
https://kyukyunyorituryo.github.io/kindle_sale/

参考
https://qiita.com/KuwaK/items/6455e34c245992a73aa1

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2