diff options
Diffstat (limited to 'bucky2/lib/Rest.pm')
| -rw-r--r-- | bucky2/lib/Rest.pm | 183 |
1 files changed, 183 insertions, 0 deletions
diff --git a/bucky2/lib/Rest.pm b/bucky2/lib/Rest.pm new file mode 100644 index 0000000..076a434 --- /dev/null +++ b/bucky2/lib/Rest.pm @@ -0,0 +1,183 @@ +package Rest; +use Common; +use LWP; +use LWP::UserAgent; +use URI::Escape; +use WWW::Shorten; +use XML::Simple; +sub new + { + my ($class, $self) = @_; + my $self ||= {}; + bless $self, $class; + } +sub browser + { + my ($self) = @_; + if (! exists($self->{'browser'}) ) + { + $self->{'browser'} = new LWP::UserAgent; + $self->{'browser'}->agent("Mozilla/5.0 (compatible)"); + } + return $self->{'browser'}; + } +sub rest_post_raw + { + my ($self, $uri, $data) = @_; + my $qs = $self->qs_encode($data); + my $r = HTTP::Request->new(POST => $uri); + $r->content_type('application/x-www-form-urlencoded'); + $r->content($qs); + my $re = $self->browser->request($r); + my $content = $re->content(); + return $content; + } +sub rest_post + { + my ($self, $uri, $data) = @_; + my $qs = $self->qs_encode($data); + return undef unless $qs && $self->do_auth; + my $r = HTTP::Request->new(POST => $uri); + if ($self->do_auth) + { $r->authorization_basic($self->auth); } + $r->content_type('application/x-www-form-urlencoded'); + $r->content($qs); + my $re = $self->browser->request($r); + my $xml = $re->content(); + my $ref = XMLin($xml); + return $ref; + } +sub proxy_uri + { + my ($self, $uri) = @_; + my $random_proxy = $self->proxy_random; + my $proxy_uri = "http://" . $random_proxy . "/browse.php?u=" . uri_escape($uri); + return $proxy_uri; + } +sub proxy_load + { + my ($self) = @_; + my $proxies = $self->read_data("../tmp/proxies.txt"); + my @lines = split "\n", $proxies; + my $real = []; + map { push @$real, $_ if $_ } @lines; + return $real; + } +sub rest_get_proxy + { + my ($self, $uri, $data) = @_; + my $proxy_uri = $self->proxy_uri($uri); + return $self->rest_get_raw($proxy_uri, $data, \&_rest_get_raw_callback); + } +sub rest_get_raw + { + my ($self, $uri, $data) = @_; + return $self->rest_get($uri, $data, \&_rest_get_raw_callback); + } +sub rest_get_xml + { + my ($self, $uri, $data) = @_; + return $self->rest_get($uri, $data, \&_rest_get_xml_callback); + } +sub _rest_get_raw_callback + { + my ($self, $data) = @_; + return $data; + } +sub _rest_get_xml_callback + { + my ($self, $data) = @_; + return XMLin($data); + } +sub rest_get + { + my ($self, $uri, $data, $callback) = @_; + $callback ||= \&_rest_get_xml_callback; + my $qs = $self->qs_encode($data); + if ($qs) + { $uri = $uri . "?" . $qs; } + my $r = HTTP::Request->new(GET => $uri); + if ($self->do_auth) + { $r->authorization_basic($self->auth); } +print "getting $uri\n"; + my $re = $self->browser->request($r); + my $data = $re->content(); + my $ref = $self->$callback($data); + return $ref; + } +sub qs_encode + { + my ($self, $data) = @_; + my $qs = []; + foreach my $key (keys %$data) + { + my $val = uri_escape($data->{$key}); + next unless $val; + push @$qs, "$key=$val"; + } + return undef unless scalar(@$qs); + my $encoded = join "&", @$qs; + return $encoded; + } +sub auth + { + my ($self, $user, $pass) = @_; + if ($user && $pass) + { + $self->{'user'} = $user; + $self->{'pass'} = $pass; + } + else + { + $user = $self->{'user'}; + $pass = $self->{'pass'}; + } + return ($user, $pass); + } +sub do_auth + { + my ($self) = @_; + if ($self->{'user'} && $self->{'pass'}) + { return 1; } + return undef; + } +sub user + { + my ($self) = @_; + if ($self->do_auth) + { return $self->{'user'}; } + return undef; + + } +sub read_xml + { + my ($self, $file) = @_; + my $data = $self->read_data($file); + return XMLin($data); + } +sub write_xml + { + my ($self, $file, $data) = @_; + my $xml = XMLout($data); + $self->write_data($file, $xml); + } +sub read_data + { + my ($self, $file) = @_; + return undef unless -e $file; + open IN, $file or die $!; + my @lines = <IN>; + close IN; + my $out = join "", @lines; + print "Read " . length($out) . " bytes\n"; + return $out; + } +sub write_data + { + my ($self, $file, $data) = @_; + open OUT, ">$file" or die $!; + print OUT $data; + close OUT; + print "Wrote " . length($data) . " bytes\n"; + } +1; |
