Automatically refreshes Miniflux feeds
Mint
// ==UserScript==
// @name Miniflux automatically refresh feeds
// @namespace https://reader.miniflux.app/
// @version 12
// @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 () => {
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);
console.log(feedsArray);
feedsArray.sort((a, b) => {
return (new Date(a.checked_at).getTime() - new Date(b.checked_at).getTime()); // Sort from last checked to most recently checked.
})
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);
}, 15000 * index); // Make a call every 15 seconds.
} else console.log(`It's been less than 24 hours, do nothing.`)
}
}
// run once when the page is loaded.
window.addEventListener("DOMContentLoaded", refreshFeeds);