• Stars
    star
    265
  • Rank 154,062 (Top 4 %)
  • Language
    JavaScript
  • License
    GNU General Publi...
  • Created over 10 years ago
  • Updated over 8 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

A JavaScript river-of-news aggregator running in Node.js

River4

River4 is a JavaScript river-of-news aggregator running in Node.js

Important: River5 has been released. It's simpler to set up and runs faster.

How to install

Here are the instructions for setting up River4 on a system running Node.js, using the local file system for storage.

Links

  1. Welcome to River4.

  2. What is a River of News aggregator?

  3. Why every news organization should have a river.

  4. The River4 support mail list.

  5. How to ask for help with software.

  6. The Hello World of Rivers.

  7. Editing subscription lists.

  8. Installing River4 on Ubuntu.

Updates

v0.120 -- 8/21/15 by DW

Watch for a change to the mod date of the river4.js file. Quit if it changes. But only if the feature is enabled via config.flWatchAppDateChange boolean.

If you changed the name of the River4 app, you can provide the new name in config.fnameApp.

Here's an example of a config.json for this setup.

v0.118 -- 8/13/15 by DW

Now handles feeds whose address begins with feed://. We just translate it to http://. Previously there would be an error reading the feed.

Also created a module, utils.js, instead of including the source in the main body of river.js. River4 was the first Node app I shipped, I've since learned how to modularize Node apps.

v0.117 -- 7/20/15 by DW

Lots of small changes to make River4 easier to setup for newbies. ;-)

  1. If you haven't set any path variables, or set up config.json, River4 will run with the data stored in a river4data sub-folder of the folder containing river4.js, which it automatically creates.

  2. We don't announce each step of the startup process on the console.

  3. If there's an ENOENT error reading prefsAndStats.json, we don't report an error, since River4 automatically creates the file the first time it runs. This confused some users, unnecessarily.

  4. We create the lists folder automatically.

  5. We no longer install an index.html file in the river4data folder. The file we installed didn't actually work, and it's no longer necessary since the home page of the server is now a perfectly good way to browse the rivers on the server.

  6. Re-wrote the howto for setup, eliminating two complicated and potentially error-prone steps. The old howto is still there but with a bold statement at the top saying you should use the new one.

  7. There's a 15-minute video that shows how to set up a River4 installation.

v0.116 -- 7/4/15 by DW

The home page of the River4 server now shows you the rivers being maintained by the server. There's a menu that links to the dashboard, the blog, mail list, and GitHub repo.

v0.115 -- 6/21/15 by DW

New feature: Callback scripts that run when River4 adds an item to the river.

v0.114 -- 6/16/15 by DW

Fixed JSON encoding problem reported by Andrew Shell.

v0.113 -- 6/7/15 by DW

We now record the current time in each item in the calendar structure. This is used when building a river to set the whenLastUpdate field.

v0.112 -- 6/5/15 by DW

Now when we receive a message saying that a feed updated, we read the feed and rebuild all rivers that it's part of. I wanted to test the framework before going this step.

Again, a careful code review and testing by others would be appreciated.

v0.111 -- 6/4/15 by DW

Added support for rssCloud. Now if a feed has a <cloud> element, we contact the server and go through the subscription protocol. If it all works, we'll be notified of updates to the feed before we poll.

The rssCloud support is largely untested. However I have upgraded all my copies of River4 to run the new version, and it seems to be functioning well. Code review of the new functionality would be much appreciated.

We also remove items from each feed's history array when the item no longer appears in the feed. This reduces the size of some of the files in the data folder, in general making the software more efficient.

Fixed an error that would cause River4 to crash when there were no OPML subscription list files in the lists folder.

v0.110 -- 5/10/15 by DW

A new way to configure River4, using a config.son file in the same directory as river4.js.

v0.109 -- 4/21/15 by DW

Fixed a bug that would cause generated rivers to be empty immediately after date rollover.

The fix was to write out an empty array in the calendar structure when the date rollover occurs. The problem was that until there was a new item saved for the day, the first read of the calendar, when building a river would fail, causing the build to finish.

The problem was discovered in podcatch.com, and written up on the River4 blog.

v0.108 -- 12/5/14 by DW

There's now a River4 Console app, at http://river4.io/ that allows you to edit subscription lists in an outliner, and set some of the server preferences remotely. It's documented on the River4 blog.

v0.100 -- 11/2/14 by DW

Fixed a bug in file name processing.

v0.99 -- 11/1/14 by DW

Two fixes for local file system use. 1. Only read lists whose names end with .opml -- there were invisible files on the Mac that would cause problems. 2. When running on Windows and writing to the local file system, there are more illegal characters. Replace them with underscores.

v0.97 -- 10/16/14 by DW

Apparently there was a change in format in the FeedParser module, in the way it represents <source:outline> elements. This release handles the change in format so outlines now pass through in a way that's understandable to the RiverBrowser software.

v0.96 -- 9/24/14 by DW

This version can be configured to store its data in the local filesystem instead of S3. See the blog post for details.

v0.95 -- 9/11/14 by DW

New /ping endpoint, available to be called by a publisher, on behalf of a user, to indicate that a feed has updated, and should be read immediately. Radio3 has this facility as of today, as does Fargo.

v0.94 -- 8/6/14 by DW

Fixed a problem that caused rivers to display only old stories. Full explanation on the blog.

v0.93 -- 7/31/14 by DW

Added more fields to the struct the /status call returns. It now says what the s3path is, what port the server is running on, and if you've defined a s3defaultAcl (see v0.91) what the value of that parameter is.

v0.91 -- 7/19/14 by DW

A new environment variable, s3defaultAcl, if present specifies the permissions on S3 files we create. The default is public-read. With this parameter, it may be possible to run a private installation of River4.

v0.90 -- 7/19/14 by DW

New <source:outline> elements flow through River4. See the docs for the source namespace for details.

v0.89 -- 6/19/14 by DW

One small change to package.json, and no changes to the JavaScript code.

v0.88 -- 6/17/14 by DW

A subscription list can now contain an include node, so you can have a list of lists. Full explanation in this blog post.

Changed the package.json file to require Node v0.8.x. Previously it was 0.6.x. This should make it possible to deploy on Nodejitsu without modification, per Dave Seidel's report.

v0.87 -- 6/09/14 by DW

Fixed a bug that would cause River4 to crash when processing an item with a null title.

v0.86 -- 6/09/14 by DW

Fixed a bug that would cause River4 to crash when reading an item from a subscription list that didn't have an xmlUrl attribute.

v0.85 -- 6/07/14 by DW

Two fixes, explained here.

v0.84 -- 6/06/14 by DW

Two fixes, explained here.

v0.83 -- 6/06/14 by DW

Now if there's an error in any JSON code we try to parse, we display an error message in the console, along with the path to the S3 file we were trying to read.

v0.81 -- 6/02/14 by DW

serverData.stats now has a copy of the last story added to the river. The dashboard page displays it.

v0.80 -- 6/02/14 by DW

New "dashboard" feature. If your server is running at aggregator.mydomain.com, if you go to:

http://aggregator.mydomain.com/dashboard

You'll get a real-time readout of what your aggregator is doing.

The HTML source for the dashboard page is in dashboard.opml in the opml folder in the repository.

Docker

There is an experimental Docker installer. Notes about using it are on the wiki.

Amazon S3, Heroku

When we started developing River4, we were targeting Heroku, because it was so easy and inexpensive to start with. They have since changed their pricing, so it's not as attractive, so we're now recommending the filesystem configuration, above.

  1. The howto with instructions for installing River4 using Amazon S3 for storage.

  2. Heroku How To -- get a Heroku server running with Fargo Publisher, the back-end for Fargo.

  3. Bare-bones Heroku do -- checklist for setting up a Heroku server running Node.js from a Mac desktop.

Thanks!

Thanks to two developer friends, Dan MacTough and Eric Kidd, who helped this Node.js newbie get this app up and running.

Specifically thanks to Dan for writing the excellent feedparser and opmlparser packages that are incorporated in River4.

Notes

  1. I edit code in an outliner, which is then turned into JavaScript. The "opml" folder in the repository contains the versions of the code that I edit. The comments are stripped out of the code before it's converted to raw JS, so there is information for developers in the OPML that isn't in the main files (though all the running code is in both).

  2. The first released version is 0.79. They will increment by one one-hundredth every release. At some point I'll call it 1.0, then subsequent releases will be 1.01, 1.02 etc.

Questions, comments?

Please post a note on the River4 mail list.

More Repositories

1

concord

Core outliner
JavaScript
440
star
2

river5

A river-of-news RSS aggregator in JS running in Node.
JavaScript
428
star
3

nodeRunner

nodeRunner is a JavaScript app that runs scripts every second, minute, hour or day, each group in its own folder.
JavaScript
185
star
4

1999-project

Docs, support and sample code for the 1999 server and app project.
JavaScript
158
star
5

myWordEditor

A simple silo-free blogging tool that creates beautiful essay pages.
JavaScript
156
star
6

pagePark

I wrote this simple Node.js folder-based HTTP server that serves static and dynamic pages for domains I've bought but not yet used. Then I kept going...
JavaScript
136
star
7

Scripting-News

I'm starting to use GitHub for work on my blog. Why not? It's got good communication and collaboration tools. Why not hook it up to a blog?
HTML
112
star
8

nodeStorage

A simple storage system based on Twitter identity implemented in Node.js.
JavaScript
102
star
9

tweetsToRss

A node.js app that periodically reads a Twitter account and generates an RSS feed from it.
JavaScript
86
star
10

reallysimple

A Node package that reads RSS, Atom and RDF feeds and calls back with a simple, consistent JavaScript object.
JavaScript
82
star
11

fargoPublisher

Fargo Publisher is a node.js app that connects to Fargo to publish a folder of HTML docs.
JavaScript
71
star
12

xml-rpc

XML-RPC client and server in JavaScript.
JavaScript
60
star
13

myWord

An easy open source way to create nice-looking web pages for essays.
HTML
58
star
14

feedRead

Read a feed and call back with a JavaScript object.
JavaScript
56
star
15

feedsForJournalists

An open source project to create a great list of feeds for journalists to follow.
45
star
16

artDownloader

A collection of great art in a folder. Download and point your screen saver at the folder for a live art show.
JavaScript
38
star
17

frontier

C
38
star
18

outlineBrowser

JavaScript code to display JSON outlines.
JavaScript
37
star
19

publicfolder

A Node app that runs on your desktop and keeps an S3 location in sync with a folder on a local disk.
JavaScript
34
star
20

feedBase

A project to get feeds into a base.
JavaScript
33
star
21

rssToSlack

A JavaScript app that reads a set of feeds and posts the new items to a Slack channel. Runs in Node.js.
JavaScript
27
star
22

opmlPackage

Node and browser-based code that helps developers support OPML in outliners, feed readers and renderers.
JavaScript
26
star
23

feedToMasto

Node app that checks a list of feeds periodically, post new items to Mastodon.
JavaScript
26
star
24

trex

OPML and JavaScript-based content management
C
25
star
25

riverBrowser

A JavaScript toolkit that displays a river of news
JavaScript
25
star
26

reader

JavaScript package for feed reading and aggregating.
JavaScript
22
star
27

utils.js

A library of JavaScript utility routines that are patterned after Frontier verbs
JavaScript
22
star
28

drummerSupport

Support for Drummer users.
19
star
29

listicle

A new version of the software used in the Cluetrain listicle
19
star
30

fargoTemplates

The templates for the core types in Fargo 2. You are free to clone them, modify the result and redistribute.
18
star
31

githubpub

A Node app that serves from GitHub repositories.
JavaScript
18
star
32

betterWebSocketsDemo

WebSockets demo app in JavaScript, both client and server.
HTML
16
star
33

feedParserDemo

A demo of Dan MacTough's feedparser package for Node.
JavaScript
15
star
34

upstreamer

A Node.js app that keeps a folder backed up on Amazon S3.
JavaScript
15
star
35

interAppComm

Demonstrates a simple way of doing interapplication communication in JavaScript using localStorage.
15
star
36

Icon-Chooser

An icon chooser for Font Awesome icons, running in Bootstrap 2.
15
star
37

feedlandSupport

A place to share and discover feeds.
14
star
38

myLogseqBlog

A cross-platform Node app that publishes a LogSeq journal as a blog via Drummer
JavaScript
14
star
39

opml.org

A repository to back up the opml.org website.
JavaScript
14
star
40

macwrite

A simple demo app for nodeStorage.
HTML
13
star
41

Mastodon-API

I'm working on connecting to the Mastodon-API, getting help from friends who have been down this path.
JavaScript
13
star
42

oldSchoolBlog

Blogging in the ways of the old school.
JavaScript
12
star
43

instantOutlines

Sharing outlines between apps using GitHub as an intermediary.
12
star
44

likes

A simple likes server for the web running in Node.
JavaScript
11
star
45

drummerRFC

A place to post RFCs for people who use and develop in Drummer.
11
star
46

electricPork

An Electron app that helps you write and publish threads on Twitter.
JavaScript
11
star
47

titlelessFeedsHowto

A simple feed item viewer that works with titled or titleless items.
11
star
48

myRoute53

A simple utility that creates a JSON file with a map of your Amazon Route53 names. Runs in Node.js.
JavaScript
10
star
49

wp2opml

10
star
50

rss

JavaScript code to build an RSS feed from a standardized structure.
JavaScript
10
star
51

opml

A repo in transition
9
star
52

urlShortener

A JavaScript URL shortener running in Node.js.
JavaScript
9
star
53

feedland

The source code for the NPM feedland package.
JavaScript
9
star
54

subscriptionListCleanup

Read an OPML subscription list, and loop over all the feeds and only pass on the ones that are reachable and parseable.
9
star
55

docServer

Browse scripting verbs in a web app.
JavaScript
8
star
56

1999client

A client app for 1999.io, in JavaScript, using WebSockets.
JavaScript
8
star
57

oldSchoolNightly

Uploads JSON, OPML, RSS and HTML files from Scripting News to the repository on GitHub, every night at midnight.
JavaScript
7
star
58

s3folder

A Frontier tool that keeps a folder on your hard drive in synch with a location in the S3 hierarchy. Also a demo of using GitHub to manage a Frontier tool, a task previously thought to be impossible! :-)
7
star
59

tweets.opml.org

A directory of tweets.opml files for people using tweets.opml.org.
6
star
60

feeder

A set of services that do feed reading for Drummer scripts.
6
star
61

ioServer

A server and reader for outlines that update in real time.
JavaScript
6
star
62

utils

All the JavaScript utility routines I use across all my apps, both in the browser and in Node.
JavaScript
6
star
63

opmlToJs

opmlToJs makes it easy to read and write OPML files in Node apps.
JavaScript
6
star
64

english

The server behind the English editor.
JavaScript
6
star
65

superSync

Keep folders in sync with Amazon S3 locations.
6
star
66

xmlViewer

Try to get a browser to view an RSS feed these days. They just won't do it. This app does.
HTML
6
star
67

tweetFeedSupport

Twitter + Markdown âž™ RSS (feed readers)
5
star
68

bookmarkletMaker

A browser-based app that makes bookmarklets easier to make
HTML
5
star
69

blue.feedland

A place to discuss and develop an app that connects social media apps via feeds.
JavaScript
5
star
70

appServer

Factored code that was appearing in all my servers.
JavaScript
5
star
71

rssSpec

A GitHub repo with the source of the RSS 2.0 spec website at cyber.harvard.edu.
HTML
5
star
72

drummerCms

A shell for Old School to connect it with Drummer. Released so other outliners can hook up to Old School for blogging.
JavaScript
5
star
73

folderToJson

Generates a JavaScript object (or JSON text) that represents the structure of a folder.
JavaScript
4
star
74

mastodon

The beginning of support for Mastodon in DaveLand.
JavaScript
4
star
75

metaweblog

Client and server implementation of the Metaweblog API in JavaScript.
JavaScript
4
star
76

textcasting

An HTTP server that can post messages to Mastodon, Bluesky and WordPress via REST call. A bridge betw web writing tools and various places people want to post their writing to.
JavaScript
4
star
77

mail

One place to send mail from all my Node apps.
JavaScript
4
star
78

electronLand

My container for Electron apps that use nodeStorage for identity.
JavaScript
4
star
79

worldOutline

The JavaScript port of the World Outline software.
JavaScript
4
star
80

github

Read and write files to a GitHub repository
JavaScript
4
star
81

scripting

Heh I found a way to add stuff to my GitHub profile page. Let's see how this sucker works.
4
star
82

opmlToGitHub

A Node app that reads an OPML file, converts it to Markdown, and uploads it to GitHub.
JavaScript
4
star
83

everyMinute

Runs a JavaScript callback with setInterval, at the top of every minute, with no drift.
JavaScript
4
star
84

http

The heart of a Node-based web server to be included in other apps. I got tired of writing the same code over and over.
JavaScript
4
star
85

kimParker

3
star
86

checkFeedsInOpml

A utility that checks if the feeds in an OPML list are accessible
JavaScript
3
star
87

es6ModulesHelloWorld

A minimal app that uses modules as defined in ES6.
JavaScript
3
star
88

jsPreprocessor

A simple JavaScript pre-processor to help get your project started.
JavaScript
3
star
89

fargocms

The CMS built into Fargo, as a standalone Node.js package
JavaScript
3
star
90

s3BigUpload

Demo app for streamed uploads to S3 in Node/JavaScript.
JavaScript
3
star
91

s3

Routines that simplify the interface to Amazon S3
JavaScript
3
star
92

chat

A simple extensible JavaScript chat network
JavaScript
3
star
93

scripting.github.io

HTML
3
star
94

opmlCloud

A server and desktop software that emulates Drummer's instant outlining protocol.
JavaScript
3
star
95

aceEditorDemo

I needed good demo code for the Ace editor.
JavaScript
3
star
96

persists

Persistence for JavaScript objects in Node.
JavaScript
3
star
97

twitterHelloWorld

How to say Hello World via the Twitter API from browser-based JavaScript.
JavaScript
3
star
98

riverToTweets

A JavaScript app that reads any number of "river" files and streams them as posts to Twitter.
JavaScript
3
star
99

filesystem

Nice-to-have file system routines for JavaScript/Node.
JavaScript
3
star
100

batchLoader

Ping me to download stuff from S3 into local folders.
JavaScript
3
star