您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Automatically refreshes Miniflux feeds
当前为
// ==UserScript== // @name Miniflux automatically refresh feeds // @namespace https://reader.miniflux.app/ // @version 6 // @description Automatically refreshes Miniflux feeds // @author Tehhund // @match *://*.miniflux.app/* // @icon https://www.google.com/s2/favicons?sz=64&domain=miniflux.app // @esversion // @run-at document-start // @grant none // ==/UserScript== const apiKey = ''; const rateLimit = 600000; // time in miliseconds that must pass before it refreshes the feeds. 3600000 = 1 hour. 600000 = 10 minutes const refreshFeeds = async () => { const earliestTime = await getLastUpdateTime(); const now = new Date().getTime(); if (await shouldUpdate(earliestTime, now)) { console.log('Miniflux: Time to refresh'); localStorage.setItem('lastRefreshTime', now); // Save the new time. Might differ slightly from server time but not enough to matter. let res = await fetch('https://reader.miniflux.app/v1/feeds/refresh', { method: "PUT", headers: { 'X-Auth-Token': apiKey } }); if (res.status == 204) { console.log('Successfully started refresh on all feeds.'); } else { console.log('Error, Miniflux did not return a 204 status.'); } } else { console.log('Miniflux: Not time to refresh yet.'); } }; const shouldUpdate = async (earliestTime, now) => { let shouldUpdate = false; let difference = now - earliestTime; // JS stores time like Unix but miliseconds since January 01, 1970 00:00:00 UTC instead of seconds, so this subtracts miliseconds from miliseconds. if (difference > rateLimit) { shouldUpdate = true; } return shouldUpdate; }; const getLastUpdateTime = async () => { // This relies on the calling function to update localStorage if it's time for an update. let earliestTime = localStorage.getItem('lastRefreshTime'); // Try to get time from localstorage. if (earliestTime == null) { // If it's not in localstorage, get the time from the API. let req = await fetch('https://reader.miniflux.app/v1/feeds', { headers: { 'X-Auth-Token': apiKey } }); let res = JSON.parse(await req.text()); let timesArray = res.map(currentFeed => Date.parse(currentFeed.checked_at)); // returns an array of each feed's checked_at. earliestTime = Math.min(...timesArray); // Instead of comparing in a For loop, let Math.min return the lowest value. That's the earliest time. } return earliestTime; }; // run once when the page is loaded. window.addEventListener("DOMContentLoaded",refreshFeeds);