惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Engineering at Meta
Engineering at Meta
博客园_首页
H
Help Net Security
WordPress大学
WordPress大学
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
罗磊的独立博客
博客园 - 三生石上(FineUI控件)
B
Blog
I
InfoQ
SecWiki News
SecWiki News
T
Tailwind CSS Blog
Spread Privacy
Spread Privacy
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
V
Vulnerabilities – Threatpost
N
Netflix TechBlog - Medium
P
Palo Alto Networks Blog
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
Vercel News
Vercel News
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
K
Kaspersky official blog
M
MIT News - Artificial intelligence
S
Schneier on Security
T
Threat Research - Cisco Blogs
F
Fortinet All Blogs
Cyberwarzone
Cyberwarzone
Scott Helme
Scott Helme
aimingoo的专栏
aimingoo的专栏
Martin Fowler
Martin Fowler
MyScale Blog
MyScale Blog
The Cloudflare Blog
Recent Announcements
Recent Announcements
Security Latest
Security Latest
G
GRAHAM CLULEY
IT之家
IT之家
Y
Y Combinator Blog
The Last Watchdog
The Last Watchdog
腾讯CDC
Google DeepMind News
Google DeepMind News
V
V2EX
S
Securelist
TaoSecurity Blog
TaoSecurity Blog
B
Blog RSS Feed
S
SegmentFault 最新的问题
博客园 - 叶小钗
P
Proofpoint News Feed
云风的 BLOG
云风的 BLOG
Project Zero
Project Zero
G
Google Developers Blog
Google DeepMind News
Google DeepMind News
F
Full Disclosure

Posts on Razeen`s Blog

Reflections on Management Training: A Technologist's Perspective on the Path to Leadership UPS Multi-Device Protection: Safeguarding Your NAS and Linux Server From Media Center to AI Assistant: My List of 50 Homelab Services Discussing the Reduction of SSL Certificate Validity to 47 Days Deploy Your Own Running Page One Year Review and Cost Analysis of Tesla Model Y Replacing Disqus Comments with Self-hosted Waline Use Prometheus and Grafana to Set Up Your Certificate Monitoring Dashboard Server Migration: Lessons Learned from Swapping Linux Disk Boards Razeen`s Blog
Improve Information Sources with RSS (RSShub + Reeder 5)
2024-08-15 · via Posts on Razeen`s Blog

Recently, while browsing Twitter, I came across multiple experiences shared by DIYgod about his latest project follow. Unfortunately, the project is still in the invitation-only testing phase, so I couldn’t participate. However, DIYgod’s other project RSSHub solved a problem that had been bothering me for a long time.

Until now, my main sources of information were Twitter and public accounts. Although I had also bookmarked some other news sites and personal blogs, I rarely clicked on them to read due to the scattered nature of the information. RSSHub helped me solve this problem. This blog post mainly shares my experience with RSSHub + Reeder 5.

This article is automatically translated by AI. Click here to challenge the original text.

RSS, introduced by Netscape in 1999, originally stood for “Rich Site Summary” and has evolved to version 2.0, also known as “Really Simple Syndication.” It is a format specification for aggregating updates from websites and outputting them in XML format for easy client-side subscription.

I first encountered RSS when setting up my blog, where there was an RSS configuration option. At that time, I simply configured it without realizing its potential for aggregating news. With the rise of self-media and short videos, very few people around me use this method to subscribe to information. However, a few days ago, when I discovered RSSHub, I decided to give it a try, and after two weeks of using it, I found it quite good.

RSSHub is a website that can fetch and convert any content into an RSS feed for subscription.

The project’s slogan is “Everything can be RSS.” It can not only subscribe to various blogs, forums, and new media, but also handle social media platforms like Twitter with ease. It’s very powerful, as detailed in the usage guide.

This project has been continuously developed for 6 years and has undergone a major overhaul this year. I have to admire the dedication of the developers.

alt text

The project supports self-hosting, and I recommend setting up your own instance if you enjoy tinkering. It’s very easy to deploy using docker-compose, and the official documentation provides the necessary configuration file docker-compose.yml.

For external access, it’s best to use Nginx as a reverse proxy and automate certificate management with acme.sh. I have included my configuration at the end of this post.

In addition, the project also provides a Radar feature, which, when combined with a browser extension, allows you to check if the site you are visiting is supported by RSSHub and convert it into a subscription address with just one click. It’s very convenient and even works on mobile devices.

alt text

Of course, if you want to subscribe to GitHub Trending or Twitter timelines, you need to configure the corresponding tokens, as explained in the configuration guide.

Reeder 5

Now that we have the RSS feeds, the next step is to choose a client. I chose Reeder 5, an RSS reader for macOS/iOS/iPadOS. Although it is a paid app, after using it for a few weeks, I find it really good.

Reeder 5 supports various RSS sources, including Feedly, Inoreader, and more. It also allows custom RSS feeds.

Currently, I mainly use it to subscribe to blogs, public accounts, and Twitter. It has a clean layout, good font choices, and supports iCloud sync, which is very convenient.

alt text

In addition, it has a “Read Later” feature that I really like. Sometimes, when I come across an article but don’t have time to read it, I can directly choose “Read Later in Reeder” in my browser and read it later in the app when I have time. It’s very convenient (previously, I used to send articles to myself on WeChat).

alt text

alt text

Conclusion

After using this combination for some time, I find it quite good. I can aggregate the information I want through RSSHub and read it at the right time without worrying about missing out.

However, at the same time, the amount of information has increased, but my capacity to consume it is limited. I need to make choices and only keep what is relevant to me; otherwise, it can lead to information overload.

One more thing, currently there is no good way to crawl articles from WeChat public accounts (although I have seen some paid solutions). Currently, the only way to read articles from WeChat public accounts is through the subscription feature.

Finally, I am looking forward to DIYgod’s follow project and hope to experience it soon.

One more thing

Lastly, I would like to share my configuration for reference.

To access Twitter and GitHub smoothly, it is recommended to deploy the server overseas.

  • docker-compose.yml

Added acme.sh to apply for certificates and Nginx to proxy RSSHub.

version: '3.5'
services:
  acme:
  image: neilpang/acme.sh
  restart: always
  container_name: acme.sh
  command: ["daemon"]
  environment:
    # I use Cloudflare DNS, refer to https://github.com/acmesh-official/acme.sh/wiki/dnsapi for other options
    - CF_Zone_ID=xxxx  
    - CF_Token=xxx
  volumes:
    - ./acme.sh:/acme.sh
    - ./certs:/ssl

  nginx:
  image: nginx
  network_mode: host
  container_name: nginx
  restart: always
  volumes:
    - ./certs:/etc/nginx/ssl
    - ./web-rsshub.conf:/etc/nginx/conf.d/rsshub.conf

  rsshub:
  image: diygod/rsshub
  restart: always
  container_name: rsshub
  ports:
    - '1200:1200'
  environment:
    NODE_ENV: production
    CACHE_TYPE: redis
    REDIS_URL: 'redis://redis:6379/'
    PUPPETEER_WS_ENDPOINT: 'ws://browserless:3000'  # marked
    GITHUB_ACCESS_TOKEN: 'xxxx'
    TWITTER_USERNAME: 'xxx'
    TWITTER_PASSWORD: 'xxx'
    TWITTER_AUTHENTICATION_SECRET: 'xxxx'
  depends_on:
    - redis
    - browserless  # marked
  
  browserless:  # marked
  image: browserless/chrome  # marked
  container_name: rsshub-browserless
  restart: always  # marked
  ulimits:  # marked
    core:  # marked
    hard: 0  # marked
    soft: 0  # marked
  
  redis:
  image: redis:alpine
  container_name: rsshub-redis
  restart: always
  volumes:
    - ./redis-data:/data
  • web-rsshub.conf

Nginx reverse proxy configuration for RSSHub

server {
  listen                       443 ssl;
  server_name                  rsshub.example.com;
  server_tokens                off;
  http2 on;

  ssl_certificate              /etc/nginx/ssl/fullchain.pem;
  ssl_certificate_key          /etc/nginx/ssl/key.pem;

  ssl_prefer_server_ciphers    on;
  ssl_ciphers                  EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;

  ssl_protocols                TLSv1.1 TLSv1.2 TLSv1.3;
  ssl_session_cache            shared:SSL:50m;
  ssl_session_timeout          1d;
  ssl_session_tickets          on;

  ssl_trusted_certificate      /etc/nginx/ssl/ca.pem;
  ssl_stapling                 on;
  ssl_stapling_verify          on;

  access_log  /var/log/nginx/access_rsshub.log  main;
  error_log   /var/log/nginx/error_rsshub.log;

  resolver 8.8.8.8 ipv6=off valid=30s;

  location / {
    proxy_pass http://127.0.0.1:1200;
  }
}
  • apply-cert.sh

Script to apply for certificates and update them

#!/bin/bash

echo "start install cert ..."

docker exec acme.sh --issue \
  -d "example.com" \
  -d "*.example.com" \
  --dns dns_cf \
  --keylength ec-256 \
  --server letsencrypt \
  --dnssleep 300 \
  --force

if [ $? -ne 0 ]; then
  echo "apply cert failed"
  exit 1
fi

docker exec acme.sh --install-cert \
  -d "example.com" \
  -d "example.com" \
  --dns dns_cf \
  --keylength ec-256 \
  --server letsencrypt \
  --key-file       /ssl/key.pem \
  --fullchain-file /ssl/fullchain.pem \
  --ca-file /ssl/ca.pem \
  --reloadcmd  "echo 'done'"

if [ $? -ne 0 ]; then
  echo "install cert failed"
  exit 1
fi

docker restart  nginx

if [ $? -ne 0 ]; then
  echo "reload nginx failed"
  exit 1
fi

echo "update cert success"