Miniflux automatically refresh feeds

Automatically refreshes Miniflux feeds

От 16.07.2024. Виж последната версия.

За да инсталирате този скрипт, трябва да имате инсталирано разширение като Tampermonkey, Greasemonkey или Violentmonkey.

За да инсталирате този скрипт, трябва да имате инсталирано разширение като Tampermonkey или Violentmonkey.

За да инсталирате този скрипт, трябва да имате инсталирано разширение като Tampermonkey или Violentmonkey.

За да инсталирате този скрипт, трябва да имате инсталирано разширение като Tampermonkey или Userscripts.

За да инсталирате скрипта, трябва да инсталирате разширение като Tampermonkey.

За да инсталирате този скрипт, трябва да имате инсталиран скриптов мениджър.

(Вече имам скриптов мениджър, искам да го инсталирам!)

За да инсталирате този стил, трябва да инсталирате разширение като Stylus.

За да инсталирате този стил, трябва да инсталирате разширение като Stylus.

За да инсталирате този стил, трябва да инсталирате разширение като Stylus.

За да инсталирате този стил, трябва да имате инсталиран мениджър на потребителски стилове.

За да инсталирате този стил, трябва да имате инсталиран мениджър на потребителски стилове.

За да инсталирате този стил, трябва да имате инсталиран мениджър на потребителски стилове.

(Вече имам инсталиран мениджър на стиловете, искам да го инсталирам!)

// ==UserScript==
// @name         Miniflux automatically refresh feeds
// @namespace    https://reader.miniflux.app/
// @version      11
// @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==

const 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);