Hallo,

marcus.wolsc...@googlemail.com wrote:
> Wenn du mir etwas schreibst um die automatisiert hoch zu laden.
> Momentan mach ich das Reinkopieren in die Wiki-Seiten von Hand.

Ich hab hier aus einem anderen Leben ein Perl-Skript, mit dem ich 
automatisch Seiten an ein Mediawiki hochlade. Das MediaWiki.pm findet 
man bei CPAN, und den ganzen diff-Kram kann man sich natuerlich ggf. 
schenken.

Bye
Frederik


use MediaWiki;
use Text::Diff;
use strict;

die "usage: $0 <pagename> <contentfile>" unless ((scalar(@ARGV) == 2) or 
(scalar(@ARGV) == 3));
my $pagename = $ARGV[0];
my $contentfile = $ARGV[1];
my $force_otheruser = 0;
my $force_bigchange = 0;

die ("cannot open file '$contentfile'") unless open(CONT, $contentfile);
local $/;
my $new_content = <CONT>;
close(CONT);

my $wiki = MediaWiki->new();

$wiki->setup(
     { "wiki" => { "host" => "wiki.openstreetmap.de", "path" => "/" },
       "bot" =>  { "user" => "my_username", pass => "my_password" } });

die ("page '$pagename' does not exist in wiki") unless 
$wiki->exists($pagename);

my $page = $wiki->get($pagename, "rw");
my $lastedit = $page->last_edit();
my $lastedituser = $lastedit->{"user"};
$lastedituser =~ s/<[^>]*>//g;

if ($lastedituser ne $wiki->user())
{
     die ("page '$pagename' edited by other user ($lastedituser)") 
unless ($force_otheruser);
}

my $old_content = $page->{"content"};
if ($old_content eq $new_content)
{
     print "content not changed\n";
}
else
{
     my $d = diff(\$old_content, \$new_content, { CONTEXT => "0" });
     my $plus=0;
     my $minus=0;
     foreach my $line(split/\n/, $d)
     {
         my $sign=substr($line,0,1);
         if ($sign eq "+") { $plus++; } elsif ($sign eq "-") { $minus++ };
     }
     #print $d;

     die "too many changes" if (($plus + $minus > 20) && 
(!$force_bigchange));
     print "changes: +$plus -$minus\n";

     my $sum = $ARGV[2];
     $sum .= " / " if ($sum ne "");
     $sum .= "Automatisches Update +$plus Zeilen -$minus Zeilen";
     $page->{"summary"} = $sum;
     $page->{"content"} = $new_content;
     $page->save();

     print "page updated.\n";
}



_______________________________________________
Talk-de mailing list
Talk-de@openstreetmap.org
http://lists.openstreetmap.org/listinfo/talk-de

Antwort per Email an