您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Automatically refreshes Miniflux feeds
当前为
// ==UserScript== // @name Miniflux automatically refresh feeds // @namespace https://reader.miniflux.app/ // @version 17 // @description Automatically refreshes Miniflux feeds // @author Tehhund // @match *://*.miniflux.app/* // @icon https://www.google.com/s2/favicons?sz=64&domain=miniflux.app // @run-at document-start // ==/UserScript== let apiKey = ''; // Put your API key from Miniflux here. const rateLimit = 43200000; // Only refresh twice per day. 43200000 miliseconds = 12 hours. If a feed has an error (e.g., too many requests) its checked_at datetime still gets updated so we won't hit the feeds with too many requests. const refreshFeeds = async () => { let toastDiv = document.createElement('div'); toastDiv.id='toastDiv'; toastDiv.style.marginBottom = "5rem"; document.body.appendChild(toastDiv); setTimeout(() => { toastDiv.remove() }, 900000); // remove after 15 minutes. if (!apiKey) { // If the API key isn't specified, try getting it from localstorage. apiKey = localStorage.getItem('miniFluxRefresherApiKey'); } else { // If we have the API key, store it in localstorage. localStorage.setItem('miniFluxRefresherApiKey', apiKey); } let req = await fetch('https://reader.miniflux.app/v1/feeds', { headers: { 'X-Auth-Token': apiKey } }); let res = JSON.parse(await req.text()); let feedsArray = res.map(currentFeed => currentFeed); feedsArray.sort((a, b) => { return (new Date(a.checked_at) - new Date(b.checked_at))}); // Sort from least recently checked to most recently checked so least recent gets refreshed first. for (let [index, feed] of feedsArray.entries()) { let lastChecked = new Date(feed.checked_at).getTime(); if (Date.now() - lastChecked > rateLimit) { console.log(`It's been more than 24 hours, refresh.`); setTimeout( async () => { let res = await fetch(`https://reader.miniflux.app/v1/feeds/${feed.id}/refresh`, { method: "PUT", headers: { 'X-Auth-Token': apiKey } }); console.log(res); setToast(`Fetching ${feed.title} ${feed.site_url}`); }, 15000 * index); // Make a call every 15 seconds. } else console.log(`It's been less than 24 hours, do nothing.`); } } const setToast = (text) => { let newNode = document.createElement('div'); newNode.id = `feedFetchStatus`; newNode.textContent = text; //document.getElementsByClassName('items')[0].appendChild(newNode); document.getElementById('toastDiv').appendChild(newNode); setTimeout(() => { newNode.remove() }, 4000); } // run once when the page is loaded. window.addEventListener("DOMContentLoaded", refreshFeeds);