On Sat, 15 Dec 2001, Pierre Keller - BCU Lausanne wrote: > Je crois qu'il existe plusieurs testeurs de liens qui > travaillent à partir d'une page Web; mais à partir d'une > base MySQL ?
J'utilise plutôt PostgreSQL: mais l'interfaçage depuis Perl doit être le même ou presque. 1. Déclaration des champs pour faire un premier contrôle dans la base de données url TEXT CHECK ((url IS NULL) OR (url LIKE 'http://%')), (on pourrait ajouter un test qui soit plus strict selon les RFCs, donnez-le moi si vous l'avez écrit :)) 2. Faire le test proprement dit: schaefer@defian:/tmp% wget 2> /dev/null -O /dev/null 'http://www.alphanet.ch/truc/abcd' && echo trouve schaefer@defian:/tmp% wget 2> /dev/null -O /dev/null 'http://www.alphanet.ch/' && echo trouve trouve ou client HTTP Perl. 3. Parcourir une base de données Il y a plusieurs méthodes, notamment des scripts Perl p.ex. Avec les routines de base de données (que l'on peut trouver sur Contact DB, http://www-internal.alphanet.ch/~schaefer/software.html). On peut aussi directement utiliser l'interface Perl::DBI. cela donne quelque chose comme: (avec bien sûr l'utilisation de faits comme NOT NULL, etc, sinon le code devient plus compliqué) #! /usr/bin/perl -w use strict; use contact; use LWP::UserAgent; use HTTP::Request::Common; my $result = 0; # SUCCESS my $error_reason = "unknown\n"; my $dbh = &open_database($database, $server, $user, $password, \$error_reason); if (defined($dbh)) { my @titles; my @content; if (&do_query($dbh, "SELECT id, url FROM lien" \@titles, \@content, undef, undef, \$error_reason)) { my $hash_ref; foreach $hash_ref (@content) { if (!verify_url($hash_ref->{'url'}) { print $hash_ref->{'id}', "\n"; } } } else { print STDERR "Query failed: ", $error_reason; $result = 1; } if (!&close_database(\$dbh, \$error_reason)) { print STDERR "Disconnect error: ", $error_reason; $result = 1; } undef $dbh; } else { print STDERR "Connect error: ", $error_reason; $result = 1; } if ($result) { print STDERR $0, ": something failed.\n"; exit $result; } # Devrait être amélioré pour distinguer les erreurs. sub verify_url { my ($url) = @_; my $ua = LWP::UserAgent->new; if (defined($ua)) { my $request = HTTP::Request::Common::GET $url; if (defined($request)) { my $response = $ua->request($request); if (defined($response)) { if ($response->is_success()) { return 1; } } } } return 0; # fails (any error, not just not found!) } -- http://www-internal.alphanet.ch/linux-leman/ avant de poser une question. Ouais, pour se désabonner aussi.