Goodbye Feedly. Hello InoReader.

Started by bill, January 18, 2017, 02:01:55 AM

Previous topic - Next topic

bill

When Google dropped Reader, and the developer of FeedDemon ended the project, I was a bit lost for a good RSS feed reader.  Like a lot of people I jumped on Feedly. I even got in early on the paid Pro version and snagged a lifetime subscription. I'm a heavy RSS user and wanted the most features possible.

Fast forward a few years, and Feedly development doesn't seem to be going anywhere. You can't even make a keyword feed or filter keywords out of a feed. The interface is nice, but they just don't let me fine tune my feeds.

Always looking for an alternative that's better, even if I do have a Pro Feedly account, I came across InoReader. This is a feed reader on steroids. The options menu alone had me hooked. They's got the basics down pat, and have an extensive set of rules and filters so that I can keep all of my thousands of feeds yet only have them show relevant information. Not sure why Feedly couldn't have done this from day 1. I'm finally enjoying curating my RSS feed collection again.

Rooftop

Thanks for the reminder.  InoReader is on my "to check out" list, but I hadn't got around to it.  I've become frustrated with elements of feedly so have been meaning to find an alternative.

ergophobe

Thanks Bill... since Feedly is the big player, does Ino have a means of importing Feedly meta data (i.e. tags you've added or items you've favorited)?

Feedly has a public API, so I would think Ino would use that....

bill

#3
Quote from: ergophobe on January 18, 2017, 05:18:37 PM
Thanks Bill... since Feedly is the big player, does Ino have a means of importing Feedly meta data (i.e. tags you've added or items you've favorited)?

Feedly has a public API, so I would think Ino would use that....

I exported my Feedly OPML, imported it into InoReader, and was operational in minutes. I didn't use tags in Feedly or have a lot of favorites, but they're available in InoReader. What other sort of Feedly extras are you using?

There is a specific Feedly import
QuoteUse this functionality to import your subscriptions from Feedly.
You will need to obtain a developer access token from here. A link will be sent to your email registered with Feedly.
I assume that will pull in everything.

ergophobe

Quote from: bill on January 19, 2017, 01:42:50 AM
What other sort of Feedly extras are you using?

Mostly just tags to categorize things. I'd probably be just as well of to simply lose that info to be honest, but was just curious

bill

I highly suggest you give it a try. I liked it so much I went for the Pro version. Even at the free tier I think they have some benefits over Feedly.

I think you'll like the feed health checking. I was able to cull a bunch of inactive feeds, and found a whole bunch that were failing for one reason or another. Feedly just doesn't show you that. I didn't realize how many old SEO feeds had died or hadn't been updated in years.

ergophobe

#6
No issues with long lags and loads as a heavy user?
http://forum.inoreader.com/index.php?/topic/6649-considering-switch-back-to-feedly-here-are-my-issues/

I'm also generally pissed that they don't post pricing. I did a Google search for pricing and "pro" and they both took me to pages that required a login to see pricing. That just infuriates me.

bill

I really haven't noticed a speed difference.  They seem similar to me, but I'm coming from Japan.

I also like the somewhat old-school design of InoReader. Feedly has that new fangled sparse design which feels like a lot of wasted space when I check back.

I didn't notice the lack of pricing on the public facing pages, That's surfaced once you have a free account. (Starter: $14.99/yr, Plus: $29.99/yr, Pro: $49.99/yr) I agree that shouldn't be hidden.

The paid options really just surface more filters and rules, which is what Feedly lacks.

rcjordan

Pretty nice. Just what I need, another addiction.

It needs a way to quickly build filters, maybe a context menu pop-up rule. EX: I'd have liked to kill "Uber" temporarily, as their $20M fine was making everybody's feed and clogging up the reader.

rcjordan

>needs a way to quickly build filters

I'm adapting my TMonkey scripts to overlay inoreader.  Looks like it's going to work.

>pay

Screw that.

rcjordan


// ==UserScript==
// @name     InoReader|HIDE Feed ITEMS by Keyword
// @match        https://www.inoreader.com/*
// @require  http://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js
// @require  https://gist.github.com/raw/2625891/waitForKeyElements.js
// @grant    GM_addStyle
// ==/UserScript==
/*- The @grant directive is needed to work around a design change
   introduced in GM 1.0.   It restores the sandbox.
*/
var keywords    = [
   'alleppo','berlin','brexit','Chapo','censorship','clinton','duterte','extradition','fillon','francis','march on','Women\'s March',
       '<===#_TEMP_#==',
       'abduct','abortion',' abus','accident','accuse','addict','afghan','africa','airstrik','alert','ambush',
       'Apple','arctic','argenti','arrest','assange','assault','Asus','asylum','athelet','attack','austral','austria','authori',
       'babies','baby','basebal','basketbal','battle','beating','beer','biebe','blackberr','blm ','blood','border','bomb',
       'boxing','breitbart','brazil','browns','brutal','burka',
       'canad','cancer','cannab','carbon','charged','christ','cleric','climate','coach','colomb','confront','convict','cowboys',
       'crash','cricke','crime','cruel',' cuba','custody',
       'day-care','daycare','day care','dead','death','decapi','derail','destr',' died',' dies ','drown','drunk','dutch','dying',
       'eagles','endangered','enforce','ethnic','evacuat','execute','execution','explode','explosi','extinct',
       'f1 ',' fans ','fantasy','fatal','footbal','formula one','funeral',
       'gaga ','gambia','game','gaming',' gay ','german','ghana','Google','greece','greek','guilt',' gun ','gunman',
       'haiti','heartbreak','heroin','hijab','homeless','homici','Huawei',
       'illegal','immigra','impeach','india','indict','indones','infan','injur','investi','iphone','iran','iraq','isis','islam','israel','italy','japan',
       'kardash','kany','kenya','kickbox','kidnap',' killed','killer','killing','kills','korea','kuwait',
       'lebanon','libya',' lions','lives matter','lockdown','lottery',
       'madagas','malays','malta','marij','marriage','marry',' mars','mayor','migrant','missle','mls ',
        'mongol','morocc','mosque','mosul','movie','mourn','murder','muslim','myanmar',
       'nascar','nba ','ncaa ','new zea','nfl ','nhl ','Nintendo','Obama','offend','offens','olymp','overdose','opec',
       'packers','pakistan','panthers','patriot','pepper','philipp','player','playoff','PlayStation','plead','poacher','pokemon','pope fra','powerball',
       'prison',' prix','prostitu','protest','punch',
       'racial','racis','raiders',' rams ',' rape ','refugee','rescu','rights','robbed','rosie ','russia',
       'saints','saudi','school bus','season','self.','sentence','severed','shoot',' shot ','singap','slaught','slaying','smuggle','socce','soldier',
       'stabbed','starv','stole','student lo','suicid','surviv','suspend','suspici','swat','swede','syria',
       'Taiwan','terror','thai','theft','thief','threat','toddle','trafficker','trailer',' troll','Trump','turkey',
       'uber ','ufc ','uganda','ukrain','unarmed','upset','venezu','veteran','victim','violen','violat',
       'weapon','white house','world cu','wreck','wwe ','Xbox','yemen','zika ','zimbab',

];
var keyW_Regex  = new RegExp (keywords.join('|'), "i"); //-- The "i" makes it case insensitive.

waitForKeyElements (
    ".article_tile_content_wraper", hideTarget
);

function hideTarget (jNode) {
   if (keyW_Regex.test (jNode.text () ) ) {
       jNode.parent ().hide ();
   }
}


rcjordan


bill

> pay

My company will pay for this for me as I use it for work. Otherwise I'd take advantage of that awesome GreaseMonkey script. I am adding those keywords to my filters now. Quite a few I didn't have.

rcjordan

I modified the above adblock script to nuke the inline ads.

// ==UserScript==
// @name InoReader ADBLOCK
// @description Remove inoreader.com's advertisement in reading list, upgrade button, and inline ads.
// @author         Greasyfork script + RCJ mod for inline ads
// @include *.inoreader.com/*
// @require  http://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js
// @require  https://gist.github.com/raw/2625891/waitForKeyElements.js
// @grant    GM_addStyle
// ==/UserScript==
/*- The @grant directive is needed to work around a design change
    introduced in GM 1.0.   It restores the sandbox.
*/

var keywords    = [
    'remove ads',
        '<===#_ADVERTISING-Related-Keywords-In-Article-FOOTER_#==',
];
var keyW_Regex  = new RegExp (keywords.join('|'), "i"); //-- The "i" makes it case insensitive.

waitForKeyElements (
  ".article_tile_footer", hideTarget //works for inline AD blocking
);

function hideTarget (jNode) {
    if (keyW_Regex.test (jNode.text () ) ) {
        jNode.parent ().hide ();
    }
}

tools_div = document.getElementById('sb_rp_tools');
if (tools_div) {
  tools_div.style.right = '90px';
}
notifications_div = document.getElementById('sb_rp_notifications');
if (notifications_div) {
  notifications_div.style.right = '50px';
}
gear_div = document.getElementById('sb_rp_gear');
if (gear_div) {
  gear_div.style.right = '10px';
}
upgrade_div = document.getElementById('sb_rp_upgrade');
if (upgrade_div) {
  document.getElementById('sb_rp_upgrade').style.display = 'none';
}
reader_pane_div = document.getElementById('reader_pane');
if (reader_pane_div) {
  reader_pane_div.addEventListener('DOMNodeInserted', function (e) {
    if (e.originalTarget.id && e.originalTarget.id.indexOf('leaderboard_ad-') != - 1) {
      e.originalTarget.parentNode.removeChild(e.originalTarget);
    } else if (e.originalTarget.classList && e.originalTarget.classList.contains('ad_title')) {
      e.originalTarget.parentNode.removeChild(e.originalTarget);
    } else if (e.originalTarget.classList && e.originalTarget.classList.contains('dashboard_gadgets')) {
      //find and remove ads div in dashboard page
      sub_divs = e.originalTarget.getElementsByTagName('div');
      for (i = 0; i < sub_divs.length; ++i) {
        if (sub_divs[i].classList && sub_divs[i].classList.contains('header_control')) {
          if (!sub_divs[i].innerHTML.trim()) {
            e.originalTarget.parentNode.removeChild(e.originalTarget);
          }
        }
      }
    }
  }, false);
}
content_div = document.getElementById('three_way_contents');
if (content_div) {
  content_div.addEventListener('DOMNodeInserted', function (e) {
    if (e.originalTarget.id && e.originalTarget.id.indexOf('taboola_ad-') != - 1) {
      e.originalTarget.parentNode.removeChild(e.originalTarget);
    }
  }, false);
  content_div.addEventListener('scroll', function () {
    if (content_div.scrollTop !== 0 && !document.getElementById('_gm_hacksign_topbar_content')) {
      var topbar = document.createElement('div');
      topbar.id = '_gm_hacksign_topbar_content';
      topbar.style.background = 'rgba(0, 0, 0, 0.3) none repeat scroll 0px 0px';
      topbar.style.position = 'fixed';
      topbar.style.textAlign = 'center';
      topbar.style.right = '20px';
      topbar.style.bottom = '10px';
      topbar.style.lineHeight = '30px';
      topbar.style.cursor = 'pointer';
      topbar.style.width = '40px';
      topbar.style.height = '40px';
      topbar.className='icon-arrow_up_big';
      topbar.onclick = function () {
        var y = content_div.scrollTop;
        var timer = setInterval(function () {
          y = y - y / 6;
          if (y < 50) {
            y = 0;
            content_div.scrollTo(0, y);
            clearInterval(timer);
          }
          content_div.scrollTo(0, y);
        }, '25');
      };
      content_div.appendChild(topbar);
    } else if (content_div.scrollTop === 0 && document.getElementById('_gm_hacksign_topbar_content')) {
      content_div.removeChild(document.getElementById('_gm_hacksign_topbar_content'));
    }
  });
  content_div.addEventListener('DOMNodeInserted', function (e) {
    if (e.originalTarget.id && e.originalTarget.id.indexOf('article_full_contents') != - 1) {
      e.originalTarget.addEventListener('DOMNodeInserted', function (f) {
        if (f.originalTarget.classList && f.originalTarget.classList.contains('ad_title')) {
          f.originalTarget.parentNode.removeChild(f.originalTarget);
        }
        if (f.originalTarget.attributes.length === 0 && f.originalTarget.childNodes.length !== 0) {
          for (i = 0; i < f.originalTarget.childNodes.length; ++i) {
            if (f.originalTarget.childNodes[i].id.indexOf('inner_ad-') != - 1) {
              f.originalTarget.childNodes[i].style.display = 'none';
            }
          }
        }
        if (f.originalTarget.classList && f.originalTarget.classList.contains('ad_footer_remove')) {
          f.originalTarget.parentNode.removeChild(f.originalTarget);
        }
        if (f.originalTarget.classList && f.originalTarget.classList.contains('sinner_under_footer')) {
          f.originalTarget.parentNode.removeChild(f.originalTarget);
          e.originalTarget.style.paddingBottom = '20px';
        }
      }, false);
    }
  }, false);
}



rcjordan

#14
<added>

>needs a way to quickly build filters, maybe a context menu pop-up

TM ext in G Chrome gives me this. You can easily open the dashboard from the browser and then KEEP the script open for realtime kw editing in a separate tab.

<added2>
Also TM ext provides an off/on slider for each filter it's applying to an url right in the extension icon. It's easy to turn off a filter if you want the full stream.