#!/usr/bin/perl
use strict;
use warnings;
use POSIX qw(strftime);
use LWP::Simple;
# alle wichtigen Einstellungen
my $website='...';
my $dbug_file='debug.log';
my $line_file='tmp_lines.txt';
my $stat_file='posting_stats.txt';
my $wait_time=60;
print "Hello, ScheduledWorld...\n";
# Hash mit den Titeln
my %found_lines;
# schon mal gefundene Titel Laden wenn vorhanden
if(-f $line_file)
{
open(my $fh, '<', $line_file) or die(qq(ERROR open "$line_file" "$!"\n));
my $pos=0;
while(<$fh>)
{
chomp($_);
$found_lines{$_}=$pos;
$pos++;
}
close($fh);
}
while (1) {
# defug datei öffnen
open(my $dbug_fh, '>>', $dbug_file) or die(qq(ERROR open "$dbug_file" "$!"\n));
# webseite holen
my $site = get($website);
# wenn die Seite geladen werden konnte
if($site)
{
# Hash mit den neuen Titeln
my %new_found_lines;
# Zeigt an wie viele neue Einträge hinzu gekommen sind
my $offset=0;
# finde alle "Titel"
my @entry_chunks=$site=~m!\Q
\E(.+?)\Q\E!g;
print $dbug_fh "num chunks: ".scalar(@entry_chunks)."\n";
# Zeilenenden aus den Titeln entfernen
chomp(@entry_chunks);
# alle gefundenen Titel durch gehen
for my $i (0..$#entry_chunks)
{
my $found=$entry_chunks[$i];
# wenn der Titel schon bekannt ist
if(exists($found_lines{$found}))
{
print "$i old: $found\n";
# titel an anderer stelle?
my $moved=$found_lines{$found}-$i;
print $dbug_fh "i:$i offset:$offset moved:$moved old: $found\n";
}
# wenn der Titel neu ist
else
{
$offset++;
print "$i new: $found\n";
print $dbug_fh "i:$i offset:$offset new: $found\n";
}
# Titel von der Webseite dem neuen Hash hinzufügen
$new_found_lines{$found}=$i;
}
# list der Titel speichern,
# status_datei ergänzen
# wenn sich was geändert hat.
if($offset)
{
# aktuelle zeit
my $time_now=strftime('%d-%m-%Y %H:%M',localtime);
# Titel schreiben
if(open(my $line_fh, '>', $line_file))
{
print $line_fh join("\n", @entry_chunks);
close($line_fh);
}
else
{
warn(qq(ERROR open "$line_file" "$!"\n));
print $dbug_fh qq(ERROR open "$line_file" "$!"\n);
}
# Status schreiben
if(open(my $fh, '>>', $stat_file))
{
print $fh "offset: $offset\n";
print $fh "$time_now\n";
close($fh);
}
else
{
warn(qq(ERROR open "$stat_file" "$!"\n));
print $dbug_fh qq(ERROR open "$stat_file" "$!"\n);
}
}
# alte Titel den Neuen überschreiben
%found_lines=%new_found_lines;
print $dbug_fh "offset: $offset\n";
}
# Fehlermeldung wenn die Seite nicht geladen wurde
else
{
warn "ERROR load website $website\n";
print $dbug_fh "ERROR load website $website!\n";
}
print $dbug_fh strftime('%d-%m-%Y %H:%M',localtime);
print $dbug_fh "\n################################################################debug\n";
close($dbug_fh);
# warten
sleep($wait_time);
}