Displaying a dynamic publications list from a repository on a staff profile page

I repeat this to people all the time. If I write it down here, then I only have to share a link ;-)

RSS feeds are a very popular way of syndicating content from one source website to another subscribing website.

Some university websites, such as the Institutional Repository or University blogs, produce RSS feeds but not all university websites can easily subscribe to them. However, by using ‘feed2js’, any website can display a syndicated news feed in just a few steps. This way, you can embed your blog or publication list in Blackboard or on your personal web profile, for example.

Creating a publications list from the repository

We use EPrints as our Institutional Repository. EPrints provides news feeds (RSS, RSS2, Atom) for every search query. Therefore you can create a news feed of publications by Faculty, School, Department, Research Team or Staff member. Having created the news feed, you can then display that list of publications on any web page of your choice.

An example staff profile using Feed2JS

Click on the image to see a real example

The advantage of this is that every time you deposit something new in the repository, the list will automatically update on your chosen web page. You never need to edit your publications list again.

Steps to embedding your feed

Create your publications list. Use the Advanced Search page to construct your publications list. If you want a personal publications list, simply search for your name. If you have a common name, your search may return publications that belong to someone else. In that case, you should keyword all your repository items with a unique ‘key’, such as ‘q73g’. You can then search for that keyword and your name and only your items will be returned by the search.

Search results

Copy your feed URL. Typically, you need to right-click on the orange RSS 2.0 icon on the search results page and copy the link.

Go to http://feed2js.org/index.php?s=build and paste your link into the URL box. If you are a member of the University of Lincoln, contact me for a better link, hosted at the university.


From this point on, you can click the ‘Preview Feed’ button at any time to see what your feed will look like. Read the listed options carefully. They allow you to choose whether you wish to display the title of the feed; whether you wish to show the full content of the feed or just the titles; whether you wish to show images or video content in the feed (if there is any in the original source), etc. Experiment by previewing the feed to see what looks best for you.

Previewing a feed

Previewing a feed

When you are happy with your feed, click the ‘Generate Javascript’ button. Copy everything inside the Get Your Code Here box. Note how the box scrolls. Copy it all!

Example generated javascript

Example generated javascript

Paste the javascript into the appropriate place in your website’s HTML code. Save your web page and examine your work. The embedded feed should fit in well with your existing web site design and use the colour scheme you have chosen for your site. If you wish to make the publications list stand out from your web page, you should read the page about dressing up your output.

There is no more you need to do. The feed will automatically update every hour or so with any new content from the source website.

Creating a PDF or eBook from an RSS feed

This morning, I found myself on Baseline Scenario, a well-known site which discusses the economic crisis. I noticed that the authors of the site had laboured over producing a PDF version for each month of their archive, by copying and pasting to Word and producing a PDF. There’s a nicer way of doing this, I think. When you’ve done it once, it should take you no more than ten minutes to go through the whole process any other time.

  1. WordPress provides a way to filter content by date. In our example, we’ll grab the RSS feed from the first month of publications: http://baselinescenario.com/2008/09/feed The permalink structure is clear enough on WordPress. For Blogger, it’s nowhere near as intuitive.
  2. The feed will display the articles in descending date order. When you are reading the PDF or eBook version, you don’t want to read the last article first, as you would on the website. To reverse the order of the feed, use Yahoo Pipes (or for WordPress, see @mhawksey’s comment below). You can clone my example. If you’ve not used Yahoo Pipes before, don’t worry. You just need a Yahoo account. The example I give is as simple a pipe as you will see and should make sense as soon as you look at it.
  3. Once you’ve created the pipe of the feed in ascending order, save and run the pipe. Look for the RSS icon and copy the pipe’s RSS link, which should look like this: http://pipes.yahoo.com/pipes/pipe.run?_id=cb438b51b2819eb1f4f5ec6f10daf09e&_render=rss
  4. Next, go to FeedBooks. Sign up for an account if you don’t already have one. Now, we create a Newspaper.
  5. Click on News in the menu and then on Create a newspaper. Give it a name and tag it. In our example, we’ll call it Baseline Scenario Archive.
  6. Click on ‘Add a RSS feed’. Give it a name (in our case ‘September 2008′)  and paste your RSS feed into the box. Once it’s found and accepted your feed, click ‘Publish’.
  7. You can now click on the name of the specific feed and you’ll be presented with a page that offers an ePub, Kindle and PDF versions of your feed. Here’s the Baseline Scenario September 2008 example.
  8. That’s it. You can do it with whole sites, too, if you like. Here’s one I did earlier (Blogger). The only thing you need to remember is to ensure that the RSS feed contains all the items you’re looking for. For the Blogger site, the source feed looks like this: http://www.blogger.com/feeds/27481991/posts/default?max-results=1000 A thousand items is more than enough to capture this site for quite some time. For WordPress, the site owner has to change their Reading Settings to include sufficient items. For the Baseline Scenario, they need to set this at a number high enough to ensure that a month’s worth of posts are included. I would just set it at 3000 and then forget about it. It would mean the entire site could be captured this way for the next year or so.

Having problems? Got a question? Leave a comment.

PubSubHubbub: Realtime RSS and Atom Feeds

It’s made Dave Winer happy, which is no easy task, so I think PubSubHubbub is worth mentioning here. If it’s working as it should, this post should appear in my Google Reader, almost immediately after I’ve published it. That’s because PubSubHubbub is “a simple, open, server-to-server web-hook-based pubsub (publish/subscribe) protocol as an extension to Atom [and RSS].” My blog feed is managed by FeedBurner which has already implemented the new protocol, as has Google Reader FriendFeed. They should therefore ‘talk’ to each other in realtime. Watch the video and you’ll see how it works. It’s pretty straightforward. It just takes a company the size of Google to push it through to adoption. The engineers say they were using it like Instant Messaging the night before the demo, which says something about how responsive this is. Technically, it should be another challenge to Twitter in that it allows for a distributed method of near realtime communication.  I’d like to see that. I feel like an idiot communicating within the confines of  Twitter, sometimes.

Using Google Reader as an OPML editor and feed blender

Last week, Google announced a new feature for Google Reader that is worth noting here, if only because it will make my work a little easier. They’ve introduced the idea of ‘bundles’ of feeds that anyone can create and share via Google Reader, email, OPML or as an Atom feed. There was a bit of confusion at first about what happened after you create a bundle and shared it. Dave Winer, based on an exchange with Kevin Marks, thought that the bundles were dynamic ‘reading lists’ based on a proprietary format. This isn’t the case but it’s worth reading Dave Winer’s original post with comments, and his follow up post which clarifies what reading lists are (technically, they’re ‘subscription lists‘ – part of the OPML 2.0 specification).

Anyway, what Google has introduced in this update to their feed reader is still very useful and functionally quite similar to the reading list concept. It allows me to group multiple feeds into a set/reading list/bundle and then share that set of feeds with my Google Reader ‘friends’, email a link to a web page of that bundle or download an OPML file of the bundle. This last feature is particularly cool because it means your bundle is portable via the OPML open standard and can be shared beyond Google Reader.

Build your bundle

Ways to share it

Email a link

Read it, subscribe to the feed or download the OPML

Effectively, Google Reader has become a simple OPML editor, allowing anyone to gather feeds together and export them as an OPML file. Even better, your bundle is also available as a ‘blended’ Atom feed, achieving something similar to Dave Winer’s notion of a dynamic ‘reading list’ where the creator of the bundle can add or remove feeds and the Atom feed is dynamically updated to reflect those changes. Until now it was a bit of a hassle to create a blended feed from multiple sources. Yahoo! Pipes is a powerful way of doing it but Pipes isn’t for everyone and I’ve found the feeds it produces are not always available and compatible with other feed reading applications. Recently, I’ve been creating ‘digests’ in feed.informer, but I’m more inclined to use Google Reader now as it’s where I do all my feed reading and I know the application well. Note that you don’t have to remain subscribed to the feed in Google Reader in order for a bundle to remain persistent either. You can create a bundle from feeds you later unsubscribe from in your reader and the feeds are not deleted from the bundle.

There are two obvious uses for all of this. First, a teacher could bundle a reading list of feeds and share them with students via Google Reader, as a simple web page, an OPML file or dynamic Atom feed. Second, using the Atom output, it’s now easy for anyone to create a lifestream feed of all their activity on the web and embed it on their web page or just archive it in Google Reader or elsewhere.

Open Education Project Blueprint

Each participant on the Mozilla Open Education Course, has been asked to develop a project blueprint. Here is the start of mine. It’s basically a ‘Personal Learning Environment’ (PLE)1and I’m going to try to show how WordPress MU is a good technology platform for an institution to easily and effectively support a PLE. I’m going to place an emphasis on ‘identity’ because it’s something I want to learn more about.

Short description

University students are at least 18 years old and have spent many years unconsciously accumulating or deliberately developing a digital identity. When people enter university they are expected to accept a new digital identity, one which may rarely acknowledge and easily exploit their preceding experience and productivity. Students are given a new email address, a university ID, expected to submit course work using new, institutionally unique tools and develop a portfolio of work over three to four years which is set apart from their existing portfolio of work and often difficult to fully exploit after graduation.

I think this will be increasingly questioned and resisted by individuals paying to study at university. Both students and staff will suffer this disconnect caused by institutions not employing available online technologies and standards rapidly enough. There is a legacy of universities expecting and being expected to provide online tools to staff and students. This was useful and necessary several years ago, but it’s now quite possible for individuals in the UK to study, learn and work apart from any institutional technology provision. For example, Google provides many of these tools and will have a longer relationship with the individual than the university is likely to.

Many students and staff are relinquishing institutional technology ties and an indicator of this is the massive % of students who do not use their university email address (96% in one case study). In the UK, universities are keen to accept mature, work-based and part-time students. For these students, university is just a single part of their lives and should not require the development of a digital identity that mainly serves the institution, rather than the individual.

How would it work?

Students identify themselves with their OpenID, which authenticates against a Shibboleth Service Provider.2 They create, publish and syndicate their course work, privately or publicly using the web services of their choice. Students don’t turn in work for assessment, but rather publish their work for assessment under a CC license of their choice.

It’s basically a PLE project blueprint with an emphasis on identity and data-portability. I’m pretty sure I’m not going to get a fully working model to demonstrate by the end of the course, but I will try to show how existing technologies could be stitched together to achieve what I’m aiming for. Of course, the technologies are not really the issue here, the challenge is showing how this might work in an institutional context.

I think it will be possible to show how it’s technically possible using a single platform such as WordPress which has Facebook Connnect, OAuth, OpenID, Shibboleth and RPX plugins. WordPress is also microformat friendly and profile information can be easily exported in the hCard format. hResume would be ideal for developing an academic profile. The Diso project are leading the way in this area.

Similar projects:

UMW Blogs?

Open Technology:

OpenID, OAuth, RPX, Shibboleth, RSS, Atom, Microformats, XMPP, OPML, AtomPub, XML-RPC + WordPress

Open Content / Licensing:

I’ll look at how Creative Commons licensing may be compatible with our staff and student IP policies.

Open Pedagogy

No idea. This is a new area for me. I’m hoping that the Mozilla/CC Open Education course can point me in the right direction for this. Maybe you have some suggestions, too?

  1. See Personal Learning Environments: Challenging the dominant design of educational systems []
  2. See the JISC Review of OpenID. []

Addicted to feeds

I’ve been a long time consumer of news feeds and spend a lot of time reading the web via 200+ feeds in Google Reader. More recently, and largely as a result of working on WriteToReply, I’ve become just as addicted to publishing feeds from any data end point I can find.

WordPress makes this quite easy for developers, providing a whole load of functions and template tags for feeds. For the rest of us, there’s also documentation which is useful is you’re wondering what kinds of feeds can be generated from a basic WordPress site.

All the examples below, assume you’re using ‘pretty URLs’. If your URLs are something like http://example.com/?p=123 then the same principles apply but you’ll use the format /?feed=feed_type i.e. http://example.com/?feed=rss2 The documentation shows full examples.

So, here are the basic content feeds. RSS is RSS version 0.92 and RDF is RSS version 1.0, if you were wondering.

http://example.com/feed/
http://example.com/feed/rss/
http://example.com/feed/rss2/
http://example.com/feed/rdf/
http://example.com/feed/atom/

It’s also pretty straightforward to create a feed from a category or tag

http://example.com/category/my_category/feed/
http://example.com/tag/my_tag/feed/

You can also create feeds from combined tags

http://example.com/tag/tag1+tag2+tag3/feed/

And we know that a feed is available for site comments

http://example.com/comments/feed/

and it’s simple to grab a feed of comments from a single post by appending /feed/ to the end of the post permalink.

http://example.com/2009/01/01/my-latest-post/feed

You can also create a feed of a single post itself, by appending '?withoutcomments=1' to the end of the URL

http://example.com/2009/01/01/my-latest-post/feed/?withoutcomments=1

There is a feed for each author of the blog

http://example.com/author/joss/feed

but alas, as far as I know, no feed for the comments by any particular person.

You can also do something fancy with dates

http://example.com/2009/feed
http://example.com/2009/01/feed
http://example.com/2009/01/15/feed

and one of my favourite types of feed is from a search

http://example.com/?s=search_term&feed=rss2

Now all of this is well and good, but how many readers are going to know or care about constructing the various types of feeds available? Fortunately, it’s possible to make many of these feeds auto-discoverable either by adding some simple code to your theme’s header.php or installing a plugin.

By default, two feeds are auto-discoverable on your WordPress site: An atom and rss2 feed of your posts.

By using the Extra Feed Links plugin, you can make your comments, category, tag, author and search feeds autodiscoverable.

It’s also got a useful template tag that allows you to show the feed links in your theme, making the discovery of feeds even easier.  I created a simple widget for the plugin to display the feed and an RSS icon in the sidebar

Here’s the code. Let me know where it could be improved as I just hacked it together from looking at other widgets.

<?php
function widget_extrafeeds_register() {
function widget_extrafeeds($args) {
extract($args);
?>
<br />
<?php echo $before_widget;
echo $before_title;
echo $widget_name;
echo $after_title; ?>
<ul class="sidebarList">
<?php extra_feed_link(); ?> <?php extra_feed_link('http://path/to/your/feed/icon/feed.png'); ?>
</ul>
<?php echo $after_widget; ?>
<?php
}
register_sidebar_widget('Extra Feeds',
'widget_extrafeeds');
register_sidebar_widget('Extra Feeds','widget_extrafeeds');}
add_action('init', widget_extrafeeds_register);
?>

To get this to work with the plugin, you need to add this to the very bottom of the plugin’s main.php file

// widget support
require(dirname(__FILE__) . '/widget.php');

Like I said, if anyone can improve on this, do let me know. Also note that you’ll need to point the URL in the widget to a feed icon. A lot of themes include them in their /images/ directory, which makes it easy.

By using the widget or template tag, you can have these appearing on the relevant pages.

Try it by using http://writetoreply.org/tags :-)

If you’re interested in how to add category and tag auto-discovery feeds to your theme’s source code, try adding this to your header.php

<?php if (is_category()) { ?>
<link rel="alternate" type="application/atom+xml" title="<?php bloginfo('name'); ?> &amp;raquo; <?php single_cat_title(''); ?> Atom Feed" href="<?php echo
get_category_feed_link(get_query_var('cat'), 'atom'); ?>" />
<?php } ?>

<?php if (is_tag()) { ?>
<link rel="alternate" type="application/atom+xml" title="<?php bloginfo('name'); ?> &amp;raquo; <?php single_tag_title(''); ?> Atom Feed" href="<?php echo
get_tag_feed_link(get_query_var('tag_id'), 'atom'); ?>" />
<?php } ?>

<?php if (is_category()) { ?>
<link rel="alternate" type="application/rss+xml" title="<?php bloginfo('name'); ?> &amp;raquo; <?php single_cat_title(''); ?> RSS2 Feed" href="<?php echo
get_category_feed_link(get_query_var('cat'), 'rss2'); ?>" />
<?php } ?>

<?php if (is_tag()) { ?>
<link rel="alternate" type="application/rss+xml" title="<?php bloginfo('name'); ?> &amp;raquo; <?php single_tag_title(''); ?> RSS2 Feed" href="<?php echo
get_tag_feed_link(get_query_var('tag_id'), 'rss2'); ?>" />
<?php } ?>

<?php if (is_category()) { ?>
<link rel="alternate" type="application/rdf+xml" title="<?php bloginfo('name'); ?> &amp;raquo; <?php single_cat_title(''); ?> as RDF data" href="<?php echo
get_category_feed_link(get_query_var('cat'), 'rdf'); ?>" />
<?php } ?>

<?php if (is_tag()) { ?>
<link rel="alternate" type="application/rdf+xml" title="<?php bloginfo('name'); ?> &amp;raquo; <?php single_tag_title(''); ?> as RDF data" href="<?php echo
get_tag_feed_link(get_query_var('tag_id'), 'rdf'); ?>" />
<?php } ?>

I learned this from the author of this related plugin, which is similar but not quite as powerful as the Extra Feed Links plugin.

Finally, if you use FeedBurner, beware that it breaks some of the above feeds. One fix for ensuring that tag and category feeds continue to work as they should is to modify the FeedBurnerFeedSmith plugin as noted here. Simply change the line

is_feed() &amp;&amp; $feed != 'comments-rss2' &amp;&amp; !is_single() &amp;&amp;

to read

is_feed() &amp;&amp; $feed != 'comments-rss2' &amp;&amp; !is_single() &amp;&amp; !is_tag() &amp;&amp;

That’ll do for now. I intend to learn more about the RSS and Atom specifications over the next few weeks and will post anything I think relevant here. If you can add anything to this post, please do leave a comment. Thanks.

Blogging without the opinion

I’m pretty busy at the moment and have started a couple of recent blog posts but haven’t got around to finishing what I wanted to say.

One thing I do without fail is post to del.icio.us several times a day, using it as a note book for information I’ve found and intend to come back to.

You can see my recent del.icio.us posts on the front page of this blog.  Alternatively, here’s my tag cloud. Click the image for the real thing.

Joss\' tag cloud

I periodically scan about 100 news feeds a day using Google Reader, customised with an extension in Firefox, mostly relating to technology, open source software and educational uses of technology.  If I see anything of interest, I post it to del.icio.us.

A Firefox tab displaying my news feeds

Social bookmarking is kind of ‘blogging’ minus the opinion, right?