File size: 3,407 Bytes
999ba69 a253da6 513f462 7c97ba0 aced81f 7c97ba0 a253da6 7c97ba0 c6d4d15 7c97ba0 74838bc 7c97ba0 a253da6 7c97ba0 a253da6 7c97ba0 a253da6 7c97ba0 c6d4d15 a253da6 7c97ba0 a253da6 7c97ba0 a253da6 7c97ba0 a253da6 7c97ba0 a253da6 7c97ba0 a253da6 7c97ba0 c6d4d15 7c97ba0 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 | const express = require("express");
const axios = require("axios");
const app = express();
// ===== CONFIG =====
const API_URL = "https://pastebin.com/raw/B0EPV9kB"; // <-- apna API endpoint
const VISIT_DELAY_MS = 5000; // 5 sec delay per URL
const INTERVAL_MS = 12 * 60 * 60 * 1000; // 12 hours
// ===== STATUS STORAGE =====
let status = {
running: false,
lastStartTime: null,
lastEndTime: null,
totalUrls: 0,
logs: []
};
// Realistic User Agents
const USER_AGENTS = [
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 Chrome/120.0.0.0 Safari/537.36",
"Mozilla/5.0 (Linux; Android 10) AppleWebKit/537.36 Chrome/120.0.0.0 Mobile Safari/537.36",
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 Version/17.0 Safari/605.1.15"
];
function getRandomUA() {
return USER_AGENTS[Math.floor(Math.random() * USER_AGENTS.length)];
}
async function fetchUrls() {
console.log("Started fetching urls");
try {
const res = await axios.get(API_URL, {
timeout: 15000,
headers: { "Accept": "application/json" }
});
console.log(res.data);
console.log(!Array.isArray(res.data));
if (!Array.isArray(res.data)) return [];
return res.data;
} catch (err) {
status.logs.push({
type: "error",
message: `API Fetch Failed: ${err.message}`,
time: new Date().toISOString()
});
return [];
}
}
async function visitUrl(url) {
try {
const start = Date.now();
await axios.get(url, {
timeout: 20000,
headers: {
"User-Agent": getRandomUA(),
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
"Accept-Language": "en-US,en;q=0.9",
"Connection": "keep-alive",
"Upgrade-Insecure-Requests": "1"
}
});
const time = Date.now() - start;
return {
type: "success",
url,
responseTime: time,
message: "Visited successfully",
time: new Date().toISOString()
};
} catch (err) {
return {
type: "failed",
url,
message: err.message,
time: new Date().toISOString()
};
}
}
async function runJob() {
console.log('Running Runjib()');
status.running = true;
status.lastStartTime = new Date().toISOString();
status.logs = []; // reset logs
const urls = await fetchUrls();
status.totalUrls = urls.length;
if (!urls.length) {
status.logs.push({
type: "warning",
message: "No URLs received from API",
time: new Date().toISOString()
});
status.running = false;
status.lastEndTime = new Date().toISOString();
return;
}
for (const url of urls) {
const result = await visitUrl(url);
status.logs.push(result);
await new Promise(r => setTimeout(r, VISIT_DELAY_MS));
}
status.running = false;
status.lastEndTime = new Date().toISOString();
}
// ===== STATUS ROUTE =====
app.get("/url-pinger/stat", (req, res) => {
res.json({
running: status.running,
lastStartTime: status.lastStartTime,
lastEndTime: status.lastEndTime,
totalUrls: status.totalUrls,
history: status.logs
});
});
app.get("/", (req, res) => {
res.send("URL Pinger Server Running...");
});
app.listen(7860, () => {
console.log("Server running on http://localhost:7860");
});
// Run immediately
runJob();
console.log("Called Runjob()");
// Repeat every 12 hours
setInterval(runJob, INTERVAL_MS); |