[Talk-de] Kreisgrenzen-Import / gelöschte Nodes

Frederik Ramm frederik at remote.org
Do Jan 1 14:46:26 UTC 2009


Hallo,

Wolfgang W. Wasserburger wrote:
> Na da bin ich ja froh, daß ichs hier in Österreich umgekehrt gemacht habe
> und dennoch fehlen mir immer wieder Nodes (ich hänge auch an bestehende an
> ;-), gebe aber auch gleich zu, daß ich meine diesbezüglichen Erfahrungen
> noch nirgends zu elektronischem Papier gebracht habe - sorry

Ich hab am Ende jede Stunde:

* aktuelles Stunden-Diff vom planet-Server geholt
* mit oscgrep alle geloeschten Nodes rausgegreppt
* verglichen, ob irgendeine dieser IDs eine war, die ich vorher 
eingefuegt hatte (wenn man "comm" bedienen kann, wirds einfacher...)
* dann mit einem kleinen Perlskript (angehaengt) alle diese Nodes 
un-geloescht
* und den betr. Usern eine Nachricht geschickt (von Hand)

Bye
Frederik

use strict;
use LWP;
my $dryrun=0;

my ($upload_user, $upload_pass) = ("meinusername","meinpassword");

if (scalar(@ARGV) != 2 || $ARGV[0] !~ /^(node|way|relation)$/)
{
     print "usage: undelete.pl <node|way|relation> <id>\n";
     exit;
}

my ($what, $id) = @ARGV;

my $undo=0;
my $copy=0;
my $out;
my $lastedit;
my $ua = LWP::UserAgent->new;
$ua->credentials("www.openstreetmap.org:80", "Web Password", 
$upload_user, $upload_pass);

my $req = HTTP::Request->new(GET => 
"http://www.openstreetmap.org/api/0.5/$what/$id/history");
my $resp = $ua->request($req);
if (!$resp->is_success)
{
     print "$what $id cannot be retrieved: ".$resp->status_line."\n";
     exit;
}
my $undo_user;

foreach (split(/\n/, $resp->content()))
{
     if (/<$what/)
     {
         /id="([^"]+)"/ or die;
         die unless $id eq $1;
         /user="([^"]+)/;
         my $user=$1;
         /visible="([^"]+)/;
         my $visible=$1;
         if ($visible eq "false")
         {
             $undo=1;
             $copy=0;
             $undo_user=$user;
         }
         else
         {
             $lastedit = $user;
             $undo=0;
             $copy=1;
             $out=$_;
         }
     }
     elsif ($copy)
     {
         $out.=$_;
         $copy=0 if (/<\/$what/);
      }
};

if ($undo)
{
     if (length($out))
     {
         print "$what $id deleted by '$undo_user'; restoring previous 
version by '$lastedit'\n";
         exit if $dryrun;
         $req = HTTP::Request->new(PUT => 
"http://www.openstreetmap.org/api/0.5/$what/$id");
         $req->content("<osm version='0.5'>\n$out</osm>\n");
         $resp = $ua->request($req);
         if (!$resp->is_success)
         {
             print "$what $id cannot be uploaded: ".$resp->status_line."\n";
             exit;
         }
     }
}
else
{
     print "$what $id is not deleted\n";
}

-- 
Frederik Ramm  ##  eMail frederik at remote.org  ##  N49°00'09" E008°23'33"




Mehr Informationen über die Mailingliste Talk-de