|
const axios = require('axios'); |
|
const http = require('http'); |
|
const path = require('path'); |
|
const fs = require('fs'); |
|
const cron = require('node-cron'); |
|
const port = process.env.PORT || 7860; |
|
const moment = require('moment-timezone'); |
|
|
|
|
|
const urls = [ |
|
'https://codesandbox.io/p/sandbox/elated-fire-fjg3m5', |
|
'https://www.yahoo.com', |
|
'https://www.baidu.com', |
|
'https://www.yahoo.com', |
|
'https://www.baidu.com', |
|
'https://www.yahoo.com', |
|
'https://www.baidu.com', |
|
'https://www.yahoo.com', |
|
|
|
]; |
|
|
|
|
|
function visitWebsites() { |
|
const websites = [ |
|
'https://frnhbyk-6mkhzq2w.b4a.run', |
|
'https://efcxdw-cbc80ak6.b4a.run', |
|
'https://desfrtju-w6pti24b.b4a.run', |
|
'https://www.google.com' |
|
|
|
]; |
|
|
|
|
|
websites.forEach(async (url) => { |
|
try { |
|
const response = await axios.get(url); |
|
console.log(`${moment().tz('Asia/Hong_Kong').format('YYYY-MM-DD HH:mm:ss')} Visited web successfully: ${url} - Status code: ${response.status}\n`); |
|
} catch (error) { |
|
console.error(`Error visiting ${url}: ${error.message}\n`); |
|
} |
|
}); |
|
} |
|
|
|
|
|
function checkAndSetTimer() { |
|
const currentMoment = moment().tz('Asia/Hong_Kong'); |
|
const formattedTime = currentMoment.format('YYYY-MM-DD HH:mm:ss'); |
|
if (currentMoment.hours() >= 1 && currentMoment.hours() < 5) { |
|
console.log(`Stop visit from 1:00 to 5:00 --- ${moment().tz('Asia/Hong_Kong').format('YYYY-MM-DD HH:mm:ss')}`); |
|
clearInterval(visitIntervalId); |
|
const nextVisitTime = moment().tz('Asia/Hong_Kong').add(0, 'day').hours(5).minutes(0).seconds(0); |
|
const nextVisitInterval = nextVisitTime.diff(currentMoment); |
|
setTimeout(() => { |
|
startVisits(); |
|
}, nextVisitInterval); |
|
} else { |
|
startVisits(); |
|
} |
|
} |
|
|
|
let visitIntervalId; |
|
function startVisits() { |
|
clearInterval(visitIntervalId); |
|
|
|
visitIntervalId = setInterval(() => { |
|
visitWebsites(); |
|
}, 2 * 60 * 1000); |
|
} |
|
|
|
function runScript() { |
|
const runScriptIntervalId = setInterval(() => { |
|
|
|
checkAndSetTimer(); |
|
}, 2 * 60 * 1000); |
|
} |
|
checkAndSetTimer(); |
|
runScript(); |
|
|
|
|
|
async function scrapeAndLog(url) { |
|
try { |
|
const response = await axios.get(url); |
|
console.log(`${moment().tz('Asia/Hong_Kong').format('YYYY-MM-DD HH:mm:ss')} Web visited Successfully: ${url} - Status code: ${response.status}\n`); |
|
} catch (error) { |
|
console.error(`${moment().tz('Asia/Hong_Kong').format('YYYY-MM-DD HH:mm:ss')} Web visited Error: ${url}: ${error.message}\n`); |
|
} |
|
} |
|
|
|
cron.schedule('*/2 * * * *', () => { |
|
console.log('Running webpage access...'); |
|
urls.forEach((url) => { |
|
scrapeAndLog(url); |
|
}); |
|
}); |
|
|
|
|
|
const server = http.createServer((req, res) => { |
|
if (req.url === '/') { |
|
const filePath = path.join(__dirname, 'index.html'); |
|
fs.readFile(filePath, (err, data) => { |
|
if (err) { |
|
res.writeHead(500); |
|
res.end('Error loading index.html'); |
|
} else { |
|
res.writeHead(200, { 'Content-Type': 'text/html' }); |
|
res.end(data); |
|
} |
|
}); |
|
} else { |
|
res.writeHead(404); |
|
res.end('Not Found'); |
|
} |
|
}); |
|
|
|
server.listen(port, () => { |
|
console.log(`Server is running on port ${port}`); |
|
}); |