Ich hab kaum Ahnung von Perl, würde aber denoch gern ein paar Sachen gerne am tvmovie2vdr ändern wollen. Vielleicht gibts hier ja konstruktive Vorschläge
1. Abbrüche wegen leerer Files: Wenn der Download korrupt ist stirbt es ,da immer etwas von epgdata.com zurück kommt auch was, wenn kein File da ist.
print "downloading $filenamezip\n";
my $dummy = GetContent("$hoerzuurl$days"."&pin=$hoerzupin","$downloadprefix$filenamezip",0,0);
eval 'use Archive::Zip qw( :ERROR_CODES :CONSTANTS )';
my $zip = Archive::Zip->new();
die 'read error' unless $zip->read("$downloadprefix$filenamezip") == AZ_OK;
my @xmlfiles = $zip->membersMatching( "$now_string_.*\.xml" );
Meine Fragen dazu:
1.1 Was passiert wenn kein Netz da ist, sprich GetContent fehlschlägt ?
Er steigt dann irgendwann aus nach retries.
1.2 Wie kann ich anstatt die 'read error' das entsprechende File löschen ?
Dann würde wenigstens beim nächsten Run wieder versucht das File zu laden anstatt das man manuell eingreifen muss. Noch schöner wäre natürlich wenn er anstatt zu sterben, das was er hat verarbeiten würde.
Das ist unten ja schon beschrieben.
2. Verarbeitung der Bilder
Hintergrund: wenn er Bilder speichern soll ($writeimages == 1) braucht er gut den dreifachen Speicher, als normal. Ich bin mir nicht sicher, aber mir scheint als wenn er alle dekomprimierten zip's dann im Speicher behält, anderseits lese ich was anderes im Code, aber ich hab auch kein Plan davon
for ($days=0; $days < $days2download; $days++)
{
....
unless ($writeimages)
{
undef $zip;
eval 'no Archive::Zip';
}
doexit() if $please_exit;
eval 'use XML::Simple::DTDReader';
my $xs = new XML::Simple::DTDReader(ForceArray => 0, KeyAttr => [ ]);
print "parsing ..\n";
my $xmlref = $xs->XMLin($xmlfile);
my $xmlc = $xmlref->{data};
doexit() if $please_exit;
foreach $index (0 .. @$xmlc)
{
....
} # foreach $index
# Speicher explizit freigeben
undef $xmlc;
undef $xmlref;
undef $xs;
eval 'no XML::Simple::DTDReader';
if ($writeimages)
{
undef $zip;
eval 'no Archive::Zip';
}
} # for ($days=0;$days
Alles anzeigen
Bei diesem Code dürfte doch nicht bei jedem Tag 50-80 MB mehr in den Speicher kommen. Funktioniert hier Archive::Zip evtl nicht so das er es nur einmal im Speicher behält und entpackt wenn angefragt sondern mehrfach neu in in den Arbeitsspeicher dekomprimiert vorhält ?
Würde mich über eine rege Teilnahme an der Diskussion freuen.