Category: | Utilities |
Author/Contact Info | ZZamboni |
Description: |
It gets lines from the Perlmonks chatbox. It can return all
the lines that are currently there, or only the new lines
since the last time the getnewlines subroutine is called. This
piece of code prints the chat to the terminal:
It is very rough, but it works :-) Update: The code posted here was only the first version, and is now grossly outdated. Please see the web page where I keep the latest version of the script. It has grown a lot with the contributions and encouragement of fellow monks. to it. |
# Note - don't use this code. See link above. package PerlMonksChat; use LWP::UserAgent; use HTTP::Request; use HTML::Entities; sub new { my $class=shift; my $url=shift||'http://www.perlmonks.org/index.pl?node_id=2518'; my $self={}; $self->{url}=$url; $self->{ua}=new LWP::UserAgent; $self->{req}=new HTTP::Request('GET', $url); $self->{cache}=[]; bless $self, $class; return $self; } sub getalllines { my $self=shift; $ua=$self->{ua}; $req=$self->{req}; # print "(* grabbing *)\n"; my $response=$ua->request($req); if ($response->is_success) { my $c=$response->content; # print $c; if ($c =~ /<td.*?Chatterbox.*?<input[^>]*?>(.*?)<input/msi) { my $chatline=$1; $chatline=~s/[\n\r]//g; # Split in lines and remove html tags my @chatlines=grep { $_ } map { s/<[^>]+?>//g; decode_entities($_); $_ } split(/\s*<br>\s*/, $chatline); return @chatlines; } } else { return ("error"); } } sub getnewlines { my $self=shift; my $cache=$self->{cache}; my @allines=$self->getalllines(); my @newcache; # Don't use a regular cache, instead go back through them until we # find the first one that is in the cache. foreach (reverse @allines) { last if ($cache->[0] && $_ eq $cache->[0]); push @newcache, $_; } # Add the new lines to the cache unshift @$cache, @newcache; # Trim the cache to the last 50 lines splice(@$cache,50); return reverse @newcache; } 1; |
Back to
Code Catacombs