NAME
Wiki::Toolkit::Plugin::JSON - A Wiki::Toolkit plugin to output RecentChanges JSON.
DESCRIPTION
This is an alternative access to the recent changes of a Wiki::Toolkit wiki. It outputs JSON.
SYNOPSIS
use Wiki::Toolkit;use Wiki::Toolkit::Plugin::JSON;my $wiki = Wiki::Toolkit->new( ... ); # See perldoc Wiki::Toolkit# Set up the JSON feeder with the mandatory arguments - see# C<new()> below for more, optional, arguments.my $json = Wiki::Toolkit::Plugin::JSON->new(wiki => $wiki,site_name => 'My Wiki',site_url => 'http://example.com/',make_node_url => sub{my ($node_name, $version) = @_;return 'http://example.com/?id=' . uri_escape($node_name) . ';version=' . uri_escape($version);},recent_changes_link => 'http://example.com/?RecentChanges',);print "Content-type: application/xml\n\n";print $json->recent_changes;
METHODS
"new()"
my $json = Wiki::Toolkit::Plugin::JSON->new(# Mandatory arguments:wiki => $wiki,site_name => 'My Wiki',site_url => 'http://example.com/',make_node_url => sub{my ($node_name, $version) = @_;return 'http://example.com/?id=' . uri_escape($node_name) . ';version=' . uri_escape($version);},recent_changes_link => 'http://example.com/?RecentChanges',# Optional arguments:site_description => 'My wiki about my stuff',interwiki_identifier => 'MyWiki',make_diff_url => sub{my $node_name = shift;return 'http://example.com/?diff=' . uri_escape($node_name)},make_history_url => sub{my $node_name = shift;return 'http://example.com/?hist=' . uri_escape($node_name)},);
"wiki" must be a Wiki::Toolkit object. "make_node_url", and "make_diff_url" and "make_history_url", if supplied, must be coderefs.
The mandatory arguments are:
- •
-
wiki
- •
-
site_name
- •
-
site_url
- •
-
make_node_url
- •
-
recent_changes_link
"recent_changes()"
$wiki->write_node('About This Wiki','blah blah blah',$checksum,{comment => 'Stub page, please update!',username => 'Fred',});print "Content-type: application/xml\n\n";print $json->recent_changes;# Or get something other than the default of the latest 15 changes.print $json->recent_changes( items => 50 );print $json->recent_changes( days => 7 );# Or ignore minor edits.print $json->recent_changes( ignore_minor_edits => 1 );# Personalise your feed further - consider only changes# made by Fred to pages about bookshops.print $json->recent_changes(filter_on_metadata => {username => 'Fred',category => 'Bookshops',},);
If using "filter_on_metadata", note that only changes satisfying all criteria will be returned.
Note: Many of the fields emitted by the JSON generator are taken from the node metadata. The form of this metadata is not mandated by Wiki::Toolkit. Your wiki application should make sure to store some or all of the following metadata when calling "write_node":
- comment - a brief comment summarising the edit that has just been made. Defaults to the empty string.
- username - an identifier for the person who made the edit; will be used as the Dublin Core contributor for this item. Defaults to the empty string.
- host - the hostname or IP address of the computer used to make the edit; if no username is supplied then this will be used as the Dublin Core contributor for this item. Defaults to the empty string.
- major_change - true if the edit was a major edit and false if it was a minor edit; used for the importance of the item. Defaults to true (ie if "major_change" was not defined or was explicitly stored as "undef").
"rss_timestamp()"
print $json->rss_timestamp();
Returns the timestamp of the feed in POSIX::strftime style ("Tue, 29 Feb 2000 12:34:56 GMT"), which is equivalent to the timestamp of the most recent item in the feed. Takes the same arguments as recent_changes(). You will most likely need this to print a Last-Modified HTTP header so user-agents can determine whether they need to reload the feed or not.
SEE ALSO
- •
-
Wiki::Toolkit
- •
-
<http://web.resource.org/rss/1.0/spec>
- •
-
<http://www.usemod.com/cgi-bin/mb.pl?ModWiki>
MAINTAINER
Earle Martin <[email protected]>. Originally by Kake Pugh <[email protected]>.
COPYRIGHT AND LICENSE
Copyright 2003-4 Kake Pugh. Subsequent modifications copyright 2005 Earle Martin.
Copyright 2008 the Wiki::Toolkit team
This module is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
THANKS
The members of the Semantic Web Interest Group channel on irc.freenode.net, #swig, were very useful in the development of this module.