Bon, je suis arrivé à ça, mais mon perl est tellement rouillé (si tant est qu'il ait jamais été bon) et donc c'est assez limité : on a le droit qu'à une seule requete, puis ça plante. Mais si un (vrai, pas comme moi) mongeur passait par là et qu'il peut y jetter un coup d'oeuil, ça m'intéresserait...
#!/usr/bin/perl
#use strict;
use File::Temp qw/ tempfile tempdir /;
sub filtre {
my $file;
my $out;
my $fh;
my $outfh;
($file, $fh) = tempfile();
($out, $outfh) = tempfile();
open FILE, ">$fh";
print FILE $_[0];
close FILE;
system $_[1]." < ".$fh." > ".$outfh;
system "echo >> ".$outfh;
return $outfh;
}
use HTTP::Daemon;
use HTTP::Response;
use HTTP::Status;
use LWP::UserAgent;
my $d = new HTTP::Daemon;
my $b = new LWP::UserAgent;
print "Please contact me at: <URL:", $d->url, ">\n";
while (my $c = $d->accept) {
while (my $r = $c->get_request) {
if ($r->method eq 'GET' && $r->url->path =~ /http/) {
my $i = index($r->url->path, "http");
my $cmd = substr($r->url->path, 0, $i);
my $req = new HTTP::Request GET=>substr($r->url->path,$i);
my $res = $b->request($req);
if ($res->is_success($req)) {
$c->send_file_response(filtre($res->content, $cmd));
$c->close;
} else {
$c->send_error(RC_FORBIDDEN);
}
} else {
$c->send_error(RC_FORBIDDEN)
}
}
$c->close;
undef($c);
}
En gros, il faudrait permettre au daemon html de tenir plusieurs requetes simultanées (fork ?), il faudrait (avant ça) qu'il puisse en gérer... plusieurs un après l'autre. Et il faudrait pouvoir choisir le port du serveur...
Sinon, dans votre lecteur de flux, vous mettez comme adresse http://localhost:PORT/PATH/URL
par exemple si au lancement le script vous dit port 50000, que vous voulez voir le rss du monde avec le script de pascal installé dans /home/vous/bin/monde ça donne plus ou moins :
http://localhost:50000/home/vous/bin/mondehttp://www.lemonde(...) .
Le pire c'est que je n'ai pas essayé avec un script réel, j'ai juste essayé avec /bin/cat, et ça marchait ;-).
Si personne ne peut améliorer cette version stand-alone, je verrais si je peux faire une version pour mod_perl.
[^] # Re: Sinon pour akregator...
Posté par Nicolas Schoonbroodt . En réponse au journal Filtre liferea pour lemonde.fr. Évalué à 7.
#!/usr/bin/perl #use strict; use File::Temp qw/ tempfile tempdir /; sub filtre { my $file; my $out; my $fh; my $outfh; ($file, $fh) = tempfile(); ($out, $outfh) = tempfile(); open FILE, ">$fh"; print FILE $_[0]; close FILE; system $_[1]." < ".$fh." > ".$outfh; system "echo >> ".$outfh; return $outfh; } use HTTP::Daemon; use HTTP::Response; use HTTP::Status; use LWP::UserAgent; my $d = new HTTP::Daemon; my $b = new LWP::UserAgent; print "Please contact me at: <URL:", $d->url, ">\n"; while (my $c = $d->accept) { while (my $r = $c->get_request) { if ($r->method eq 'GET' && $r->url->path =~ /http/) { my $i = index($r->url->path, "http"); my $cmd = substr($r->url->path, 0, $i); my $req = new HTTP::Request GET=>substr($r->url->path,$i); my $res = $b->request($req); if ($res->is_success($req)) { $c->send_file_response(filtre($res->content, $cmd)); $c->close; } else { $c->send_error(RC_FORBIDDEN); } } else { $c->send_error(RC_FORBIDDEN) } } $c->close; undef($c); }En gros, il faudrait permettre au daemon html de tenir plusieurs requetes simultanées (fork ?), il faudrait (avant ça) qu'il puisse en gérer... plusieurs un après l'autre. Et il faudrait pouvoir choisir le port du serveur... Sinon, dans votre lecteur de flux, vous mettez comme adresse http://localhost:PORT/PATH/URL par exemple si au lancement le script vous dit port 50000, que vous voulez voir le rss du monde avec le script de pascal installé dans /home/vous/bin/monde ça donne plus ou moins : http://localhost:50000/home/vous/bin/mondehttp://www.lemonde(...) . Le pire c'est que je n'ai pas essayé avec un script réel, j'ai juste essayé avec /bin/cat, et ça marchait ;-). Si personne ne peut améliorer cette version stand-alone, je verrais si je peux faire une version pour mod_perl.