archive/assets/de/Archive/downloads/download-table-gen.pl (150 lines of code) (raw):

#!/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";