Radreise-Wiki:DownloadRoute.pl: Unterschied zwischen den Versionen
Aus Radreise-Wiki
Jmages (Diskussion | Beiträge) |
Jmages (Diskussion | Beiträge) |
||
| (4 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
| Zeile 3: | Zeile 3: | ||
perl downloadRoute.pl Rhein | perl downloadRoute.pl Rhein | ||
Daraufhin loggt sich das Skript selbsttätig ins Wiki ein (Internetverbindung vorausgesetzt) und lädt den Source-Text der Strecke ins '''''text'''''-Verzeichnis. Ausserdem wird das zugehörige kmz-File ins '''''kmz'''''-Verzeichnis heruntergeladen, entpackt und der reine GPS-Track in eine txt-Datei extrahiert. | Daraufhin loggt sich das Skript selbsttätig ins Wiki ein (Internetverbindung vorausgesetzt) und lädt den Source-Text der Strecke ins '''''text'''''-Verzeichnis. Ausserdem wird das zugehörige kmz-File ins '''''kmz'''''-Verzeichnis heruntergeladen, entpackt und der reine GPS-Track in eine txt-Datei extrahiert und ins '''''tracks'''''-Verzeichnis verschoben. | ||
'''Quellcode des Skripts:''' | '''Quellcode des Skripts:''' | ||
| Zeile 18: | Zeile 18: | ||
# Default Settings | # Default Settings | ||
push @INC, '.'; | |||
require "ini.pl"; | require "ini.pl"; | ||
my ($baseDir, $outDir, $username, $password, $encoding, $encAnsi, $encOut) = getIni(); | my ($baseDir, $outDir, $username, $password, $encoding, $encAnsi, $encOut) = getIni(); | ||
| Zeile 40: | Zeile 41: | ||
open FIN, "$baseDir/RouteList.txt" or die "$! : $baseDir/RouteList.txt"; | open FIN, "$baseDir/RouteList.txt" or die "$! : $baseDir/RouteList.txt"; | ||
while (<FIN>) { push @content, $ | |||
while (<FIN>) { | |||
my $line = decode $encoding, $_; | |||
push @content, $line; | |||
} | |||
close (FIN); | close (FIN); | ||
| Zeile 49: | Zeile 57: | ||
chomp $name; | chomp $name; | ||
$routeFileName = $name; | $routeFileName = encode $encAnsi, $name; | ||
$routeURL = encodeRouteNameURL($routeFileName); | $routeURL = encodeRouteNameURL($routeFileName); | ||
} | } | ||
| Zeile 71: | Zeile 78: | ||
$mech->click(); | $mech->click(); | ||
$mech->get("http://www.radreise-wiki.de/$routeURL"); | $mech->get("http://www.radreise-wiki.de/index.php?title=$routeURL&action=edit"); | ||
my $website = $mech->content; | my $website = $mech->content; | ||
$website =~ /<textarea.*?>(.*)<\/textarea>/s; | |||
$website =~ /<textarea.*>(.*)<\/textarea>/s; | |||
my $wikiText = $1; | my $wikiText = $1; | ||
| Zeile 98: | Zeile 101: | ||
# Update KMZ File from Wiki | # Update KMZ File from Wiki | ||
my $dir_kmz | my $dir_kmz = "$baseDir/kmz"; | ||
my $dir_tracks = "$baseDir/tracks"; | |||
$mech->get("http://www.radreise-wiki.de/images/$routeURL.kmz", ":content_file" => "$dir_kmz/$routeFileName.kmz"); | $mech->get("http://www.radreise-wiki.de/images/$routeURL.kmz", ":content_file" => "$dir_kmz/$routeFileName.kmz"); | ||
| Zeile 128: | Zeile 132: | ||
my $content = decode $encoding, $ucontent; | my $content = decode $encoding, $ucontent; | ||
if ($content =~ /< | if ($content =~ /<LineString>.*?<coordinates>\s*(.*?)\s*<\/coordinates>/s) { | ||
my $track = $1; | my $track = $1; | ||
| Zeile 137: | Zeile 141: | ||
} | } | ||
&saveFileIfChangedOrNew ("$dir_tracks/", "$routeFileName.txt", encode $encoding, $track, 0); | |||
} else { | } else { | ||
| Zeile 152: | Zeile 152: | ||
exit; | exit; | ||
</nowiki> | </nowiki> | ||
[[Kategorie: Verwaltungs-Software]] | |||
Version vom 12. Januar 2018, 18:24 Uhr
Das Perl-Skript downloadRoute.pl wird mit dem Streckennamen als Parameter aufgerufen. Ein Beispiel ist
perl downloadRoute.pl Rhein
Daraufhin loggt sich das Skript selbsttätig ins Wiki ein (Internetverbindung vorausgesetzt) und lädt den Source-Text der Strecke ins text-Verzeichnis. Ausserdem wird das zugehörige kmz-File ins kmz-Verzeichnis heruntergeladen, entpackt und der reine GPS-Track in eine txt-Datei extrahiert und ins tracks-Verzeichnis verschoben.
Quellcode des Skripts:
use strict;
# Encoding Stuff
use Encode qw(encode decode);
# Mechanize Stuff
use WWW::Mechanize;
use HTTP::Cookies;
# Default Settings
push @INC, '.';
require "ini.pl";
my ($baseDir, $outDir, $username, $password, $encoding, $encAnsi, $encOut) = getIni();
my $routeFileName = "";
my $routeURL = "";
if ($#ARGV != -1) {
$routeFileName = join " ", @ARGV;
if ($routeFileName =~ / \($/) {
$routeFileName .= "retour)";
}
$routeURL = encodeRouteNameURL($routeFileName);
} else {
my @content;
open FIN, "$baseDir/RouteList.txt" or die "$! : $baseDir/RouteList.txt";
while (<FIN>) {
my $line = decode $encoding, $_;
push @content, $line;
}
close (FIN);
my @content_s = reverse sort @content;
my ($dateTXT, $dateKML, $type, $name) = split " :: ", $content_s[0];
chomp $name;
$routeFileName = encode $encAnsi, $name;
$routeURL = encodeRouteNameURL($routeFileName);
}
print encode $encOut, "\nGetting $routeFileName\n";
# Initialisieren von Mechanize-Browser und Cookie-Jar
my $mech = WWW::Mechanize->new( autocheck => 1 );
$mech->agent_alias( 'Windows Mozilla' );
my $cookie_jar = HTTP::Cookies->new( file => "cookies.txt", autosave => 1 );
$mech->cookie_jar($cookie_jar);
# Einloggen ins Radreise-Wiki um in den Edit-Modus zu kommen
$mech->get("http://www.radreise-wiki.de/Spezial:Userlogin");
$mech->form_number('1');
$mech->field("wpName", $username);
$mech->field("wpPassword", $password);
$mech->tick('wpRemember', '1');
$mech->click();
$mech->get("http://www.radreise-wiki.de/index.php?title=$routeURL&action=edit");
my $website = $mech->content;
$website =~ /<textarea.*?>(.*)<\/textarea>/s;
my $wikiText = $1;
$wikiText =~ s/</</g;
$wikiText =~ s/>/>/g;
$wikiText =~ s/"/\"/g;
$wikiText =~ s/&/\&/g;
if (length $wikiText > 1) {
&saveFileIfChangedOrNew ("$baseDir/text/", "$routeFileName.txt", encode $encoding, $wikiText, 0);
} else {
die "URL is not existent: $routeURL\n";
}
#===========================
# Update KMZ File from Wiki
my $dir_kmz = "$baseDir/kmz";
my $dir_tracks = "$baseDir/tracks";
$mech->get("http://www.radreise-wiki.de/images/$routeURL.kmz", ":content_file" => "$dir_kmz/$routeFileName.kmz");
my $zip = Archive::Zip->new();
my $status = $zip->read("$dir_kmz/$routeFileName.kmz");
if ($status != 'AZ_OK') {
die "Error while reading KMZ file! $!";
} else {
my @members = $zip->memberNames();
if ($#members != 0) { die "Error: More than one File within kmz!\n"; }
print encode $encOut, " Renaming $members[0] -> $routeFileName.kml\n";
$zip->extractTree(undef, "$dir_kmz/");
rename("$dir_kmz/$members[0]","$dir_kmz/$routeFileName.kml") || die "Error while Renaming File: $!";
my $ucontent = "";
open FILE, encode $encAnsi, "$dir_kmz/$routeFileName\.kml" or die $!;
while (<FILE>) { $ucontent .= $_; }
close FILE;
my $content = decode $encoding, $ucontent;
if ($content =~ /<LineString>.*?<coordinates>\s*(.*?)\s*<\/coordinates>/s) {
my $track = $1;
if ($track =~ /\n/) {
die "Error: Linebreak within Track\n";
}
&saveFileIfChangedOrNew ("$dir_tracks/", "$routeFileName.txt", encode $encoding, $track, 0);
} else {
print " Error: No Match in $routeFileName\n";
die;
}
}
exit;