Node.js & herokuでクローラーを作る。 #2

シェルスクリプト

シェルスクリプトについて勉強した。

参考サイト⇒

https://qiita.com/zayarwinttun/items/0dae4cb66d8f4bd2a337 

https://tech-blog.rakus.co.jp/entry/20200521/shellscript こっちの方が分かりやすいかも

手元で実行する時はgit bashを用いた。

node app.jsを定期実行するシェルスクリプトを作った。sh シェルスクリプトのファイル名.sh ループ数 1回当たりの待機時間で実行できる。

#!/bin/sh
echo "Hello"
LOOP=$1
SLEEP=$2
shift 2
for i in `seq 1 1 $LOOP`
do
 node app.js
 if [ $i -lt $LOOP ]; then
     sleep $SLEEP
 fi
done

unixコマンド(?)は直接書けばそのまま実行してくれるっぽい。

クローラー

以前書いたコードを少し改変して流用。非推奨とされるrequestを使っていますが、簡易的なコードということで許してください。

const express = require('express');
const request = require('request');
//const request2 = require('sync-request');
const app=express();
app.use(express.static('public'));
let min = 9999999;
let pages=0;
async function main(){
   await api('https://api.hypixel.net/skyblock/auctions');
   for(let t=0;t<=pages;t++){
       const request_url='https://api.hypixel.net/skyblock/auctions?page='+t;
       await api(request_url);
       console.log("end ; "+t);
   }
   console.log(min);
}
function api(request_url){
   return new Promise(resolve=>{
       setTimeout(() => {
           resolve('resolved');
       }, 1000);
       const options = {
           url: request_url,
       };
       request.get(options,function(err,response,data){
           const from_json=JSON.parse(data);
           if(from_json['success']===false)return;
           pages=from_json['totalPages'];
           for(let key in from_json['auctions']){
               if(from_json['auctions'][key]['item_name'].indexOf('Farming for Dummies')<0)continue;
               if(from_json['auctions'][key]['bin']!==true)continue;
               if(from_json['auctions'][key]['claimed']===true)continue;
               let starting_bid=parseInt(from_json['auctions'][key]['starting_bid']);
               if(min>starting_bid){
                   min=starting_bid;
               }
           }
       })
   });
}
main();


後はデータベースとフロントエンドだけ!



この記事が気に入ったらサポートをしてみませんか?