webForumDet fria alternativet

Uppdatering av sidor

6 svar · 338 visningar · startad av nordan

nordanMedlem sedan juni 2000949 inlägg
#1

Kan man på något sätt kolla om en sida är uppdaterad med hjälp av perl.
Det jag då menar är att jag skulle tex kunna lägga en bevakning på en eller flera sidor och sedan bara gå in på en sida jag har gjort och kolla om det står något nytt på någon av dess sidor.

Utskrift skulle kunna vara så här
Aftonbladet är uppdatera
Passagen är uppdaterat
Osv…

Finns det någon sådan möjlighet?

HansenMedlem sedan aug. 2000374 inlägg
#2

Innan, när webben var till mesta del statisk så kunde man gå efter Last-Modified headern eller ta en md5 summa.

Idag tror jag det inte finns en annan lösning än att ”parsa” innehållet.
Det finns dock ypperliga moduler för att lösa detta med perl.

HTML::Parser
HTML::TableExtractor

osv

Leta efter HTML::* moduler på CPAN, övertygad att du hittar någon som passar dig!

HansenMedlem sedan aug. 2000374 inlägg
#3

Hackade ihop ett script för att testa md5 mot expressen, det verkar fungera!

Hur framgången är med md5 beror på villken sajt och hur mycket innhållet skiftar.

#!/usr/bin/perl

use strict;
use warnings;
use Digest::MD5 qw(md5_base64);
use LWP::Simple;

my $url   = 'http://www.expressen.se/';
my $check = undef;

while ( 1 ) {
    my $md5sum = md5_base64( get($url) );

    unless ( defined $check ) {
        $check = $md5sum;
    }

    unless ( $md5sum eq $check ) {
         print "Sajten uppdaterades, " . scalar localtime() . ".\n";
         $check = $md5sum;
    }

    sleep (60 * 10); # Tio minuter
}
JojoxxMedlem sedan juni 20004 308 inlägg
#4

Man skulle även kunna kontrollera Content-type för att minska risken att någon matar scriptet med bulk-adresser, typ en ISO-fil på 700Mb.

my ($contentType) = head($url) ;
if($contentType ne 'text/html'){
	die "Ogiltig dokumenttyp.";
}
nordanMedlem sedan juni 2000949 inlägg
#5

Jag fick tyvärr inte Hansens exempel att funka i min cgi-bin katalog
Kan det vara så att någon av modulerna inte är installerade?
Jag vet inte om man testar det på detta sätt men jag skrev ett lite skript så här för att kolla


#!/usr/bin/perl
use strict;
use warnings;
use Digest::MD5 qw(md5_base64);
use LWP::Simple;
print "Content-type: text/html\n\n";
print "hallo world";

Men det kanske är så att man måsta anropa dom i scriptet för att kolla om dessa finns?
Hur kan man kolla om en webbserver har dessa moduler?
Eller skall jag installera dom i min cgi-bin katalog?

Jag måste ju säga att det är verkligen trevlig när folk är så hjälpsamma så att dom skriver ett nytt script bara för att hjälpa en :)

HansenMedlem sedan aug. 2000374 inlägg
#6

Testa med detta script för att se villka moduler du har installerade.

#!/usr/bin/perl
use strict;
use CGI;

my $q   = new CGI;
my %mod = ();

my @test = (
   'LWP',
   'HTTP::Request',
   'HTTP::Header',
   'Digest::MD5',
   'DBI',
   'HTML::Parser',
   'Net::SMTP',
   'Net::LDAP',
   'Date::Calc',
   'Image::Magick',
   'Apache::DBI',
);

for my $m ( @test ) {
    
    if ( eval "require $m" ) {
       if ( my $v = eval "\$$m\::VERSION" ) {
          $mod{$m} .= " v $v";
       }
       else {
          $mod{$m} = "OK";
       }
    }
    else {
       $mod{$m} = $q->span( { -style => 'color: red;' }, "INTE OK" );
    }
}

if ( exists $mod{'DBI'} && $mod{'DBI'} !~ /INTE OK/ ) {
    $mod{'DBI drivers'} = join( ", ", DBI->available_drivers );
}

print
  $q->header,
  $q->start_html(
    -title => 'Server test',
    -style =>
        {
            -code       => 'body, td { font-family: Verdana; }'
                         . 'td { padding: 5px; font-size: 8pt; }'
	}
  ),
  $q->start_table(),
  $q->Tr( $q->td( { -colspan => 2 }, $q->h3('Perl') ) ),
  $q->Tr( $q->td( [ 'Perl', $] ] ) ),
  $q->Tr( $q->td( { -colspan => 2 }, $q->h3('Moduler') ) ),
  $q->Tr( [ map { $q->td( [ $_, $mod{$_} ] ) } sort keys %mod ] ),
  $q->Tr( $q->td( { -colspan => 2 }, $q->h3('Miljö') ) ),
  $q->Tr( [ map { $q->td( [ $_, $ENV{$_} ] ) } sort keys %ENV ] ),
  $q->end_table(),
  $q->end_html;
HansenMedlem sedan aug. 2000374 inlägg
#7

Scriptet som jag skrev innan, det som kollar om sajten har uppdaterats, är inte tänkt att exekveras som ett cgi script utan måste köras från systemet.

Som jag sa innan så varierar resultatet från sajt till sajt, här är resultatet efter nästan ett dygn av checkar mot expressen.

Sajten uppdaterades, Mon Nov 25 21:04:05 2002.
Sajten uppdaterades, Mon Nov 25 21:14:05 2002.
Sajten uppdaterades, Mon Nov 25 21:24:06 2002.
Sajten uppdaterades, Mon Nov 25 22:04:07 2002.
Sajten uppdaterades, Mon Nov 25 22:14:08 2002.
Sajten uppdaterades, Mon Nov 25 22:34:09 2002.
Sajten uppdaterades, Mon Nov 25 22:44:09 2002.
Sajten uppdaterades, Mon Nov 25 22:54:10 2002.
Sajten uppdaterades, Mon Nov 25 23:44:12 2002.
Sajten uppdaterades, Tue Nov 26 00:14:13 2002.
Sajten uppdaterades, Tue Nov 26 05:44:27 2002.
Sajten uppdaterades, Tue Nov 26 05:54:28 2002.
Sajten uppdaterades, Tue Nov 26 06:04:28 2002.
Sajten uppdaterades, Tue Nov 26 06:14:28 2002.
Sajten uppdaterades, Tue Nov 26 06:34:29 2002.
Sajten uppdaterades, Tue Nov 26 06:54:30 2002.
Sajten uppdaterades, Tue Nov 26 07:14:51 2002.
Sajten uppdaterades, Tue Nov 26 07:24:52 2002.
Sajten uppdaterades, Tue Nov 26 07:34:52 2002.
Sajten uppdaterades, Tue Nov 26 07:44:53 2002.
Sajten uppdaterades, Tue Nov 26 07:54:53 2002.
Sajten uppdaterades, Tue Nov 26 08:04:54 2002.
Sajten uppdaterades, Tue Nov 26 08:14:54 2002.
Sajten uppdaterades, Tue Nov 26 08:24:54 2002.
Sajten uppdaterades, Tue Nov 26 08:34:55 2002.
Sajten uppdaterades, Tue Nov 26 08:44:55 2002.
Sajten uppdaterades, Tue Nov 26 08:54:56 2002.
Sajten uppdaterades, Tue Nov 26 09:04:56 2002.
Sajten uppdaterades, Tue Nov 26 09:34:58 2002.
Sajten uppdaterades, Tue Nov 26 09:44:58 2002.
Sajten uppdaterades, Tue Nov 26 10:04:59 2002.
Sajten uppdaterades, Tue Nov 26 10:15:00 2002.
Sajten uppdaterades, Tue Nov 26 11:15:02 2002.
Sajten uppdaterades, Tue Nov 26 11:25:03 2002.
Sajten uppdaterades, Tue Nov 26 11:45:04 2002.
Sajten uppdaterades, Tue Nov 26 11:55:04 2002.
Sajten uppdaterades, Tue Nov 26 12:05:05 2002.
Sajten uppdaterades, Tue Nov 26 12:15:05 2002.
Sajten uppdaterades, Tue Nov 26 12:25:05 2002.
Sajten uppdaterades, Tue Nov 26 12:35:06 2002.
Sajten uppdaterades, Tue Nov 26 13:45:09 2002.
Sajten uppdaterades, Tue Nov 26 14:15:10 2002.
Sajten uppdaterades, Tue Nov 26 14:35:11 2002.
Sajten uppdaterades, Tue Nov 26 14:45:12 2002.
Sajten uppdaterades, Tue Nov 26 14:55:12 2002.
Sajten uppdaterades, Tue Nov 26 15:05:13 2002.
Sajten uppdaterades, Tue Nov 26 15:15:13 2002.
Sajten uppdaterades, Tue Nov 26 15:25:14 2002.
Sajten uppdaterades, Tue Nov 26 15:35:14 2002.
Sajten uppdaterades, Tue Nov 26 15:45:15 2002.
Sajten uppdaterades, Tue Nov 26 15:55:15 2002.
Sajten uppdaterades, Tue Nov 26 16:05:15 2002.
Sajten uppdaterades, Tue Nov 26 16:15:16 2002.
Sajten uppdaterades, Tue Nov 26 16:25:16 2002.
Sajten uppdaterades, Tue Nov 26 16:35:17 2002.
Sajten uppdaterades, Tue Nov 26 16:45:17 2002.
Sajten uppdaterades, Tue Nov 26 16:55:18 2002.
Sajten uppdaterades, Tue Nov 26 17:05:18 2002.
Sajten uppdaterades, Tue Nov 26 17:15:18 2002.

135 ms totalt · 3 externa anrop · v20260731065814-full.37765c92
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
132 ms — hämta tråd, inlägg och bilagor (db)