package Hatena::Screenshot; use strict; use Carp qw(carp croak); use WWW::Mechanize; sub new { my($class, %opt) = @_; my $self = bless {conf => { %opt }}, $class; if ($opt{cookie_jar}) { $self->{cookie_jar} = $opt{cookie_jar}; } elsif ($opt{cookies}) { $self->load_cookies; } elsif (!$opt{login}) { croak 'Please set option for cookies / login'; } croak 'Please set option for login' unless $opt{login}; $self->{mech} = WWW::Mechanize->new(cookie_jar => $self->{cookie_jar}); $self->{mech}->agent_alias( "Windows IE 6" ); if (!$self->{cookie_jar} && $opt{login}) { croak 'Please set login option for id & password' unless $opt{login}->{id} && $opt{login}->{password}; $self->hatena_login; } $self->{conf}->{date} = '00000000' unless $opt{date} =~ /^\d{8,8}$/; $self->_edit; $self; } sub hatena_login { my $self = shift; # not supported of normal login. } sub load_cookies { my $self = shift; require HTTP::Cookies::Guess; $self->{cookie_jar} = HTTP::Cookies::Guess->create($self->{conf}->{cookies}); } sub _edit { my $self = shift; my $res = $self->{mech}->get('http://d.hatena.ne.jp/' . $self->{conf}->{login}->{id} . '/edit?date=' . $self->{conf}->{date}); croak 'remote server error.' unless $self->{mech}->success; die 'login failed.' unless $res->content =~ m!