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();
後はデータベースとフロントエンドだけ!
この記事が気に入ったらサポートをしてみませんか?