[Talk-de] TMC-Import startet und braucht eure Hilfe

marcus.wolschon at googlemail.com marcus.wolschon at googlemail.com
Di Okt 6 14:01:52 UTC 2009




Danke.

Ich versuche das mal zu verstehen und auf dem Windows-Laptop
hier oder einem Linux-Rechner zu Hause irgendwie
ein Perl einzurichten.

Marcus

On Tue, 06 Oct 2009 15:54:40 +0200, Frederik Ramm <frederik at remote.org>
wrote:
> Hallo,
> 
> marcus.wolschon at 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 at openstreetmap.org
> http://lists.openstreetmap.org/listinfo/talk-de




Mehr Informationen über die Mailingliste Talk-de