summaryrefslogtreecommitdiff
path: root/bucky2/lib/Rest.pm
diff options
context:
space:
mode:
authorJules Laplace <carbon@melanarchy.org>2013-08-02 17:23:25 -0500
committerJules Laplace <carbon@melanarchy.org>2013-08-02 17:23:25 -0500
commite76b691e78e273226cba9284cb8cd22a423319ed (patch)
treea58d22f69869fe2bf3885f81bdda4952f87ff6d7 /bucky2/lib/Rest.pm
parent753f60c7d4769fa72d3b910e491f37db6f130898 (diff)
bucky2
Diffstat (limited to 'bucky2/lib/Rest.pm')
-rw-r--r--bucky2/lib/Rest.pm183
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;