parent
870f085ff6
commit
bb1f374f69
@ -0,0 +1,79 @@ |
|||||||
|
use MediaWiki::API; |
||||||
|
use Switch; |
||||||
|
use strict; |
||||||
|
use URI::Escape; |
||||||
|
use Geo::KML; |
||||||
|
|
||||||
|
my $filename = 'ours.kml'; |
||||||
|
my $out = &create_styles; |
||||||
|
my $kml = Geo::KML->new(version => '2.2.0'); |
||||||
|
|
||||||
|
my $mw = MediaWiki::API->new(); |
||||||
|
$mw->{config}->{api_url} = 'https://jackpoint.obscuritus.ca/api.php'; |
||||||
|
|
||||||
|
my $articles = $mw->list ( { |
||||||
|
action => 'query', |
||||||
|
list => 'categorymembers', |
||||||
|
cmtitle => 'Category:Locations', |
||||||
|
cmlimit => 'max' } ) |
||||||
|
|| die $mw->{error}->{code} . ': ' . $mw->{error}->{details}; |
||||||
|
|
||||||
|
foreach (@{$articles}) { |
||||||
|
my $name = $_->{title}; |
||||||
|
my $lat; |
||||||
|
my $long; |
||||||
|
my $desc; |
||||||
|
my $page = $mw->get_page( { title => $name } ); |
||||||
|
if($page->{'*'} =~ m/.*Template:Location.*/){ |
||||||
|
my @locs = split /\|/ , $&; |
||||||
|
foreach(@locs) { |
||||||
|
my @tokens = split(/=/, $_); |
||||||
|
switch($tokens[0]) { |
||||||
|
case "Latitude" { $lat = $tokens[1] } |
||||||
|
case "Longitude" { $long = $tokens[1] } |
||||||
|
case "Notes" { $desc = $tokens[1] } |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
my $coord = $long . ',' . $lat; |
||||||
|
if( $lat && $long){ |
||||||
|
push(@{$out->{Document}->{AbstractFeatureGroup}}, append_placemark($name, $desc, $coord)); |
||||||
|
} |
||||||
|
} |
||||||
|
$kml->writeKML($out, $filename); |
||||||
|
|
||||||
|
|
||||||
|
sub append_placemark { |
||||||
|
my($name, $desc, $coord) = @_; |
||||||
|
return |
||||||
|
{ |
||||||
|
Placemark => |
||||||
|
{ |
||||||
|
Point => |
||||||
|
{ |
||||||
|
coordinates => $coord, |
||||||
|
}, |
||||||
|
styleUrl =>'#jackpoint-logo', |
||||||
|
name => "<a href=\"https://jackpoint.obscuritus.ca/index.php?title=" . uri_escape($name) . "\">$name</a>", |
||||||
|
description => $desc |
||||||
|
} |
||||||
|
}; |
||||||
|
} |
||||||
|
|
||||||
|
sub create_styles { |
||||||
|
|
||||||
|
return |
||||||
|
{ |
||||||
|
Document => { |
||||||
|
AbstractStyleSelectorGroup => [ |
||||||
|
{ |
||||||
|
Style => { |
||||||
|
IconStyle => { Icon => { href => 'https://jackpoint.obscuritus.ca/images/logo.jpg' }, }, |
||||||
|
LabelStyle => { scale => '0' }, |
||||||
|
id => 'jackpoint-logo' |
||||||
|
} |
||||||
|
} |
||||||
|
], |
||||||
|
} |
||||||
|
}; |
||||||
|
} |
Loading…
Reference in new issue