---
name: "Wiki::Toolkit::Plugin::JSON"
section: "3pm"
platform: "linux"
package: "libwiki-toolkit-plugin-json-perl"
version: "0.05-1.1"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/Wiki::Toolkit::Plugin::JSON"
---

# Wiki::Toolkit::Plugin::JSON(3pm)

## 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 \<EMARTIN@cpan.org\>. Originally by Kake Pugh \<kake@earth.li\>.

## 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.
