私はWebスクレイパーを構築していますが、これは初めてです。それが行うことは、ユーザーが提供した URL の Amazon 価格をスクレイピングし、価格がユーザーが設定した価格を下回るたびに電子メールを送信することです。SendGrid を使用してメールを送信しています。
しかし、質問がありました。スクリプトを約 1 時間ごとに自動的に実行するように設定し、価格が下がった場合にメールを送信したいと考えていました。オンラインで調査したところ、node-cron がそれを行うのに役立つことがわかりました。ただし、スクリプトがバックグラウンドで実行されている場合にのみ機能します。
私の主な質問は、スクリプトを実行して電子メールを送信するために、スクリプトを実際にずっと実行する必要があるかということです。そうでない場合、どうすればよいですか?
これは私の cron.js ファイルです。また、価格を追跡してメールを送信するためのコードを含む AmazonTracker.js もあります。
const cron = require('node-cron');
let shell = require('shelljs');
const url = process.argv[2]
// minimum price for which user wants an alert
const minPrice = process.argv[3]
const emailID = process.argv[4];
// scheduled to run every second
cron.schedule("* * * * * *", function() {
console.log("running");
if(shell.exec(`node AmazonTracker.js ${url} ${minPrice} ${emailID}`).code !== 0){
console.log("Something went wrong");
}
})
また、一部のリンクのコードを実行しようとすると、このエラーが発生します。私のスクリプトは一部のリンクで機能し、他のリンクではこのエラーをスローします。誰か提案があれば。
(node:4284) UnhandledPromiseRejectionWarning: Error: .wait() for #priceblock_dealprice timed out after 30000msec
at newDone (C:\Users\dtdan\node_modules\nightmare\lib\actions.js:545:9)
at Timeout._onTimeout (C:\Users\dtdan\node_modules\nightmare\lib\actions.js:578:5)
at listOnTimeout (internal/timers.js:549:17)
at processTimers (internal/timers.js:492:7)