feaderry/keep-alive
0
1const axios = require('axios');2const moment = require('moment-timezone');3const http = require('http');4const cron = require('node-cron');5const port = process.env.PORT || 7860; 6 7// 添加24小时是不间断访问的url数组8const webpages = [9 'https://artistic-curious-baritone.glitch.me',10 // ... 添加更多url11];12 13// 添加1:00-6:00暂停,其他时间正常访问的url数组14const urls = [15 'https://www.google.com', // 备注名称16 'https://www.baidu.com',17 'https://feaderry-keep-alive.hf.space',18 // ... 添加更多url19];20 21// 遍历网页数组并发请求访问网页22const visit = async (url) => {23 try {24 const response = await axios.get(url);25 console.log(`${moment().tz('Asia/Hong_Kong').format('YYYY-MM-DD HH:mm:ss')} Visited web successfully: ${url} --- Status: ${response.status}\n`);26 } catch (error) {27 console.error(`Failed to visit ${url}: ${error.message}\n`);28 }29};30const visitAll = async () => {31 for (let url of urls) {32 await visit(url);33 }34};35 36// 定判断是否在访问时间段内37const isWithinTime = () => {38 const now = moment().tz('Asia/Hong_Kong');39 const hour = now.hour();40 if (hour >= 1 && hour < 6) {41 return false;42 }43 return true;44};45 46// 创建http服务47const createServer = () => {48 const server = http.createServer((req, res) => {49 if (req.url === '/') {50 res.writeHead(200, {'Content-Type': 'text/plain'});51 res.end('Hello world!');52 } else {53 res.writeHead(404, {'Content-Type': 'text/plain'});54 res.end('404 Not Found');55 }56 });57 server.listen(port, () => {58 console.log(`Server started on port ${port}`);59 });60};61 62// 执行访问逻辑63const main = async () => {64 createServer();65 setInterval(async () => {66 if (isWithinTime()) {67 await visitAll();68 } else {69 console.log(`Stop visiting at ${moment().tz('Asia/Hong_Kong').format('YYYY-MM-DD HH:mm:ss')}`);70 }71 }, 2 * 60 * 1000); // 指定时间段访问的间隔2分钟72};73main();74 75//24小时不间断访问部分76async function access(url) {77 try {78 const response = await axios.get(url);79 console.log(`${moment().tz('Asia/Hong_Kong').format('YYYY-MM-DD HH:mm:ss')} Web visited successfully: ${url} --- status:${response.status}`);80 } catch (error) {81 console.error(`${moment().tz('Asia/Hong_Kong').format('YYYY-MM-DD HH:mm:ss')} Failed to visit ${url}, Error ${error.message}`);82 }83}84 85async function batchVisit() {86 87 for (let url of webpages) {88 await access(url);89 }90}91cron.schedule('*/2 * * * *', batchVisit); // 24小时访问任务间隔周期,默认2分钟