|
#!/usr/bin/perl #bytewolf[at]tom.com #perlchina.org use strict; use XML::RSS; use LWP::Simple; use HTTP::Daemon; use HTTP::Status; use Fcntl qw(:flock);
my $c; my $rss='http://slashdot.org/index.rss'; my $html='slashdot.html'; my $d = new HTTP::Daemon LocalPort=>80; print "Please visit me at: <URL:", $d->url, ">\n";
while ($c = $d->accept) { my $r = $c->get_request; if ($r) { if ($r->method eq 'GET') { &slashdot(); } else { $c->send_error(RC_FORBIDDEN) } } $c = undef; }
sub slashdot{ if (-s $html){ if ((-M $html)>0.04) { &rss2html($c); }else{ $c->send_file_response($html); } }else{ &rss2html(); } }
sub rss2html{ my $lock='lock.tmp'; open(LOCK,">$lock") or &sendmsg("Can\'t create lock file $lock",0); flock(LOCK,LOCK_EX); open(F,">$html") or &sendmsg("Can\'t open $html",0); my $o = new XML::RSS; my $content = get($rss) or &sendmsg("Could not retrieve $rss",0); &sendmsg(" <html> <meta http-equiv=\"Refresh\" content=\"4;\"> <center> Please wait while me update from slashdot.org...... </center> </html> ",1); $o->parse($content); my $select=select F; #----------------------------HTML----------------------------- print<<HTML; <HTML> <BODY> <table bgcolor="#FFFFFF" border="0" align="center"><tr><td> <tr> <td valign="middle" align="center" bgcolor="#EEEEEE"> <font color="#000000" face="Arial,Helvetica"><B> <a href="$o->{'channel'}->{'link'}">$o->{'channel'}->{'title'}</a> </B></font></td></tr> <tr><td> HTML #----------------------------END-------------------------------- foreach my $item (@{$o->{'items'}}) { next unless defined($item->{'title'}) && defined($item->{'link'}); print "<li><a href=\"$item->{'link'}\" target=\"_blank\">$item->{'title'}</a><BR>\n"; }
if ($o->{'textinput'}->{'title'}) {
#----------------------------HTML------------------------------- print <<HTML; <form method="get" action="$o->{'textinput'}->{'link'}"> $o->{'textinput'}->{'description'}<BR> <input type="text" name="$o->{'textinput'}->{'name'}"><BR> <input type="submit" value="$o->{'textinput'}->{'title'}" target="_blank"> </form> </td> </TR> </td></tr></table> </BODY> </HTML> HTML }
#----------------------------END-------------------------------- select $select; close F; flock(LOCK,LOCK_UN); close LOCK; $c->send_file_response($html); } sub sendmsg{ my ($msg,$flag) = @_; my $o = new HTTP::Response(RC_OK); $o->content($msg); $c->send_response($o); next unless $flag; }
|