#!/usr/bin/perl # RSS Robot v0.1 (2004.10.29) # URL: http://private.ceek.jp/ use strict; use IO::Socket; use IO::Select; my (@href, $selecter, $out_sock, $last_sock, %s, %r, %p, %c); &init_href("http://private.ceek.jp/index.rdf"); &init_href("http://news.ceek.jp/rss/index.rdf"); $selecter = IO::Select->new; foreach my $href (@href) { $SIG{'ALRM'} = sub { $out_sock++; next; }; alarm(1); eval { my $sock; $sock = IO::Socket::INET->new("$s{$href}:80"); if ($sock) { $selecter->add($sock); $p{$sock} = $href; print $sock "GET /$r{$href} HTTP/1.0\r\n"; print $sock "Host: $s{$href}:80\r\n\r\n"; $sock->flush(); } else { $out_sock++; } } } $last_sock = $#href + 1 - $out_sock; while ($last_sock > 0) { my ($readable_socks) = IO::Select->select($selecter, undef, undef, undef); foreach my $sock (@$readable_socks) { my ($len, $buf); $len = sysread($sock, $buf, 10240); if ($len > 0){ $c{$p{$sock}} .= $buf; } else { $selecter->remove($sock); $sock->close(); $last_sock--; } } } # RSS Parse foreach my $href (@href) { $c{$href} =~ tr/\r\n/ /; while ($c{$href} =~ m|(.*?)|ig) { my ($item, $title, $link, $date); $item = $1; if ($item =~ m|(.*?)|i) { $title = $1; } if ($item =~ m|(.*?)|i) { $link = $1; } if ($item =~ m|(.*?)|i) { $date = $1; } print "$title\n$link\n$date\n\n"; } } #-- Href Parse sub init_href { my $href = shift; if ($href =~ m|^http://(.*?)/(.*?)$|) { push @href, $href; $s{$href} = $1; $r{$href} = $2; } else { return; } }