gRSShopper is an application that allows you to define your own community of RSS feeds, aggregates content from those feeds and organizes it, and helps you integrate that content into your own posts, articles and other content.

It is a research database, a blogging engine, a community website, a content management system, and ultimately, a personal learning environment.

The software is written in a computer language called Perl and is loaded onto web servers. It uses a database to manage your links, posts and other content. You access it with your web browser.

The concept and principles behind gRSShopper have been described in various papers, including most importantly An Introduction to Connective Knowledge, E-Learning 2.0, Semantic networks and Social Networks, Learning Networks and Resource Profiles.


gRSShopper is intended as a personal web environment, for use by individuals and small groups. It is not intended to aggregate the entire web (though if you want that, it can be used to harvest from Technorati, Feedster and the like).

That said, instances of gRSShopper interact with each other. Content posted on your own installation may appear on other installations (depending on whether their owners want to see your content).

The idea behind gRSShopper is to view the web as a community of communities, rather than as a single, undifferentiated mass. It allows you to select and highlight commentary from people who are close to you, who are interested in the same things as you, rather than from people across the web.

You may find, as I have, that gRSShopper becomes the website you open when you log on to the web and the window through which you interact with other people for the rest of the day. It is your reading platform, your conversation platform, and your writing platform. It is your library, and it is your personal portfolio.

System Overview

gRSShopper is composed of the following major subsystems:

Login and person management - owners and guests on an gRSShopper installation have a personal user account. They access gRSShopper through a login based on this account. You, as the owner of the gRSShopper installation, can create, edit and delete content on the system. Your guests may be given permission to read and write different types of content. Note that it is far more preferable for each person to have their own gRSShopper. But if you want several people to work with one gRSShopper instance, that works.

Feed manager and aggregator - content from your community is brought into gRSShopper using an aggregator. The aggregator harvests content from RSS, Atom, JSON, Twitter, and OAI feeds. Other types of content aggregation are being added. You maintain a list of feeds, and can add, drop or retire feeds as you desire. Harvesting happens automatically, in the background, so once you set up your feeds you don't have to worry about it (see cron.

Reader - as content comes into gRSShopper it is analyzed and organized. This allows you (and your visitors) to view content from various perspectives. gRSShopper can display the most recent content, the most popular, the most cited, content from a given topic, and even content from your community organized as a conversation, even if the participants are posting on different websites.

Writer - gRSShopper allows you to create various types of content for your own use or for display on your website, including blog posts, event listings, articles and essays, web pages, and more. Your guests may also be allowed to post content to your site. gRSShopper supports document, audio and video file uploads, and can be used therefore to create podcasts or multimedia feeds. The left hand pane offers you the opportunity to create a wide variety of content.

Publisher - the content in your installation can be displayed in a variety of ways, including as web pages, RSS feeds, email newsletters, and more. The publishing engine dynamically organizes content from your database and can deliver material live or as static web pages. gRSShopper supports a subscription service that allows your readers to customize their RSS feeds, personal web pages, or email newsletters.

Login and Person Management

The purpose of the login system is to control access to your system. gRSShopper was originally designed to work with a decentralized login system, OpenID, but the web has moved on. Right now it supports userid and password, but I'm exploring alternatives.

gRSShopper manages your personal profile, which you can then share with other people. Ot supports vCard and (coming) FOAF. Part of the purpose of a FOAF file is to help you keep a list of your friends. In gRSShopper, your list of friends plays an important role in the system. For example, gRSShopper will look at what your friends are reading and make suggestions to you. You can also give your friends extra privileges on your system (such as posting comments).

Feed manager and aggregator

gRSShopper is a fully functional XML harvester and will retrieve blog posts and news items in RSS or Atom as well as research articles distributed using OAI.

Harvesting is controlled by a feed manager and harvesting system. The feed manager allows you to create and edit a list of feeds. Depending on your settings, the harvester will use this list to harvest content from the web. Feeds are stored in a queue and can be automatically harvested at pre-set intervals, distributing the workload and ensuring a steady stream of content.

(Not yet functional) Feeds can be sorted according to how popular they are, how often they are cited, and how highly rated their content is. Poorly performing feeds can be automatically dropped from the system, based on your settings. In addition, the harvester will look at what your friends are reading and suggest new feeds to you, which you can with one click add to your harvester.

The harvester operates completely automatically (though of course you can always manually harvest a given feed or the whole lot of them). As content comes into the system, data is extracted and placed in different parts of your database. For example, the author is linked to an individual in a list of authors. Links contained in the content are stored and citations and references (to your content, and to others') are collected. Content automatically is tagged according to your specifications.

(Not yet functional) gRSShopper harvests a wider range of metadata than other harvesters and uses it to analyze and organize content. It harvests ratings metadata and adds it to what it knows about links it has previously harvested. Or it looks at educational metadata (including categories, age-ranges, and more) and connects it to the resource it describes. It spots events metadata and creates a customizable calendar. It looks for rights metadata to keep track of what content you can use and what content you can only look at. And more.


Because of the way data is stored and displayed in gRSShopper, you can read incoming content in a wide variety of ways, limited almost only by your imagination. Some of the ways currently implemented are:

Most recent - gRSShopper will display the most recent content harvested, with the newest links displayed at the top.

By feed or author - click on a feed and look at the most recent posts written in that feed or by that author.

Most popular - display and read harvested content sorted according to how many times it has been read by your visitors or subscribers, or by how many times it has been cited, or buy how highly rated it is, or by a (weighted) combination of those factors.

By topic - display and read posts on a specific topic or through a dynamic search of the database contents.

Functions: you have the option to do severeal things with the content you are reading:
- Post - the autopost function copies the information into a post editor, where you can write your own commentary aboutt whatever you're reading. gRSShopper supports WebMentions, which allows your post to appear as a comment on the other person's website (provided they allow that).
- Star - flag the post for later reading or review
- Cite - (Note yet functional) place a reference to the post into a document you are editing as a reference.

(Not yet functional) The reader functions not only as a way to look at things, but also as a bridge to import references and links into your own work. Using the gRSShopper writer, you can access various views of the reader to comment on current posts, research a paper, or schedule an event.


gRSShopper supports a rich and varied content creation environment, allowing you to create numerous types of content. As administrator, you can create and edit the following types of content (and additionally, many of these types of content are also created automatically by the system:

Author - authors are identified and created when you specify them in a post or when they are found by the harvester. You can edit author information, specifying (where necessary) a home page, description, picture and links. (The following not yet supported) You can set gRSShopper to harvest the author's FOAF or other information. You can also associate the author with an organization. Example.

Box - a box is a bit of content that may be used in many locations, such as a table of contents, copyright information, or list of active feeds. You can create and edit boxes, and easily place them into any other content. Example


Event - you can describe and link to any event, which can later be displayed as a calendar. Associate posts and other content with these events (thus, for example, you could collect all the posts about a conference in one place). Example.

Feed - you can describe and link to any feed, and use the list of feeds to manage the harvester. You can optionally upload a list of feeds from OPML. Optionally, you can display feed information and the list of posts harvested by the feed, or output the list in OPML. Example.

File - upload any file, including images, audio and multimedia. gRSShopper captures information about the file during upload and saves it automatically. Files can be associated with posts and displayed along with posts and articles. File information can be used to create podcast and other feeds.

Journal - describe and link to any journal, publication or organization that publishes content. Example.

Link - links are contents that are harvested from other sites, and are mostly created automaticaly. However, you can create and edit links as well. Example.

Page - content specifically designed to be a web page can be created; pages may be displayed either dynamically or published as static HTML, RSS or other formats (publication as static pages reduced server load; publication can be automated and triggered to occur at given time intervals or following certain actions). You are viewing this page in static format; here is the dynamic version.

Person - persons are people who have an account on your system. Information about a person may be displayed and edited (persons may opt to keep their information fully or partially private). Persons may edit their own information, including their own page on your site (note that they can use any of the features, described below, to create dynamic content on their page). Person data can be imported through mIDm and FOAF, and exported in a similar manner.

Post - a post is content you create (or that your guests create, if you allow them). Posts may be associated with events, and in turn, can reference files. There are various types of posts, each with their own editing screen and display:
- post-link - this is a small commentary, most similar to a blog post, but with additional fields to record link information. The core content of OLDaily consists of this type of post.
- post-article - this is a longer post, more like an essay or article.
- post-comment - this is a short post, usually submitted by guests, that is linked to a link or an article, and is typically a comment on that link or article.
- post-gallery - this is a photo gallery, and is associated with a set of image files. gRSShopper supports a system that automatically constructs image galleries based on the contents of this type of post. Here is an example of the post itself, an example of the gallery automatically constructed by gRSShopper, and the gallery index, also automatically constructed.
- announcements and musings - two short specialty types of posts. It is fairly easy (though not yet automatic) to create numerous additional types of posts.

Template - as the name suggests, templates are used to help with page publication. Two types of templates are used, a 'top' and a 'bottom' (sometimes called 'left'), which are affixed to a web page on publication.

Theme - a theme is a colour and image scheme that can be used with a template. Themes can be defined by the site owner and applied to any page. Themes call the CSS to be used by the site. gRSShopper supports rotating and random themes. A Javascript command allows readers to rotate themes. (Not yet supported) Readers can define their own preferred theme.

Topic - owners can create and define topics. Topics are used by gRSShopper to automatically categorize and tag links and posts. Takes consist of a regular expression or search command that defines the type of post or link to be included in the topic. Topics also define topic-specific pages or feeds. Example.

View - a view is a way of looking at data in gRSShopper. Every content type listed above has its own set of views. Views can be mixed and matched in order to crate pages and feeds with multiple content types.

For advanced users - you can define any type of content you want, define any fields you want, and associate that content with any other content you want in the gRSShopper graph.Publisher

The publisher collects information from the gRSShopper database and presents it to the reader. The publisher supports a number of content selection and formatting options thus allowing a wide range of viewing options.

As we have seen above, any type of content can be presented as, say, a web page. In additionally, any of the content listed above can be embedded into any other type of content, including web pages. This is determined by the publishing commands specified by the owner in various views.

Any content in gRSShopper can support any of the following commands:

Box - specifies the name of a box to be inserted. Any commands in the box are processed along with the page. Example: Content for box boxname not found

Keyword - specifies content to be inserted from the page. The keyword command supports a number of options,separated by semi-colons. For example:
db - specified the type of content to include
number - specified the number of items to display
expires - specifies the maximum age of the items to display, in hours
heading - how to title the list of items (in HTML format)
format - specifies the view to be used to display the contents
all - tells the system to consider all contents in the database
lookup - uses a lookup list to find content in a third table
sort - what field to use to sort the display
start - what record number (of the sorted list) to start at
none - what to display if there are no results
wrap - what to put around the list if there are results
Additionally, any other command in a keyword defines a search parameter to be used; the name of the command is an abbreviated version of the field name to search, and the value of the command specifies the search parameters (which can include regular expressions).

It should be noted that keywords are recursive, which means that a keyword can be used to generate other keywords to be processed. This creates rich, multi-layered possibilities for content.

Keylist - accesses the gRSShopper graph.

Field Commands - records (usually retrieved using a keyword command) are displayed by means of field commands; essentially, for a given type of data, gRSShopper will replace an instance of with the contents of that field.

Special commands: a list of commands, enclosed in angle brackets, supports the following specialized content:
- login options display (LOGIN_OPTIONS)
- dropdown lists from a set of options (LD_DROP) or contents of a table (DB_DROP)
- administration functions (EDIT, DELETE, SPAM) which display only to administrators - date selector popup (POPUPDATE)
- site and page information (PAGE_NAME, SITE_NAME)

Additional Information

Screen-shots are available on the Screenshots page. Code and downloads are available here.