/node-rss-proxy

Caching proxy for podcast RSS feeds: Less XML for your phone to download and parse

Primary LanguageJavaScriptMIT LicenseMIT

Node RSS Proxy

Node RSS Proxy is a node.js service I use on my linode server to proxy and cache podcast RSS feeds.

Why? To reduce mobile data usage, and so my phone can process RSS feeds more quickly.

  • The proxy reduces the size of a podcast feed by omitting unnecessary XML elements
  • Reduces the number of servers my phone has to contact when fetching feeds
  • Returns only the new feed items (since podcast client's last fetch)
  • Follows feed redirects, and remembers previous URLs

Requirements:

  • node.js
  • NPM modules: See the "npm install" line below

Installation and Usage:

  • npm install
  • Installs mysql feedparser request entities node-statsd-client
  • Create a mysql database
  • Use setup.mysql to create tables
  • Copy config-example.js to config.js and update with your database credentials and desired secret folder prefix
  • Start the service on port 80 via: node ./index.js 80
  • Note: It's probably best to use a higher port so you can run as non-root. Then use port forwarding or configure a proxy in nginx/lighttpd/apache
  • When adding feeds to your podcast client, prepend feed URL with: http://YOURDOMAIN.com/FOLDERSECRET-CLIENTNAME/
    • FOLDERSECRET is a secret folder prefix of your choosing, to keep others from using your proxy
    • CLIENTNAME is to differentiate devices/podcast-clients

Note about Caddy HTTP server:

Caddy convert an invalid URL info a valid one, which caused problems for the proxy. Caddy will convert this:

http://feed-proxy.com/secret-device/http://feed-url.com/123

into this:

http://feed-proxy.com/secret-device/http/feed-url.com/123

To accomodate that, I've modified src/index.js to expand "http/" into "http://" as appropriate.