/usr/local/CPAN/WWW-Google-Groups/WWW/Google/Groups/Thread.pm
# $Id: Thread.pm,v 1.13 2003/09/22 03:14:55 cvspub Exp $
package WWW::Google::Groups::Thread;
use strict;
use WWW::Google::Groups::Article;
use WWW::Google::Groups::Vars;
use Storable qw(dclone);
sub new {
my ($pkg, $arg, $thread) = @_;
my $hash = dclone $arg;
return unless defined $thread;
delete $hash->{_threads};
$hash->{_cur_thread} = $thread;
$hash->{_cur_thread}->{_url} = $hash->{_server}.$thread->{_url};
bless $hash, $pkg;
}
sub title() { $_[0]->{_cur_thread}->{_title} }
use WWW::Mechanize;
sub next_article {
my $self = shift;
my $type = shift;
if($self->{_goto_next_thread}){
$self->{_goto_next_thread} = 0;
return;
}
my $content;
if( !ref ($self->{_mids}) or !scalar @{$self->{_mids}}){
$self->{_agent}->agent_alias( $agent_alias[int rand(scalar @agent_alias)] );
$self->{_agent}->get($self->{_cur_thread}->{_url});
my @mids;
if($self->{_cur_thread}->{_url} !~ /selm=/o){
# get the left frame first
($content = $self->{_agent}->content) =~ /left src="(.+?)#s"/s;
$self->{_agent}->get($self->{_server}.$1);
my @links;
foreach my $link (
map{s/\x23link\d+$//o;$_}
grep {/\x23link\d+$/}
map{$_->url}
$self->{_agent}->links
){
push @links, $link unless $links[$#links-1] eq $link;
}
foreach my $link (@links){
$self->{_agent}->get($self->{_server}.$link);
foreach my $mlink (grep{!m,^http://,io}
grep{!/rnum=/o}
grep{/selm=/o}
map{$_->url}$self->{_agent}->links){
# print $mlink,$/;
$mlink =~ /selm=(.+?)$/o;
push @mids, $1;
}
}
}
else {
$self->{_cur_thread}->{_url} =~ /selm=(.+?)$/o;
push @mids, $1;
}
# use Data::Dumper;
# print Dumper \@mids;
$self->{_mids} = \@mids;
}
$self->{_goto_next_thread} = 1 if 1==scalar@{$self->{_mids}};
my $this_mid = shift @{$self->{_mids}};
$self->{_agent}->get($self->{_server}."/groups?selm=${this_mid}&output=gplain");
$type=~/raw/io?
$self->{_agent}->content() :
new WWW::Google::Groups::Article(\$self->{_agent}->content());
}
1;
__END__