summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--dist.ini55
-rw-r--r--lib/Net/HTTP/Spore/Middleware/OpenCalais.pm37
2 files changed, 92 insertions, 0 deletions
diff --git a/dist.ini b/dist.ini
new file mode 100644
index 0000000..71f406a
--- /dev/null
+++ b/dist.ini
@@ -0,0 +1,55 @@
+name    = Net-HTTP-Spore-Middleware-OpenCalais
+author  = franck cuny <franck@lumberjaph.net>
+license = Perl_5
+copyright_holder = franck cuny
+copyright_year   = 2011
+
+; -- static meta-information
+[AutoMetaResources]
+bugtracker.github = user:franckcuny
+repository.github = user:franckcuny
+homepage = http://search.cpan.org/dist/%{dist}
+
+; -- fetch & generate files
+[GatherDir]
+
+; -- tests
+[NoTabsTests]
+[EOLTests]
+[CompileTests]
+[CriticTests]
+[MetaTests]
+[PodCoverageTests]
+[ExtraTests]
+
+; -- remove files
+[PruneCruft]
+[ManifestSkip]
+
+; -- get prereqs
+[AutoPrereqs]
+
+; -- munge files
+[NextRelease]
+[PkgVersion]
+[PodWeaver]
+[Prepender]
+copyright = 1
+
+; -- dynamic meta information
+; [InstallDirs]
+[MetaProvides::Package]
+
+; -- generate meta files
+[License]
+[MakeMaker]
+[MetaYAML]
+[Readme]
+[Manifest]
+
+; -- release
+[ReadmeFromPod]
+[CheckChangeLog]
+first_version = 0.01
+[UploadToCPAN]
+[Twitter]
diff --git a/lib/Net/HTTP/Spore/Middleware/OpenCalais.pm b/lib/Net/HTTP/Spore/Middleware/OpenCalais.pm
new file mode 100644
index 0000000..fab78c7
--- /dev/null
+++ b/lib/Net/HTTP/Spore/Middleware/OpenCalais.pm
@@ -0,0 +1,37 @@
+package Net::HTTP::Spore::Middleware::OpenCalais;
+
+use Moose;
+use JSON;
+
+extends 'Net::HTTP::Spore::Middleware';
+
+has api_key => ( isa => 'Str', is => 'rw', predicate => 'has_api_key' );
+has content_type =>
+  ( isa => 'Str', is => 'rw', lazy => 1, default => 'text/raw' );
+
+has _json_parser => (
+    is      => 'rw',
+    isa     => 'JSON',
+    lazy    => 1,
+    default => sub { JSON->new->utf8(1)->allow_nonref },
+);
+
+sub call {
+    my ($self, $req) = @_;
+
+    $req->header('x-calais-licenseID' => $self->api_key);
+    $req->header('content-type' => $self->content_type);
+    $req->header('outputformat' => 'application/json');
+
+    return $self->response_cb(
+        sub{
+            my $res = shift;
+            if ($res->body){
+                my $content = $self->_json_parser->decode($res->body);
+                $res->body($content);
+            }
+        }
+    );
+}
+
+1;