blob: 4cdac9f60f3b07e0604caf4c0923e77d44e5cf31 [file] [log] [blame]
#!/usr/bin/perl
use warnings;
use strict;
use LWP::UserAgent;
use XML::LibXML;
use Template;
use Data::Dumper;
my $vars = {
baseurl => 'http://download.services.openoffice.org/files/localized',
records => {}
};
my( $ua, $parser, $xc, $tt );
my $records = {};
my $base_url = 'http://download.services.openoffice.org/files/localized';
my %lang_codes_map = (
'ar' => 'Arabisch',
'ca' => 'Katalanisch',
'zh-cn' => 'Chinesisch (vereinfacht)',
'zh-tw' => 'Chinesisch (traditionell)',
'da' => 'Dänisch',
'nl' => 'Niederländisch',
'en-GB' => 'Englisch (Britisch)',
'en-US' => 'Englisch (US)',
'et' => 'Estnisch',
'fr' => 'Französisch',
'gl' => 'Galicisch',
'de' => 'Deutsch',
'el' => 'Griechisch',
'ga' => 'Irisch',
'it' => 'Italienisch',
'ja' => 'Japanisch',
'ko' => 'Koreanisch',
'ku' => 'Kurdisch',
'lt' => 'Litauisch',
'mk' => 'Mazedonisch',
'mn' => 'Mongolisch',
'nb' => 'Norwegisch (Bokmål)',
'nn' => 'Norwegisch (Nynorsk)',
'pl' => 'Polnisch',
'pt' => 'Portugiesisch (Europa)',
'bt-pt' => 'Portugiesisch (Brasilien)',
'ru' => 'Russisch',
'sr' => 'Serbisch',
'sl' => 'Slovenisch',
'es' => 'Spanisch',
'sv' => 'Schwedisch',
'tr' => 'Türkisch',
'vi' => 'Vietnamesisch'
);
my %langpacks = (
'windows' => 'OOo_[%VERSION%]_Win_x86_langpack_[%LANG%].exe',
'macosint' => 'OOo_[%VERSION%]_MacOS_x86_langpack_[%LANG%].dmg',
'lin64deb' => 'OOo_[%VERSION%]_Linux_x86-64_langpack-deb_[%LANG%].tar.gz',
'lin64rpm' => 'OOo_[%VERSION%]_Linux_x86-64_langpack_[%LANG%].tar.gz',
'lin32deb' => 'OOo_[%VERSION%]_Linux_x86_langpack-deb_[%LANG%].tar.gz',
'lin32rpm' => 'OOo_[%VERSION%]_Linux_x86_langpack_[%LANG%].tar.gz'
);
my %all_platforms = (
'windows' => 'OOo_[%VERSION%]_Win_x86_install_[%LANG%].exe',
'windowsj' => 'OOo_[%VERSION%]_Win_x86_install-wJRE_[%LANG%].exe',
'lin32rpm' => 'OOo_[%VERSION%]_Linux_x86_install-rpm_[%LANG%].tar.gz',
'lin32rpmj' => 'OOo_[%VERSION%]_Linux_x86_install-rpm-wJRE_[%LANG%].tar.gz',
'lin32deb' => 'OOo_[%VERSION%]_Linux_x86_install-deb_[%LANG%].tar.gz',
'lin64rpm' => 'OOo_[%VERSION%]_Linux_x86-64_install-rpm_[%LANG%].tar.gz',
'lin64rpmj' => 'OOo_[%VERSION%]_Linux_x86-64_install-rpm-wJRE_[%LANG%].tar.gz',
'lin64deb' => 'OOo_[%VERSION%]_Linux_x86-64_install-deb_[%LANG%].tar.gz',
'macosint' => 'OOo_[%VERSION%]_MacOS_x86_install_[%LANG%].dmg',
'macosppc' => 'OOo_[%VERSION%]_MacOS_PPC_install_[%LANG%].dmg',
'solx86' => 'OOo_[%VERSION%]_Solaris_x86_install_[%LANG%].tar.gz',
'solx86j' => 'OOo_[%VERSION%]_Solaris_x86_install-wJRE_[%LANG%].tar.gz',
'solsparc' => 'OOo_[%VERSION%]_SolarisSparc_install_[%LANG%].tar.gz',
'solsparcj' => 'OOo_[%VERSION%]_SolarisSparc_install-wJRE_[%LANG%].tar.gz',
);
sub initialize {
$ua = LWP::UserAgent->new( agent => 'OOoSnooper' );
$parser = XML::LibXML->new;
$xc = XML::LibXML::XPathContext->new;
$tt = Template->new;
}
sub extract_links {
my ( $url ) = @_;
my $content = $ua->get( $url )->content;
my $doc = $parser->parse_html_string( $content );
$xc->setContextNode( $doc->documentElement() );
my @items = $xc->findnodes( '//a' );
return \@items;
}
sub run {
initialize;
my $items = extract_links( $base_url );
# -- Fuer Debugging-Zwecke:
# Nur Sprachen verarbeiten bis $limit
#my $limit = 15;
#my $count = 0;
foreach my $item ( @{$items} ) {
# -- Debugging: Loop verlassen, wenn Limit erreicht
#if ( ++$count == $limit ) { last; }
my $href = $item->getAttribute("href");
# nur nach Laendercodes im Link suchen
if ( $href =~ /^([A-z]{2}(?:-[A-z]{2})?)\/$/ ) {
my $lang = $1;
my $langobj = {};
# wenn die Sprache im language code mapping table (LCMT) gefunden wurde
if ( grep( /^$lang$/, keys(%lang_codes_map) ) > 0 ) {
#print "$lang found: " . $lang_codes_map{$lang}, "\n";
$langobj->{lang} = $lang_codes_map{$lang};
# OOo-Versionen
my $versions = extract_links( "$base_url/$lang" );
my @ooo_versions;
foreach my $version ( @{$versions} ) {
if ( $version->getAttribute("href") =~ /^(\d\.\d\.\d)\/$/ ) {
push @ooo_versions, $1;
}
} # /foreach
# Wenn mindestens eine Version gefunden wurde
if ( @ooo_versions > 0 ) {
# letztes Element im Array ist die neueste Version
my $latest_version = $ooo_versions[$#ooo_versions];
#print "\tlatest version: " . $latest_version . " - checking platform availability\n";
$langobj->{latest} = $latest_version;
my $available_platforms = extract_links( "$base_url/$lang/$latest_version" );
my @platforms;
foreach my $available_platform ( @{$available_platforms} ) {
my $href = $available_platform->getAttribute("href");
if ( $href =~ /^OOo/ ) {
push @platforms, $href;
}
}
my $version_map = {};
foreach my $platform_key ( keys(%all_platforms) ) {
my $P = $all_platforms{$platform_key};
$P =~ s/\[%VERSION%\]/$latest_version/;
$P =~ s/\[%LANG%\]/$lang/;
if ( grep( /$P/, @platforms ) > 0 ) {
#print "\t\t$P\n";
$version_map->{$platform_key} = $P;
}
}
my $langpack_map = {};
foreach my $langpack_key ( keys(%langpacks) ) {
my $L = $langpacks{$langpack_key};
$L =~ s/\[%VERSION%\]/$latest_version/;
$L =~ s/\[%LANG%\]/$lang/;
if ( grep( /$L/, @platforms ) > 0 ) {
$langpack_map->{$langpack_key} = $L;
}
}
$langobj->{versions} = $version_map;
$langobj->{langpacks} = $langpack_map;
$records->{$lang} = $langobj;
print "\t $lang\n";
} else {
print "\t no versions available\n";
}
} # /if grep lang
} # /if href
} # /foreach items
} # /sub run
run;
my @record_keys_sorted = sort( keys( %{$records} ) );
$vars->{keys_sorted} = \@record_keys_sorted;
$vars->{records} = $records;
#print Dumper( $vars );
$tt->process( 'other-rel.tt', $vars, 'other.html' );
print "Done\n\n";