Files
scripts/download_datatables.pl
2025-06-03 23:03:08 +02:00

102 lines
2.5 KiB
Perl

#!/perl -w
use warnings;
use File::Slurp qw(:std);
use File::stat;
use File::Path qw(make_path);
# use IO::Socket::SSL;
use LWP::UserAgent;
use Data::Printer;
use Crypt::SSLeay;
use Net::SSL;
#use Win32::File::VersionInfo;
use POSIX qw(strftime);
$ENV{PERL_NET_HTTPS_SSL_SOCKET_CLASS} = "Net::SSL";
$ENV{PERL_LWP_SSL_VERIFY_HOSTNAME} = 0;
$| = 1;
my $bib = {
'autofill' => 'AutoFill',
'buttons' => 'Buttons',
'select' => 'Select',
'staterestore' => 'StateRestore',
'scroller' => 'Scroller',
'searchbuilder' => 'SearchBuilder',
'searchpanes' => 'SearchPanes',
'rowreorder' => 'RowReorder',
'responsive' => 'Responsive',
'rowgroup' => 'RowGroup',
'colreorder' => 'ColReorder',
'fixedcolumns' => 'FixedColumns',
'keytable' => 'KeyTable',
'fixedheader' => 'FixedHeader',
'datetime' => 'Datetime',
};
my @dateien;
my $downloadfolder = 'D:\\wsldata\\htlib\\jquery-datatables';
my $ua = LWP::UserAgent->new(timeout => 10);
$ua->agent('Mozilla/5.0');
$ua->show_progress( 1 );
my $response = $ua->get( 'https://cdn.datatables.net/');
my @releases = $response->as_string =~ /href="(.*)">Release notes/g;
for my $rel ( @releases ) {
my $folder = $rel =~ s/\/\/cdn.datatables.net\///r;
my @urlsplit = split('/', $folder);
$folder = $folder =~ s/\//\\\\/gr;
if ( $urlsplit[0] !~ /^\d*\.\d*\.\d*$/ ) {
if ( $bib->{$urlsplit[0]} ) {
$folder = $folder =~ s/$urlsplit[0]/$bib->{$urlsplit[0]}/r;
}
$folder = 'extensions\\'. $folder;
}
if ( !-e $downloadfolder.'\\'. $folder) {
my $response = $ua->get( 'https://cdn.datatables.net/'. $rel);
my @files = $response->as_string =~ /<a href="(.*)">\/\//g;
for my $f ( @files ) {
if ( $f !~ /mjs$|json$/ ) {
push @dateien, $f;
}
}
} else {
$folder = $folder =~ s/\\\\$//rg;
$folder = $folder =~ s/\\\\/\\/rg;
print "$folder -> aktuell\n";
}
}
for my $da ( @dateien ) {
next if $da !~ /cdn\.datatables\.net/ or $da =~ /mjs$/ ;
my $folder = $da =~ s/\/\/cdn.datatables.net\///r;
my @urlsplit = split('/', $folder);
my $file = $urlsplit[-1];
$folder = $folder =~ s/$file//r;
$folder = $folder =~ s/\//\\\\/gr;
if ( $urlsplit[0] !~ /^\d*\.\d*\.\d*$/ ) {
if ( $bib->{$urlsplit[0]} ) {
$folder = $folder =~ s/$urlsplit[0]/$bib->{$urlsplit[0]}/r;
}
$folder = 'extensions\\'. $folder;
}
#
if ( !-e $downloadfolder.'\\'. $folder.$file) {
make_path( $downloadfolder.'\\'. $folder );
my $response = $ua->get( 'https:'. $da, ':content_file' => $downloadfolder.'\\'. $folder.$file);
}
}
system("pause");
1;