UI设计 薇晓朵数字商城

 找回密碼
 加入我們

網頁關鍵詞檢測

[複製鏈接]
小猪哼囔 發表於 2024-9-22 14:09:37 | 顯示全部樓層 |閱讀模式
  1. addEventListener("scheduled", event => {
  2.   event.waitUntil(checkKeywordsAndNotify());
  3. });

  4. async function checkKeywordsAndNotify() {
  5.   const url = 'https://hostloc.com';  // 要检测的网页URL
  6.   const keyword = '全球主机交流';  // 要检测的关键词
  7.   const telegramToken = '##';  // TG机器人Token
  8.   const chatId = '##';  //要推送的TG用户ID
  9.   
  10.   try {
  11.     const urlWithTimestamp = `${url}?t=${Date.now()}`;
  12.    
  13.     const response = await fetch(urlWithTimestamp, {
  14.       method: 'GET',
  15.       headers: {
  16.         'Cache-Control': 'no-cache',
  17.         'Pragma': 'no-cache'
  18.       }
  19.     });
  20.     const text = await response.text();

  21.     if (!text.includes(keyword)) {
  22.       await sendTelegramNotification(telegramToken, chatId, `关键词 "${keyword}" 已从 ${url} 上消失`);
  23.     }
  24.   } catch (error) {
  25.     await sendTelegramNotification(telegramToken, chatId, `获取或处理URL时出错: ${error.message}`);
  26.   }
  27. }

  28. async function sendTelegramNotification(token, chatId, message) {
  29.   const telegramUrl = `https://api.telegram.org/bot${token}/sendMessage`;
  30.   const response = await fetch(telegramUrl, {
  31.     method: 'POST',
  32.     headers: { 'Content-Type': 'application/json' },
  33.     body: JSON.stringify({
  34.       chat_id: chatId,
  35.       text: message
  36.     })
  37.   });
  38.   return response.json();
  39. }
複製代碼


1,無需服務器,支持部署到cloudflare的workers
2,設定→觸發程序→Cron


可以檢測優質服務器是否補貨,也可以檢測自己的網站是不是掉線了

有個缺點,一旦傳家寶補貨了,機器人會一直提醒你。數據庫可以解決這個問題,但是想法就是簡單穩定快捷。數據庫增加了不確定因素

相關優化版

  1. /**
  2. * Cloudflare Workers 入口:处理所有的 HTTP 请求
  3. * 每当有请求到达时,都会调用此方法并传递请求对象
  4. */
  5. addEventListener('fetch', event => {
  6.   // 使用 event.respondWith 方法,传入我们自定义的 handleRequest 函数来处理请求
  7.   event.respondWith(handleRequest(event.request));
  8. });

  9. /**
  10. * 处理传入的 HTTP 请求
  11. * @param {Request} request - HTTP 请求对象
  12. * @returns {Response} - 返回处理结果的 HTTP 响应对象
  13. */
  14. async function handleRequest(request) {
  15.   try {
  16.     // 从请求体中解析 JSON 数据,假设请求体包含需要检测的任务列表
  17.     const { tasks } = await request.json();

  18.     // 使用 Promise.all 同时执行多个任务
  19.     const results = await Promise.all(tasks.map(task => checkKeywordsAndNotify(task.url, task.keyword, task.telegramToken, task.chatId)));

  20.     // 返回一个包含所有任务结果的 JSON 响应
  21.     return new Response(JSON.stringify({ success: true, results }), {
  22.       headers: { 'Content-Type': 'application/json' },
  23.     });
  24.   } catch (error) {
  25.     // 如果有错误,返回错误信息
  26.     return new Response(JSON.stringify({ success: false, error: error.message }), {
  27.       headers: { 'Content-Type': 'application/json' },
  28.     });
  29.   }
  30. }

  31. /**
  32. * 检查指定 URL 是否包含关键字,并发送 Telegram 通知
  33. * @param {string} url - 要检测的网页 URL
  34. * @param {string} keyword - 要检测的关键词
  35. * @param {string} telegramToken - Telegram 机器人的 Token
  36. * @param {string} chatId - 要发送通知的 Telegram 用户 ID
  37. * @returns {Object} - 返回检测结果
  38. */
  39. async function checkKeywordsAndNotify(url, keyword, telegramToken, chatId) {
  40.   try {
  41.     // 为了防止缓存,给 URL 添加时间戳参数
  42.     const urlWithTimestamp = `${url}?t=${Date.now()}`;
  43.    
  44.     // 发送 GET 请求获取网页内容,禁止缓存
  45.     const response = await fetch(urlWithTimestamp, {
  46.       method: 'GET',
  47.       headers: {
  48.         'Cache-Control': 'no-cache',
  49.         'Pragma': 'no-cache',
  50.       },
  51.     });
  52.     const text = await response.text();

  53.     // 检查网页内容是否包含指定的关键词
  54.     if (!text.includes(keyword)) {
  55.       // 如果关键词不包含在网页中,发送 Telegram 通知
  56.       await sendTelegramNotification(telegramToken, chatId, `关键词 "${keyword}" 已从 ${url} 上消失`);
  57.       return { url, keyword, status: 'missing' };  // 返回状态:关键词消失
  58.     }
  59.     return { url, keyword, status: 'found' };  // 返回状态:关键词仍然存在
  60.   } catch (error) {
  61.     // 如果请求或处理过程中出错,发送错误通知
  62.     await sendTelegramNotification(telegramToken, chatId, `获取或处理URL时出错: ${error.message}`);
  63.     return { url, keyword, status: 'error', error: error.message };  // 返回错误信息
  64.   }
  65. }

  66. /**
  67. * 发送 Telegram 消息通知
  68. * @param {string} token - Telegram 机器人的 Token
  69. * @param {string} chatId - 要发送消息的 Telegram 用户 ID
  70. * @param {string} message - 要发送的消息内容
  71. * @returns {Object} - 返回 Telegram API 的响应
  72. */
  73. async function sendTelegramNotification(token, chatId, message) {
  74.   const telegramUrl = `https://api.telegram.org/bot${token}/sendMessage`;
  75.   const response = await fetch(telegramUrl, {
  76.     method: 'POST',
  77.     headers: { 'Content-Type': 'application/json' },
  78.     body: JSON.stringify({
  79.       chat_id: chatId,
  80.       text: message,
  81.     }),
  82.   });
  83.   return response.json();
  84. }
複製代碼


相關軟件:https://github.com/Xinslive/NotifyMe
回復

使用道具 舉報

您需要登錄後才可以回帖 登錄 | 加入我們

本版積分規則

备案权重域名预定

4um點擊跨境網編創業社區

GMT+8, 2024-11-23 18:40

By DZ X3.5

QQ

快速回復 返回頂部 返回列表