From a18c856eb97c28e02eb5422bbe98655dd7dcd7e7 Mon Sep 17 00:00:00 2001 From: Tomasz Borychowski Date: Sun, 1 Nov 2020 15:51:25 +0000 Subject: [PATCH] rss --- README.md | 12 ++++++-- apps/rss/miniflux-filter.md | 45 +++++++++++++++++++++++++++++ apps/rss/miniflux.md | 56 +++++++++++++++++++++++++++++++++++++ 3 files changed, 111 insertions(+), 2 deletions(-) create mode 100644 apps/rss/miniflux-filter.md create mode 100644 apps/rss/miniflux.md diff --git a/README.md b/README.md index 1d6f565..0c7343e 100644 --- a/README.md +++ b/README.md @@ -170,8 +170,16 @@ So, without further ado, here's the current list: # RSS - - Miniflux - - Miniflux-filter + - [Miniflux](rss/../apps/rss/miniflux.md) + - [Miniflux-filter](rss/../apps/rss/miniflux-filter.md) + - [FreshRSS](https://www.freshrss.org/) [external] - second best :-) + + +## RSS Tools +- [PolitePol](https://github.com/taroved/pol) [external] - Create RSS where there was none +- [FetchRSS](https://fetchrss.com/) [external] - Create RSS for FB, Twitter, YT, and websites +- [rss-bridge](https://github.com/RSS-Bridge/rss-bridge) [external] - The RSS feed for websites missing it +- [rss2full](https://github.com/feedocean/rss2full) [external] - Transform summary feeds into full-text # Search engines diff --git a/apps/rss/miniflux-filter.md b/apps/rss/miniflux-filter.md new file mode 100644 index 0000000..62801a2 --- /dev/null +++ b/apps/rss/miniflux-filter.md @@ -0,0 +1,45 @@ +# Miniflux-filter + +Filter for miniflux - "mark as read" all unwanter articles. +I created that before miniflux added some basic filtering. Maybe still useful to someone. +The difference from the built-in filtering is that this marks articles as read, whereas the built-in filtering filters articles out BEFORE adding them to the DB. + + +
+ +- [Github repo](https://github.com/tborychowski/miniflux-filter) + + +## docker-compose.yml +```yml +--- +version: '3' +services: + miniflux-filter: + image: tborychowski/miniflux-filter + container_name: miniflux-filter + restart: unless-stopped + environment: + - TZ=Europe/Dublin + - HOST=https://rss.example.com + - API_KEY= + - CHECK_EVERY_S=300 # 300 seconds = 5 min + ports: + - "5011:3000" + volumes: + - ./filters.yml:/app/filters.yml + - ./logs:/app/logs # optional +``` + +## filters.yml +This is a simple list of matchers: it loops through the unread articles and for every one of them - it loops through this list. If the article URL matches a filter `url` and the article title contains the string from `title` field - this article will be marked as read. + +```yml +filters: + - url: 'feed.example.com' # match feed url + title: 'windows 10' # match title + - url: 'feed.example.com' + title: 'sponsored' + - url: 'feed.another.com' + title: 'spam' +``` diff --git a/apps/rss/miniflux.md b/apps/rss/miniflux.md new file mode 100644 index 0000000..363f086 --- /dev/null +++ b/apps/rss/miniflux.md @@ -0,0 +1,56 @@ +# Miniflux + +The best RSS reader that I've tested. Simple, extremely fast and minimalistic. + +
+ +- [Homepage](https://miniflux.app/) +- [Github repo](https://github.com/miniflux/v2) +- [Docs](https://miniflux.app/docs/index.html) + + +## docker-compose.yml +```yml +version: '3' +services: + miniflux: + image: miniflux/miniflux:nightly + ports: + - "5010:8080" + depends_on: + - db + environment: + - DATABASE_URL=postgres://miniflux:secret@db/miniflux?sslmode=disable + - RUN_MIGRATIONS=1 + - CREATE_ADMIN=1 + - ADMIN_USERNAME=admin + - ADMIN_PASSWORD=test123 + db: + image: postgres:latest + environment: + - POSTGRES_USER=miniflux + - POSTGRES_PASSWORD=secret + volumes: + - ./db:/var/lib/postgresql/data +``` + + +## Tips & Tricks +- [Rules](https://miniflux.app/docs/rules.html) can be set for every feed source: + +### Filter Rules - block rules +exclude articles containing a word (case insensitive), e.g. +``` +(?i)windows,(?i)miniflux +``` + +### Rewrite rules +``` +add_dynamic_image,add_image_title,add_youtube_video +``` + +### Scraper rules +This is just a css selector for the main article DOM element, e.g.: +```css +#phContent_divMetaBody>p, #phContent_divMetaBody>.content-image-wrapper +```