10     eval "require MediaWiki::API; require YAML::XS;" or do {
 
  11         print "You have to install some modules via CPAN to run this:\n";
 
  12         print "   sudo cpanp MediaWiki::API YAML::XS\n";
 
  18 use YAML::XS qw(Dump);
 
  19 use Test::More 'no_plan';
 
  23 update-wiki-pages - Scrape the wiki for key/value wiki description pages
 
  27     perl script/misc/update-wiki-pages config/wiki_pages.yml 
 
  31     prove -e 'perl script/misc/update-wiki-pages' config/wiki_pages.yml
 
  35 # Get the command-line options
 
  36 Getopt::Long::Parser->new(
 
  37     config => [ qw< bundling no_ignore_case no_require_order pass_through > ],
 
  39     'h|help' => \my $help,
 
  45 help() unless $ARGV[0];
 
  48 my $mw = MediaWiki::API->new();
 
  49 ok($mw, "Got a MediaWiki API");
 
  50 $mw->{config}->{api_url} = 'http://wiki.openstreetmap.org/w/api.php';
 
  53 my (%feature, %count);
 
  55 # This is what you get on:
 
  56 ## http://wiki.openstreetmap.org/w/index.php?search=Template:KeyDescription&fulltext=Search&fulltext=Search
 
  57 for my $lang ('', map { "${_}:" } qw[ Pt Fi De It HU Cz Fr RU Pl ]) {
 
  58     ok(1, "  Templates for language '$lang'");
 
  61     ok(1, "    Getting key pages");
 
  62     my $cnt = stick_content_in_hash("key", "Template:${lang}KeyDescription", \%feature);
 
  63     ok(1, "    Got $cnt key pages");
 
  67     ok(1, "    Getting value pages");
 
  68     $cnt = stick_content_in_hash("tag", "Template:${lang}ValueDescription", \%feature);
 
  69     ok(1, "    Got $cnt value pages");
 
  70     $count{value} += $cnt;
 
  73 ok(1, "Got a total of $count{$_} ${_}s") for qw[ key value ];
 
  76 open my $out, ">", $ARGV[0] or die "Can't open file '$ARGV[0]' supplied on the command line";
 
  77 say $out "# THIS FILE IS AUTOGENERATED WITH THE script/misc/update-wiki-pages";
 
  78 say $out "# PROGRAM DO NOT MANUALLY EDIT IT";
 
  80 say $out Dump(\%feature);
 
  85 sub stick_content_in_hash
 
  87     my ($key, $title, $hash) = @_;
 
  88     my $ukey = ucfirst $key;
 
  90     my $space_to_underscore = sub {
 
 101             my (@links) = @$links;
 
 102             ok(1, "    ... got " . scalar(@links) . " more links");
 
 103             for my $link (@links) {
 
 105                 my $title = $link->{title};
 
 107                 if ($title =~ /^$ukey:(?<key_name>.*?)$/) {
 
 109                     $hash->{en}->{$key}->{ $space_to_underscore->($+{key_name}) } = $title;
 
 110                 } elsif ($title =~ /^(?<lang>[^:]+):$ukey:(?<key_name>.*?)$/) {
 
 111                     $hash->{lc $+{lang}}->{$key}->{ $space_to_underscore->($+{key_name}) } = $title;
 
 122     my ($title, $callback) = @_;
 
 123     my $articles = $mw->list(
 
 126             list => 'embeddedin',
 
 128             eifilterredir => 'nonredirects',
 
 129             # Doesn't work for De:* and anything non-en. Odd.
 
 130             # einamespace => '0|8',
 
 138     ) || die $mw->{error}->{code} . ': ' . $mw->{error}->{details};
 
 145     Pod::Usage::pod2usage(
 
 146         -verbose => $arg{ verbose },
 
 147         -exitval => $arg{ exitval } || 0,