Customizing RSS Output

From EPrints Documentation
Jump to: navigation, search

Default Feed Export Plugins

EPrints comes with three feed export plugins: ATOM (Atom.pm), RSS 1.0 (RSS.pm) and RSS 2.0 (RSS2.pm). They are export plugins that use the EPrints::Plugin::Export::Feed class. An export plugin can be used with the /cgi/latest_tool script to output results sorted by date (most recent first). For example, on a static page (such as index.xpage), the following code would show a link to an Atom feed:

<a href="/cgi/latest_tool?output=Atom">Atom</a>

The generated browse view pages (e.g.: browse by year > 2015) and search results pages include links to these default feed formats. Whether or not a feed link is shown on the browse view pages and search results pages for a particular export format is controlled by the is_feed function in EPrints::Plugin::Export::Feed class which returns 1 for "feed" export plugins. Override this function to return 0 (for example, in cfg/cfg.d/plugins.pl) if you do not want these feed links to appear on browse view and search results pages.

The maximum number of items that the latest_tool script includes in its "feed' export is controlled with the following variable set in Latest Tool Configuration file /cfg/cfg.d/latest_tool.pl:

$c->{latest_tool_modes} = {
	default => { citation => "result", max => 20}
};

If you want to export more than the max, you can increase this number in the configuration, but keep in mind that server performance may be effected since the latest_tool script needs to sort, and the link is generated and crawled by search engines for all browse view pages.

Feeds are sorted in descending order, by the date when the eprint was made live in the repository. This differs from the search result sort order "by year (most recent first)" in that the search result sort uses the publication date input into the metadata by the depositor.

How to customize RSS output to show an institution's or person's last n publications.

Warning This page contains out of date information and may no longer work or be superseded by a better technique.

The following section applies to EPrints 2. In EPrints 3, author feed links are included on the creators browse view pages.

RSS output is generated by /opt/eprints2/cgi/latest_tool (URL: http://<base_url>/perl/latest_tool). In the default configuration latest_tool will generate output for fixed searches (filters) only. These filters define both metadata fields and values searched in the archive configuration. One would have to add a filter to the archive configuration for every person or institution that would like its own RSS feed.

Instead, we add a new parameter allow_user_value to a latest_tool mode's configuration. When allow_user_value is set to "true" in the filter definition the value of the CGI parameter value will be searched for in the metadata fields that are defined in the archive configuration.

1. Edit /opt/eprints2/archives/<archive_id>/cfg/ArchiveConfig.pm's "Latest_tool Configuration" section to read:

$c->{latest_tool_modes} = {
	default => { citation => "neat" },
	person => {
		citation => "neat",
		filters => [
			{ meta_fields => [ "creators.id", "editors.id" ], value => "" }
		],
		allow_user_value => 1,
		max => 10
	},
	institution => {
		citation => "neat",
		filters => [
			{ meta_fields => [ "institutions" ], value => "" }
		],
		allow_user_value => 1,
		max => 20
	}
};


2. Alter /opt/eprints2/cgi/latest_tool (starting from line 45) to read:

if( defined $conf )
{
	my $allow_user_value = 0;
	foreach my $key (keys %{$conf} )
	{
		$citation = $conf->{"citation"} if( $key eq "citation" );
		$filters = $conf->{"filters"} if( $key eq "filters" );
		$allow_user_value = $conf->{"allow_user_value"} if( $key eq "allow_user_value" );
		$max = $conf->{"max"} if( $key eq "max" );
	}
	if ( $allow_user_value ) {
		my $value = $session->param( "value" );
		if ( defined $value ) {
			@$filters[0]->{"value"} = $value;
		}
	}
	$class.= "_".$mode;
}
...

3. Restart Apache.


Your customized RSS feeds will be located at

  • http://<base_url>/perl/latest_tool?mode=person