// ==UserScript== // @name RSS 订阅链接查找器 // @namespace https://greasyfork.org/users/1171320 // @version 0.1 // @description 打开网页时,查询可能的 RSS 链接并验证可用性,在网页右下角列举出来。 // @author Lama AI 辅助 // @match *://*/* // @grant GM_xmlhttpRequest // @grant GM_addStyle // @license MIT // @downloadURL none // ==/UserScript== (function() { 'use strict'; const rssLinks = new Set(); const possibleRssPaths = [ '/rss', '/feed', '/atom.xml', '/rss.xml', '/feed.xml' // 可添加其他常见的 RSS 路径 ]; const xmlRegex = /<\?xml.*? { if (link.href) { addRssLink(link.href); } }); // 尝试猜测 RSS 路径 possibleRssPaths.forEach(path => { const guessedUrl = window.location.origin + path; addRssLink(guessedUrl); }); } function addRssLink(url) { if(rssLinks.has(url)) return; GM_xmlhttpRequest({ method: 'GET', url: url, onload: function(response) { if (response.status === 200 && xmlRegex.test(response.responseText)) { rssLinks.add(url); updateRssList(); } }, onerror: function(error){ // 预加载失败,打印错误信息 console.log(`加载失败: ${url}`, error); } }); } function updateRssList() { let container = document.getElementById('rss-finder-container'); if(!container){ container = document.createElement('div'); container.id = 'rss-finder-container'; container.innerHTML = '

可用RSS订阅:

'; document.body.appendChild(container); } const list = container.querySelector('#rss-finder-list'); list.innerHTML = ''; rssLinks.forEach(url => { const li = document.createElement('li'); const a = document.createElement('a'); a.href = url; a.target = '_blank'; a.rel = 'noopener noreferrer'; a.textContent = url; li.appendChild(a); list.appendChild(li); }); } addStyle(); findRssLinks(); })();