Net-CampaignMonitor/lib/Net/CampaignMonitor.pm
package Net::CampaignMonitor;
use strict;
use 5.008005;
use REST::Client;
use Params::Util qw{_STRING _NONNEGINT _POSINT _HASH _HASHLIKE};
use JSON;
our $VERSION = '1.02';
sub new {
my ($class, $args) = @_;
my $self = bless($args, $class);
$self->{format} = 'json';
if ( $self->{secure} == 1) {
$self->{netloc} = 'api.createsend.com:443';
$self->{realm} = 'api.createsend.com';
$self->{protocol} = 'https://';
}
elsif ( $self->{secure} == 0) {
$self->{netloc} = 'api.createsend.com:80';
$self->{realm} = 'api.createsend.com';
$self->{protocol} = 'http://';
}
else {
$self->{netloc} = 'api.createsend.com:443';
$self->{realm} = 'api.createsend.com';
$self->{protocol} = 'https://';
}
unless( Params::Util::_POSINT($self->{timeout}) ) {
$self->{timeout} = 600;
}
if ( (exists $self->{api_key} ) && !( Params::Util::_STRING( $self->{api_key} )) ) {
Carp::croak("Missing or invalid api key");
}
if ( exists $self->{api_key} ) {
#create and initialise the rest client
$self->{client} = $self->create_rest_client();
$self->account_systemdate();
return $self;
}
else {
return $self;
}
}
sub create_rest_client {
my ($self) = @_;
my $client = REST::Client->new();
$client->getUseragent->credentials($self->{netloc}, $self->{realm}, $self->{api_key}, "");
$client->setFollow(1);
$client->setTimeout($self->{timeout});
return $client;
}
sub decode {
my $self = shift;
my $json = JSON->new->allow_nonref;
if ( length $_[0] == 0 ) {
return {};
}
else {
return $json->decode( $_[0] );
}
}
sub account_systemdate {
my ($self) = @_;
my $results;
$self->{client}->GET($self->{protocol}.$self->{realm}."/api/v3/systemdate.".$self->{format});
$results->{'response'} = $self->decode( $self->{client}->responseContent() );
$results->{'code'} = $self->{client}->responseCode();
$results->{'headers'} = $self->{client}->responseHeaders();
return $results;
}
sub account_clients {
if (scalar(@_) == 1) { #get the list of clients
my ($self) = @_;
my $results;
$self->{client}->GET($self->{protocol}.$self->{realm}."/api/v3/clients.".$self->{format});
$results->{'response'} = $self->decode( $self->{client}->responseContent() );
$results->{'code'} = $self->{client}->responseCode();
$results->{'headers'} = $self->{client}->responseHeaders();
return $results;
}
else { #create a new client
my $self = shift;
my %request = @_;
my $json_request = encode_json \%request;
my $results;
$self->{client}->POST($self->{protocol}.$self->{realm}."/api/v3/clients.".$self->{format}, $json_request);
$results->{'response'} = $self->decode( $self->{client}->responseContent() );
$results->{'code'} = $self->{client}->responseCode();
$results->{'headers'} = $self->{client}->responseHeaders();
return $results;
}
}
sub account_countries {
my ($self) = @_;
my $results;
$self->{client}->GET($self->{protocol}.$self->{realm}."/api/v3/countries.".$self->{format});
$results->{'response'} = $self->decode( $self->{client}->responseContent() );
$results->{'code'} = $self->{client}->responseCode();
$results->{'headers'} = $self->{client}->responseHeaders();
return $results;
}
sub account_timezones {
my ($self) = @_;
my $results;
$self->{client}->GET($self->{protocol}.$self->{realm}."/api/v3/timezones.".$self->{format});
$results->{'response'} = $self->decode( $self->{client}->responseContent() );
$results->{'code'} = $self->{client}->responseCode();
$results->{'headers'} = $self->{client}->responseHeaders();
return $results;
}
sub account_apikey {
my $self = shift;
my $siteurl = $_[0];
my $username = $_[1];
my $password = $_[2];
my $api_client = REST::Client->new();
my $results;
$api_client->getUseragent->credentials($self->{netloc}, $self->{protocol}.$self->{realm}."/api/v3/apikey.".$self->{format}, $username, $password);
$api_client->setFollow(1);
$api_client->setTimeout(60);
$api_client->GET($self->{protocol}.$self->{realm}."/api/v3/apikey.".$self->{format}."?siteurl=".$siteurl);
$results->{'response'} = $self->decode( $self->{client}->responseContent() );
$results->{'code'} = $api_client->responseCode();
$results->{'headers'} = $api_client->responseHeaders();
return $results;
}
sub account_addadmin{
my $self = shift;
my (%request) = @_;
my $json_request = encode_json \%request;
my $results;
$self->{client}->POST($self->{protocol}.$self->{realm}."/api/v3/admins.".$self->{format}, $json_request);
$results->{'response'} = $self->decode( $self->{client}->responseContent() );
$results->{'code'} = $self->{client}->responseCode();
$results->{'headers'} = $self->{client}->responseHeaders();
return $results;
}
sub account_updateadmin{
my $self = shift;
my (%request) = @_;
my $email = $request{email};
delete $request{email};
my $json_request = encode_json \%request;
my $results;
$self->{client}->PUT($self->{protocol}.$self->{realm}."/api/v3/admins.".$self->{format}."?email=".$email, $json_request);
$results->{'response'} = $self->decode( $self->{client}->responseContent() );
$results->{'code'} = $self->{client}->responseCode();
$results->{'headers'} = $self->{client}->responseHeaders();
return $results;
}
sub account_getadmins {
my $self = shift;
my $results;
$self->{client}->GET($self->{protocol}.$self->{realm}."/api/v3/admins.".$self->{format});
$results->{'response'} = $self->decode( $self->{client}->responseContent() );
$results->{'code'} = $self->{client}->responseCode();
$results->{'headers'} = $self->{client}->responseHeaders();
return $results;
}
sub account_getadmin{
my $self = shift;
my $email = $_[0];
my $results;
$self->{client}->GET($self->{protocol}.$self->{realm}."/api/v3/admins.".$self->{format}."?email=".$email);
$results->{'response'} = $self->decode( $self->{client}->responseContent() );
$results->{'code'} = $self->{client}->responseCode();
$results->{'headers'} = $self->{client}->responseHeaders();
return $results;
}
sub account_deleteadmin {
my $self = shift;
my $email = $_[0];
my $results;
$self->{client}->DELETE($self->{protocol}.$self->{realm}."/api/v3/admins.".$self->{format}."?email=".$email);
$results->{'response'} = $self->decode( $self->{client}->responseContent() );
$results->{'code'} = $self->{client}->responseCode();
$results->{'headers'} = $self->{client}->responseHeaders();
return $results;
}
sub account_setprimarycontact {
my $self = shift;
my $email = $_[0];
my $results;
$self->{client}->PUT($self->{protocol}.$self->{realm}."/api/v3/primarycontact.".$self->{format}."?email=".$email);
$results->{'response'} = $self->decode( $self->{client}->responseContent() );
$results->{'code'} = $self->{client}->responseCode();
$results->{'headers'} = $self->{client}->responseHeaders();
return $results;
}
sub account_getprimarycontact{
my $self = shift;
my $results;
$self->{client}->GET($self->{protocol}.$self->{realm}."/api/v3/primarycontact.".$self->{format});
$results->{'response'} = $self->decode( $self->{client}->responseContent() );
$results->{'code'} = $self->{client}->responseCode();
$results->{'headers'} = $self->{client}->responseHeaders();
return $results;
}
sub client_clientid {
my $self = shift;
my $client_id = $_[0];
my $results;
$self->{client}->GET($self->{protocol}.$self->{realm}."/api/v3/clients/".$client_id.".".$self->{format});
$results->{'response'} = $self->decode( $self->{client}->responseContent() );
$results->{'code'} = $self->{client}->responseCode();
$results->{'headers'} = $self->{client}->responseHeaders();
return $results;
}
sub client_campaigns {
my $self = shift;
my $client_id = $_[0];
my $results;
$self->{client}->GET($self->{protocol}.$self->{realm}."/api/v3/clients/".$client_id."/campaigns.".$self->{format});
$results->{'response'} = $self->decode( $self->{client}->responseContent() );
$results->{'code'} = $self->{client}->responseCode();
$results->{'headers'} = $self->{client}->responseHeaders();
return $results;
}
sub client_drafts {
my $self = shift;
my $client_id = $_[0];
my $results;
$self->{client}->GET($self->{protocol}.$self->{realm}."/api/v3/clients/".$client_id."/drafts.".$self->{format});
$results->{'response'} = $self->decode( $self->{client}->responseContent() );
$results->{'code'} = $self->{client}->responseCode();
$results->{'headers'} = $self->{client}->responseHeaders();
return $results;
}
sub client_lists {
my $self = shift;
my $client_id = $_[0];
my $results;
$self->{client}->GET($self->{protocol}.$self->{realm}."/api/v3/clients/".$client_id."/lists.".$self->{format});
$results->{'response'} = $self->decode( $self->{client}->responseContent() );
$results->{'code'} = $self->{client}->responseCode();
$results->{'headers'} = $self->{client}->responseHeaders();
return $results;
}
sub client_segments {
my $self = shift;
my $client_id = $_[0];
my $results;
$self->{client}->GET($self->{protocol}.$self->{realm}."/api/v3/clients/".$client_id."/segments.".$self->{format});
$results->{'response'} = $self->decode( $self->{client}->responseContent() );
$results->{'code'} = $self->{client}->responseCode();
$results->{'headers'} = $self->{client}->responseHeaders();
return $results;
}
sub client_suppressionlist {
my $self = shift;
my (%input) = @_;
unless( Params::Util::_POSINT($input{page}) ) {
$input{page} = 1;
}
unless( Params::Util::_POSINT($input{pagesize}) && $input{pagesize} >= 10 && $input{pagesize} <= 1000) {
$input{pagesize} = 1000;
}
unless( Params::Util::_STRING($input{orderfield}) && ($input{orderfield} eq 'email' || $input{orderfield} eq 'name' || $input{orderfield} eq 'date')) {
$input{orderfield} = 'email';
}
unless( Params::Util::_STRING($input{orderdirection}) && ($input{orderdirection} eq 'asc' || $input{orderdirection} eq 'desc')) {
$input{orderdirection} = 'asc';
}
my $results;
$self->{client}->GET($self->{protocol}.$self->{realm}."/api/v3/clients/".$input{clientid}."/suppressionlist.".$self->{format}."?page=".$input{page}."&pagesize=".$input{pagesize}."&orderfield=".$input{orderfield}."&orderdirection=".$input{orderdirection});
$results->{'response'} = $self->decode( $self->{client}->responseContent() );
$results->{'code'} = $self->{client}->responseCode();
$results->{'headers'} = $self->{client}->responseHeaders();
return $results;
}
sub client_templates {
my $self = shift;
my $client_id = $_[0];
my $results;
$self->{client}->GET($self->{protocol}.$self->{realm}."/api/v3/clients/".$client_id."/templates.".$self->{format});
$results->{'response'} = $self->decode( $self->{client}->responseContent() );
$results->{'code'} = $self->{client}->responseCode();
$results->{'headers'} = $self->{client}->responseHeaders();
return $results;
}
sub client_setbasics {
my $self = shift;
my (%request) = @_;
my $client_id = $request{clientid};
delete $request{clientid};
my $json_request = encode_json \%request;
my $results;
$self->{client}->PUT($self->{protocol}.$self->{realm}."/api/v3/clients/".$client_id."/setbasics.".$self->{format}, $json_request);
$results->{'response'} = $self->decode( $self->{client}->responseContent() );
$results->{'code'} = $self->{client}->responseCode();
$results->{'headers'} = $self->{client}->responseHeaders();
return $results;
}
sub client_setaccess {
my $self = shift;
my (%request) = @_;
my $client_id = $request{clientid};
delete $request{clientid};
my $json_request = encode_json \%request;
my $results;
$self->{client}->PUT($self->{protocol}.$self->{realm}."/api/v3/clients/".$client_id."/setaccess.".$self->{format}, $json_request);
$results->{'response'} = $self->decode( $self->{client}->responseContent() );
$results->{'code'} = $self->{client}->responseCode();
$results->{'headers'} = $self->{client}->responseHeaders();
return $results;
}
sub client_setpaygbilling {
my $self = shift;
my (%request) = @_;
my $client_id = $request{clientid};
delete $request{clientid};
my $json_request = encode_json \%request;
my $results;
$self->{client}->PUT($self->{protocol}.$self->{realm}."/api/v3/clients/".$client_id."/setpaygbilling.".$self->{format}, $json_request);
$results->{'response'} = $self->decode( $self->{client}->responseContent() );
$results->{'code'} = $self->{client}->responseCode();
$results->{'headers'} = $self->{client}->responseHeaders();
return $results;
}
sub client_setmonthlybilling {
my $self = shift;
my (%request) = @_;
my $client_id = $request{clientid};
delete $request{clientid};
my $json_request = encode_json \%request;
my $results;
$self->{client}->PUT($self->{protocol}.$self->{realm}."/api/v3/clients/".$client_id."/setmonthlybilling.".$self->{format}, $json_request);
$results->{'response'} = $self->decode( $self->{client}->responseContent() );
$results->{'code'} = $self->{client}->responseCode();
$results->{'headers'} = $self->{client}->responseHeaders();
return $results;
}
sub client_delete {
my $self = shift;
my $client_id = $_[0];
my $results;
$self->{client}->DELETE($self->{protocol}.$self->{realm}."/api/v3/clients/".$client_id.".".$self->{format});
$results->{'response'} = $self->decode( $self->{client}->responseContent() );
$results->{'code'} = $self->{client}->responseCode();
$results->{'headers'} = $self->{client}->responseHeaders();
return $results;
}
sub client_addperson {
my $self = shift;
my (%request) = @_;
my $client_id = $request{clientid};
delete $request{clientid};
my $json_request = encode_json \%request;
my $results;
$self->{client}->POST($self->{protocol}.$self->{realm}."/api/v3/clients/".$client_id."/people.".$self->{format}, $json_request);
$results->{'response'} = $self->decode( $self->{client}->responseContent() );
$results->{'code'} = $self->{client}->responseCode();
$results->{'headers'} = $self->{client}->responseHeaders();
return $results;
}
sub client_updateperson {
my $self = shift;
my (%request) = @_;
my $client_id = $request{clientid};
my $email = $request{email};
delete $request{clientid};
delete $request{email};
my $json_request = encode_json \%request;
my $results;
$self->{client}->PUT($self->{protocol}.$self->{realm}."/api/v3/clients/".$client_id."/people.".$self->{format}."?email=".$email, $json_request);
$results->{'response'} = $self->decode( $self->{client}->responseContent() );
$results->{'code'} = $self->{client}->responseCode();
$results->{'headers'} = $self->{client}->responseHeaders();
return $results;
}
sub client_getpeople {
my $self = shift;
my $client_id = $_[0];
my $results;
$self->{client}->GET($self->{protocol}.$self->{realm}."/api/v3/clients/".$client_id."/people.".$self->{format});
$results->{'response'} = $self->decode( $self->{client}->responseContent() );
$results->{'code'} = $self->{client}->responseCode();
$results->{'headers'} = $self->{client}->responseHeaders();
return $results;
}
sub client_getperson{
my $self = shift;
my (%request) = @_;
my $client_id = $request{clientid};
my $email = $request{email};
my $results;
$self->{client}->GET($self->{protocol}.$self->{realm}."/api/v3/clients/".$client_id."/people.".$self->{format}."?email=".$email);
$results->{'response'} = $self->decode( $self->{client}->responseContent() );
$results->{'code'} = $self->{client}->responseCode();
$results->{'headers'} = $self->{client}->responseHeaders();
return $results;
}
sub client_deleteperson {
my $self = shift;
my (%request) = @_;
my $client_id = $request{clientid};
my $email = $request{email};
my $results;
$self->{client}->DELETE($self->{protocol}.$self->{realm}."/api/v3/clients/".$client_id."/people.".$self->{format}."?email=".$email);
$results->{'response'} = $self->decode( $self->{client}->responseContent() );
$results->{'code'} = $self->{client}->responseCode();
$results->{'headers'} = $self->{client}->responseHeaders();
return $results;
}
sub client_setprimarycontact {
my $self = shift;
my (%request) = @_;
my $client_id = $request{clientid};
my $email = $request{email};
my $results;
$self->{client}->PUT($self->{protocol}.$self->{realm}."/api/v3/clients/".$client_id."/primarycontact.".$self->{format}."?email=".$email);
$results->{'response'} = $self->decode( $self->{client}->responseContent() );
$results->{'code'} = $self->{client}->responseCode();
$results->{'headers'} = $self->{client}->responseHeaders();
return $results;
}
sub client_getprimarycontact{
my $self = shift;
my $client_id = $_[0];
my $results;
$self->{client}->GET($self->{protocol}.$self->{realm}."/api/v3/clients/".$client_id."/primarycontact.".$self->{format});
$results->{'response'} = $self->decode( $self->{client}->responseContent() );
$results->{'code'} = $self->{client}->responseCode();
$results->{'headers'} = $self->{client}->responseHeaders();
return $results;
}
sub lists { #create a list
my $self = shift;
my (%request) = @_;
my $client_id = $request{clientid};
delete $request{clientid};
my $json_request = encode_json \%request;
my $results;
$self->{client}->POST($self->{protocol}.$self->{realm}."/api/v3/lists/".$client_id.".".$self->{format}, $json_request);
$results->{'response'} = $self->decode( $self->{client}->responseContent() );
$results->{'code'} = $self->{client}->responseCode();
$results->{'headers'} = $self->{client}->responseHeaders();
return $results;
}
sub list_listid {
my $self = shift;
if ( scalar(@_) == 1 ) { #get the list details
my $list_id = $_[0];
my $results;
$self->{client}->GET($self->{protocol}.$self->{realm}."/api/v3/lists/".$list_id.".".$self->{format});
$results->{'response'} = $self->decode( $self->{client}->responseContent() );
$results->{'code'} = $self->{client}->responseCode();
$results->{'headers'} = $self->{client}->responseHeaders();
return $results;
}
else { #updating a list
my (%request) = @_;
my $list_id = $request{listid};
delete $request{listid};
my $json_request = encode_json \%request;
my $results;
$self->{client}->PUT($self->{protocol}.$self->{realm}."/api/v3/lists/".$list_id.".".$self->{format}, $json_request);
$results->{'response'} = $self->decode( $self->{client}->responseContent() );
$results->{'code'} = $self->{client}->responseCode();
$results->{'headers'} = $self->{client}->responseHeaders();
return $results;
}
}
sub list_stats {
my $self = shift;
my $list_id = $_[0];
my $results;
$self->{client}->GET($self->{protocol}.$self->{realm}."/api/v3/lists/".$list_id."/stats.".$self->{format});
$results->{'response'} = $self->decode( $self->{client}->responseContent() );
$results->{'code'} = $self->{client}->responseCode();
$results->{'headers'} = $self->{client}->responseHeaders();
return $results;
}
sub list_customfields {
my $self = shift;
if (scalar(@_) == 1) { #get the custom field details
my $list_id = $_[0];
my $results;
$self->{client}->GET($self->{protocol}.$self->{realm}."/api/v3/lists/".$list_id."/customfields.".$self->{format});
$results->{'response'} = $self->decode( $self->{client}->responseContent() );
$results->{'code'} = $self->{client}->responseCode();
$results->{'headers'} = $self->{client}->responseHeaders();
return $results;
}
else { #creating a custom field
my (%request) = @_;
my $list_id = $request{listid};
delete $request{listid};
my $json_request = encode_json \%request;
my $results;
$self->{client}->POST($self->{protocol}.$self->{realm}."/api/v3/lists/".$list_id."/customfields.".$self->{format}, $json_request);
$results->{'response'} = $self->decode( $self->{client}->responseContent() );
$results->{'code'} = $self->{client}->responseCode();
$results->{'headers'} = $self->{client}->responseHeaders();
return $results;
}
}
sub list_segments {
my $self = shift;
my $list_id = $_[0];
my $results;
$self->{client}->GET($self->{protocol}.$self->{realm}."/api/v3/lists/".$list_id."/segments.".$self->{format});
$results->{'response'} = $self->decode( $self->{client}->responseContent() );
$results->{'code'} = $self->{client}->responseCode();
$results->{'headers'} = $self->{client}->responseHeaders();
return $results;
}
sub list_active {
my $self = shift;
my (%input) = @_;
unless( Params::Util::_POSINT($input{page}) ) {
$input{page} = 1;
}
unless( Params::Util::_POSINT($input{pagesize}) && $input{pagesize} >= 10 && $input{pagesize} <= 1000) {
$input{pagesize} = 1000;
}
unless( Params::Util::_STRING($input{orderfield}) && ($input{orderfield} eq 'email' || $input{orderfield} eq 'name' || $input{orderfield} eq 'date')) {
$input{orderfield} = 'date';
}
unless( Params::Util::_STRING($input{orderdirection}) && ($input{orderdirection} eq 'asc' || $input{orderdirection} eq 'desc')) {
$input{orderdirection} = 'asc';
}
my $results;
$self->{client}->GET($self->{protocol}.$self->{realm}."/api/v3/lists/".$input{listid}."/active.".$self->{format}."?date=".$input{date}."&page=".$input{page}."&pagesize=".$input{pagesize}."&orderfield=".$input{orderfield}."&orderdirection=".$input{orderdirection});
$results->{'response'} = $self->decode( $self->{client}->responseContent() );
$results->{'code'} = $self->{client}->responseCode();
$results->{'headers'} = $self->{client}->responseHeaders();
return $results;
}
sub list_unsubscribed {
my $self = shift;
my (%input) = @_;
unless( Params::Util::_POSINT($input{page}) ) {
$input{page} = 1;
}
unless( Params::Util::_POSINT($input{pagesize}) && $input{pagesize} >= 10 && $input{pagesize} <= 1000) {
$input{pagesize} = 1000;
}
unless( Params::Util::_STRING($input{orderfield}) && ($input{orderfield} eq 'email' || $input{orderfield} eq 'name' || $input{orderfield} eq 'date')) {
$input{orderfield} = 'date';
}
unless( Params::Util::_STRING($input{orderdirection}) && ($input{orderdirection} eq 'asc' || $input{orderdirection} eq 'desc')) {
$input{orderdirection} = 'asc';
}
my $results;
$self->{client}->GET($self->{protocol}.$self->{realm}."/api/v3/lists/".$input{listid}."/unsubscribed.".$self->{format}."?date=".$input{date}."&page=".$input{page}."&pagesize=".$input{pagesize}."&orderfield=".$input{orderfield}."&orderdirection=".$input{orderdirection});
$results->{'response'} = $self->decode( $self->{client}->responseContent() );
$results->{'code'} = $self->{client}->responseCode();
$results->{'headers'} = $self->{client}->responseHeaders();
return $results;
}
sub list_bounced {
my $self = shift;
my (%input) = @_;
unless( Params::Util::_POSINT($input{page}) ) {
$input{page} = 1;
}
unless( Params::Util::_POSINT($input{pagesize}) && $input{pagesize} >= 10 && $input{pagesize} <= 1000) {
$input{pagesize} = 1000;
}
unless( Params::Util::_STRING($input{orderfield}) && ($input{orderfield} eq 'email' || $input{orderfield} eq 'name' || $input{orderfield} eq 'date')) {
$input{orderfield} = 'date';
}
unless( Params::Util::_STRING($input{orderdirection}) && ($input{orderdirection} eq 'asc' || $input{orderdirection} eq 'desc')) {
$input{orderdirection} = 'asc';
}
my $results;
$self->{client}->GET($self->{protocol}.$self->{realm}."/api/v3/lists/".$input{listid}."/bounced.".$self->{format}."?date=".$input{date}."&page=".$input{page}."&pagesize=".$input{pagesize}."&orderfield=".$input{orderfield}."&orderdirection=".$input{orderdirection});
$results->{'response'} = $self->decode( $self->{client}->responseContent() );
$results->{'code'} = $self->{client}->responseCode();
$results->{'headers'} = $self->{client}->responseHeaders();
return $results;
}
sub list_options {
my $self = shift;
my (%request) = @_;
my $list_id = $request{listid};
my $customfield_key = $request{customfieldkey};
delete $request{listid};
delete $request{customfieldkey};
my $json_request = encode_json \%request;
my $results;
$self->{client}->PUT($self->{protocol}.$self->{realm}."/api/v3/lists/".$list_id."/customfields/".$customfield_key."/options.".$self->{format}, $json_request);
$results->{'response'} = $self->decode( $self->{client}->responseContent() );
$results->{'code'} = $self->{client}->responseCode();
$results->{'headers'} = $self->{client}->responseHeaders();
return $results;
}
sub list_delete_customfieldkey {
my $self = shift;
my (%request) = @_;
my $list_id = $request{listid};
my $customfield_key = $request{customfieldkey};
my $results;
$self->{client}->DELETE($self->{protocol}.$self->{realm}."/api/v3/lists/".$list_id."/customfields/".$customfield_key.".".$self->{format});
$results->{'response'} = $self->decode( $self->{client}->responseContent() );
$results->{'code'} = $self->{client}->responseCode();
$results->{'headers'} = $self->{client}->responseHeaders();
return $results;
}
sub list_delete {
my $self = shift;
my $list_id = $_[0];
my $results;
$self->{client}->DELETE($self->{protocol}.$self->{realm}."/api/v3/lists/".$list_id.".".$self->{format});
$results->{'response'} = $self->decode( $self->{client}->responseContent() );
$results->{'code'} = $self->{client}->responseCode();
$results->{'headers'} = $self->{client}->responseHeaders();
return $results;
}
sub list_webhooks {
my $self = shift;
if (scalar(@_) == 1) { #get the list of webhooks
my $list_id = $_[0];
my $results;
$self->{client}->GET($self->{protocol}.$self->{realm}."/api/v3/lists/".$list_id."/webhooks.".$self->{format});
$results->{'response'} = $self->decode( $self->{client}->responseContent() );
$results->{'code'} = $self->{client}->responseCode();
$results->{'headers'} = $self->{client}->responseHeaders();
return $results;
}
else { #create a new webhook
my (%request) = @_;
my $list_id = $request{listid};
delete $request{listid};
my $json_request = encode_json \%request;
my $results;
$self->{client}->POST($self->{protocol}.$self->{realm}."/api/v3/lists/".$list_id."/webhooks.".$self->{format}, $json_request);
$results->{'response'} = $self->decode( $self->{client}->responseContent() );
$results->{'code'} = $self->{client}->responseCode();
$results->{'headers'} = $self->{client}->responseHeaders();
return $results;
}
}
sub list_test {
my $self = shift;
my (%request) = @_;
my $list_id = $request{listid};
my $webhook_id = $request{webhookid};
my $results;
$self->{client}->GET($self->{protocol}.$self->{realm}."/api/v3/lists/".$list_id."/webhooks/".$webhook_id."/test.".$self->{format});
$results->{'response'} = $self->decode( $self->{client}->responseContent() );
$results->{'code'} = $self->{client}->responseCode();
$results->{'headers'} = $self->{client}->responseHeaders();
return $results;
}
sub list_delete_webhook {
my $self = shift;
my (%request) = @_;
my $list_id = $request{listid};
my $webhook_id = $request{webhookid};
my $results;
$self->{client}->DELETE($self->{protocol}.$self->{realm}."/api/v3/lists/".$list_id."/webhooks/".$webhook_id.".".$self->{format});
$results->{'response'} = $self->decode( $self->{client}->responseContent() );
$results->{'code'} = $self->{client}->responseCode();
$results->{'headers'} = $self->{client}->responseHeaders();
return $results;
}
sub list_activate {
my $self = shift;
my (%request) = @_;
my $list_id = $request{listid};
my $webhook_id = $request{webhookid};
my $results;
$self->{client}->PUT($self->{protocol}.$self->{realm}."/api/v3/lists/".$list_id."/webhooks/".$webhook_id."/activate.".$self->{format});
$results->{'response'} = $self->decode( $self->{client}->responseContent() );
$results->{'code'} = $self->{client}->responseCode();
$results->{'headers'} = $self->{client}->responseHeaders();
return $results;
}
sub list_deactivate {
my $self = shift;
my (%request) = @_;
my $list_id = $request{listid};
my $webhook_id = $request{webhookid};
my $results;
$self->{client}->PUT($self->{protocol}.$self->{realm}."/api/v3/lists/".$list_id."/webhooks/".$webhook_id."/deactivate.".$self->{format});
$results->{'response'} = $self->decode( $self->{client}->responseContent() );
$results->{'code'} = $self->{client}->responseCode();
$results->{'headers'} = $self->{client}->responseHeaders();
return $results;
}
sub segments {
my $self = shift;
my (%request) = @_;
my $list_id = $request{listid};
delete $request{listid};
my $json_request = encode_json \%request;
my $results;
$self->{client}->POST($self->{protocol}.$self->{realm}."/api/v3/segments/".$list_id.".".$self->{format}, $json_request);
$results->{'response'} = $self->decode( $self->{client}->responseContent() );
$results->{'code'} = $self->{client}->responseCode();
$results->{'headers'} = $self->{client}->responseHeaders();
return $results;
}
sub segment_segmentid {
my $self = shift;
if (scalar(@_) == 1) { #get the segment details
my $segment_id = $_[0];
my $results;
$self->{client}->GET($self->{protocol}.$self->{realm}."/api/v3/segments/".$segment_id.".".$self->{format});
$results->{'response'} = $self->decode( $self->{client}->responseContent() );
$results->{'code'} = $self->{client}->responseCode();
$results->{'headers'} = $self->{client}->responseHeaders();
return $results;
}
else { #update the segment
my (%request) = @_;
my $segment_id = $request{segmentid};
delete $request{segmentid};
my $json_request = encode_json \%request;
my $results;
$self->{client}->PUT($self->{protocol}.$self->{realm}."/api/v3/segments/".$segment_id.".".$self->{format}, $json_request);
$results->{'response'} = $self->decode( $self->{client}->responseContent() );
$results->{'code'} = $self->{client}->responseCode();
$results->{'headers'} = $self->{client}->responseHeaders();
return $results;
}
}
sub segment_rules {
my $self = shift;
my (%request) = @_;
my $segment_id = $request{segmentid};
delete $request{segmentid};
my $json_request = encode_json \%request;
my $results;
$self->{client}->POST($self->{protocol}.$self->{realm}."/api/v3/segments/".$segment_id."/rules.".$self->{format}, $json_request);
$results->{'response'} = $self->decode( $self->{client}->responseContent() );
$results->{'code'} = $self->{client}->responseCode();
$results->{'headers'} = $self->{client}->responseHeaders();
return $results;
}
sub segment_active {
my $self = shift;
my (%input) = @_;
unless( Params::Util::_POSINT($input{page}) ) {
$input{page} = 1;
}
unless( Params::Util::_POSINT($input{pagesize}) && $input{pagesize} >= 10 && $input{pagesize} <= 1000) {
$input{pagesize} = 1000;
}
unless( Params::Util::_STRING($input{orderfield}) && ($input{orderfield} eq 'email' || $input{orderfield} eq 'name' || $input{orderfield} eq 'date')) {
$input{orderfield} = 'date';
}
unless( Params::Util::_STRING($input{orderdirection}) && ($input{orderdirection} eq 'asc' || $input{orderdirection} eq 'desc')) {
$input{orderdirection} = 'asc';
}
my $results;
$self->{client}->GET($self->{protocol}.$self->{realm}."/api/v3/segments/".$input{segmentid}."/active.".$self->{format}."?date=".$input{date}."&page=".$input{page}."&pagesize=".$input{pagesize}."&orderfield=".$input{orderfield}."&orderdirection=".$input{orderdirection});
$results->{'response'} = $self->decode( $self->{client}->responseContent() );
$results->{'code'} = $self->{client}->responseCode();
$results->{'headers'} = $self->{client}->responseHeaders();
return $results;
}
sub segment_delete {
my $self = shift;
my $segment_id = $_[0];
my $results;
$self->{client}->DELETE($self->{protocol}.$self->{realm}."/api/v3/segments/".$segment_id.".".$self->{format});
$results->{'response'} = $self->decode( $self->{client}->responseContent() );
$results->{'code'} = $self->{client}->responseCode();
$results->{'headers'} = $self->{client}->responseHeaders();
return $results;
}
sub segment_delete_rules {
my $self = shift;
my $segment_id = $_[0];
my $results;
$self->{client}->DELETE($self->{protocol}.$self->{realm}."/api/v3/segments/".$segment_id."/rules.".$self->{format});
$results->{'response'} = $self->decode( $self->{client}->responseContent() );
$results->{'code'} = $self->{client}->responseCode();
$results->{'headers'} = $self->{client}->responseHeaders();
return $results;
}
sub subscribers {
my $self = shift;
my (%request) = @_;
my $list_id = $request{listid};
delete $request{listid};
if ($request{email}) { #get subscribers details
my $results;
$self->{client}->GET($self->{protocol}.$self->{realm}."/api/v3/subscribers/".$list_id.".".$self->{format}."?email=".$request{email});
$results->{'response'} = $self->decode( $self->{client}->responseContent() );
$results->{'code'} = $self->{client}->responseCode();
$results->{'headers'} = $self->{client}->responseHeaders();
return $results;
}
else { #add subscriber
my $json_request = encode_json \%request;
my $results;
$self->{client}->POST($self->{protocol}.$self->{realm}."/api/v3/subscribers/".$list_id.".".$self->{format}, $json_request);
$results->{'response'} = $self->decode( $self->{client}->responseContent() );
$results->{'code'} = $self->{client}->responseCode();
$results->{'headers'} = $self->{client}->responseHeaders();
return $results;
}
}
sub subscribers_import {
my $self = shift;
my (%request) = @_;
my $list_id = $request{listid};
delete $request{listid};
my $json_request = encode_json \%request;
my $results;
$self->{client}->POST($self->{protocol}.$self->{realm}."/api/v3/subscribers/".$list_id."/import.".$self->{format}, $json_request);
$results->{'response'} = $self->decode( $self->{client}->responseContent() );
$results->{'code'} = $self->{client}->responseCode();
$results->{'headers'} = $self->{client}->responseHeaders();
return $results;
}
sub subscribers_history {
my $self = shift;
my (%request) = @_;
my $list_id = $request{listid};
my $email = $request{email};
my $results;
$self->{client}->GET($self->{protocol}.$self->{realm}."/api/v3/subscribers/".$list_id."/history.".$self->{format}."?email=".$email);
$results->{'response'} = $self->decode( $self->{client}->responseContent() );
$results->{'code'} = $self->{client}->responseCode();
$results->{'headers'} = $self->{client}->responseHeaders();
return $results;
}
sub subscribers_unsubscribe {
my $self = shift;
my (%request) = @_;
my $list_id = $request{listid};
delete $request{listid};
my $json_request = encode_json \%request;
my $results;
$self->{client}->POST($self->{protocol}.$self->{realm}."/api/v3/subscribers/".$list_id."/unsubscribe.".$self->{format}, $json_request);
$results->{'response'} = $self->decode( $self->{client}->responseContent() );
$results->{'code'} = $self->{client}->responseCode();
$results->{'headers'} = $self->{client}->responseHeaders();
return $results;
}
sub templates {
my $self = shift;
if ( scalar(@_) == 1 ) { #get the template details
my $template_id = $_[0];
my $results;
$self->{client}->GET($self->{protocol}.$self->{realm}."/api/v3/templates/".$template_id.".".$self->{format});
$results->{'response'} = $self->decode( $self->{client}->responseContent() );
$results->{'code'} = $self->{client}->responseCode();
$results->{'headers'} = $self->{client}->responseHeaders();
return $results;
}
else {
my (%request) = @_;
if ( $request{templateid} ) { #update the template
my $template_id = $request{templateid};
delete $request{templateid};
my $json_request = encode_json \%request;
my $results;
$self->{client}->PUT($self->{protocol}.$self->{realm}."/api/v3/templates/".$template_id.".".$self->{format}, $json_request);
$results->{'response'} = $self->decode( $self->{client}->responseContent() );
$results->{'code'} = $self->{client}->responseCode();
$results->{'headers'} = $self->{client}->responseHeaders();
return $results;
}
elsif ( $request{clientid} ) { #create a template
my $client_id = $request{clientid};
delete $request{clientid};
my $json_request = encode_json \%request;
my $results;
$self->{client}->POST($self->{protocol}.$self->{realm}."/api/v3/templates/".$client_id.".".$self->{format}, $json_request);
$results->{'response'} = $self->decode( $self->{client}->responseContent() );
$results->{'code'} = $self->{client}->responseCode();
$results->{'headers'} = $self->{client}->responseHeaders();
return $results;
}
}
}
sub templates_delete {
my $self = shift;
my $template_id = $_[0];
my $results;
$self->{client}->DELETE($self->{protocol}.$self->{realm}."/api/v3/templates/".$template_id.".".$self->{format});
$results->{'response'} = $self->decode( $self->{client}->responseContent() );
$results->{'code'} = $self->{client}->responseCode();
$results->{'headers'} = $self->{client}->responseHeaders();
return $results;
}
sub campaigns {
my $self = shift;
my (%request) = @_;
my $client_id = $request{clientid};
delete $request{clientid};
my $json_request = encode_json \%request;
my $results;
$self->{client}->POST($self->{protocol}.$self->{realm}."/api/v3/campaigns/".$client_id.".".$self->{format}, $json_request);
$results->{'response'} = $self->decode( $self->{client}->responseContent() );
$results->{'code'} = $self->{client}->responseCode();
$results->{'headers'} = $self->{client}->responseHeaders();
return $results;
}
sub campaigns_send {
my $self = shift;
my (%request) = @_;
my $campaign_id = $request{campaignid};
delete $request{campaignid};
my $json_request = encode_json \%request;
my $results;
$self->{client}->POST($self->{protocol}.$self->{realm}."/api/v3/campaigns/".$campaign_id."/send.".$self->{format}, $json_request);
$results->{'response'} = $self->decode( $self->{client}->responseContent() );
$results->{'code'} = $self->{client}->responseCode();
$results->{'headers'} = $self->{client}->responseHeaders();
return $results;
}
sub campaigns_sendpreview {
my $self = shift;
my (%request) = @_;
my $campaign_id = $request{campaignid};
delete $request{campaignid};
my $json_request = encode_json \%request;
my $results;
$self->{client}->POST($self->{protocol}.$self->{realm}."/api/v3/campaigns/".$campaign_id."/sendpreview.".$self->{format}, $json_request);
$results->{'response'} = $self->decode( $self->{client}->responseContent() );
$results->{'code'} = $self->{client}->responseCode();
$results->{'headers'} = $self->{client}->responseHeaders();
return $results;
}
sub campaigns_summary {
my $self = shift;
my $campaign_id = $_[0];
my $results;
$self->{client}->GET($self->{protocol}.$self->{realm}."/api/v3/campaigns/".$campaign_id."/summary.".$self->{format});
$results->{'response'} = $self->decode( $self->{client}->responseContent() );
$results->{'code'} = $self->{client}->responseCode();
$results->{'headers'} = $self->{client}->responseHeaders();
return $results;
}
sub campaigns_listsandsegments {
my $self = shift;
my $campaign_id = $_[0];
my $results;
$self->{client}->GET($self->{protocol}.$self->{realm}."/api/v3/campaigns/".$campaign_id."/listsandsegments.".$self->{format});
$results->{'response'} = $self->decode( $self->{client}->responseContent() );
$results->{'code'} = $self->{client}->responseCode();
$results->{'headers'} = $self->{client}->responseHeaders();
return $results;
}
sub campaigns_recipients {
my $self = shift;
my (%input) = @_;
unless( Params::Util::_POSINT($input{page}) ) {
$input{page} = 1;
}
unless( Params::Util::_POSINT($input{pagesize}) && $input{pagesize} >= 10 && $input{pagesize} <= 1000) {
$input{pagesize} = 1000;
}
unless( Params::Util::_STRING($input{orderfield}) && ($input{orderfield} eq 'email' || $input{orderfield} eq 'name' || $input{orderfield} eq 'date')) {
$input{orderfield} = 'date';
}
unless( Params::Util::_STRING($input{orderdirection}) && ($input{orderdirection} eq 'asc' || $input{orderdirection} eq 'desc')) {
$input{orderdirection} = 'asc';
}
my $results;
$self->{client}->GET($self->{protocol}.$self->{realm}."/api/v3/campaigns/".$input{campaignid}."/recipients.".$self->{format}."?page=".$input{page}."&pagesize=".$input{pagesize}."&orderfield=".$input{orderfield}."&orderdirection=".$input{orderdirection});
$results->{'response'} = $self->decode( $self->{client}->responseContent() );
$results->{'code'} = $self->{client}->responseCode();
$results->{'headers'} = $self->{client}->responseHeaders();
return $results;
}
sub campaigns_bounces {
my $self = shift;
my (%input) = @_;
unless( Params::Util::_POSINT($input{page}) ) {
$input{page} = 1;
}
unless( Params::Util::_POSINT($input{pagesize}) && $input{pagesize} >= 10 && $input{pagesize} <= 1000) {
$input{pagesize} = 1000;
}
unless( Params::Util::_STRING($input{orderfield}) && ($input{orderfield} eq 'email' || $input{orderfield} eq 'name' || $input{orderfield} eq 'date')) {
$input{orderfield} = 'date';
}
unless( Params::Util::_STRING($input{orderdirection}) && ($input{orderdirection} eq 'asc' || $input{orderdirection} eq 'desc')) {
$input{orderdirection} = 'asc';
}
my $results;
$self->{client}->GET($self->{protocol}.$self->{realm}."/api/v3/campaigns/".$input{campaignid}."/bounces.".$self->{format}."?page=".$input{page}."&pagesize=".$input{pagesize}."&orderfield=".$input{orderfield}."&orderdirection=".$input{orderdirection});
$results->{'response'} = $self->decode( $self->{client}->responseContent() );
$results->{'code'} = $self->{client}->responseCode();
$results->{'headers'} = $self->{client}->responseHeaders();
return $results;
}
sub campaigns_opens {
my $self = shift;
my (%input) = @_;
unless( Params::Util::_POSINT($input{page}) ) {
$input{page} = 1;
}
unless( Params::Util::_POSINT($input{pagesize}) && $input{pagesize} >= 10 && $input{pagesize} <= 1000) {
$input{pagesize} = 1000;
}
unless( Params::Util::_STRING($input{orderfield}) && ($input{orderfield} eq 'email' || $input{orderfield} eq 'name' || $input{orderfield} eq 'date')) {
$input{orderfield} = 'date';
}
unless( Params::Util::_STRING($input{orderdirection}) && ($input{orderdirection} eq 'asc' || $input{orderdirection} eq 'desc')) {
$input{orderdirection} = 'asc';
}
my $results;
$self->{client}->GET($self->{protocol}.$self->{realm}."/api/v3/campaigns/".$input{campaignid}."/opens.".$self->{format}."?date=".$input{date}."&page=".$input{page}."&pagesize=".$input{pagesize}."&orderfield=".$input{orderfield}."&orderdirection=".$input{orderdirection});
$results->{'response'} = $self->decode( $self->{client}->responseContent() );
$results->{'code'} = $self->{client}->responseCode();
$results->{'headers'} = $self->{client}->responseHeaders();
return $results;
}
sub campaigns_clicks {
my $self = shift;
my (%input) = @_;
unless( Params::Util::_POSINT($input{page}) ) {
$input{page} = 1;
}
unless( Params::Util::_POSINT($input{pagesize}) && $input{pagesize} >= 10 && $input{pagesize} <= 1000) {
$input{pagesize} = 1000;
}
unless( Params::Util::_STRING($input{orderfield}) && ($input{orderfield} eq 'email' || $input{orderfield} eq 'name' || $input{orderfield} eq 'date')) {
$input{orderfield} = 'date';
}
unless( Params::Util::_STRING($input{orderdirection}) && ($input{orderdirection} eq 'asc' || $input{orderdirection} eq 'desc')) {
$input{orderdirection} = 'asc';
}
my $results;
$self->{client}->GET($self->{protocol}.$self->{realm}."/api/v3/campaigns/".$input{campaignid}."/clicks.".$self->{format}."?date=".$input{date}."&page=".$input{page}."&pagesize=".$input{pagesize}."&orderfield=".$input{orderfield}."&orderdirection=".$input{orderdirection});
$results->{'response'} = $self->decode( $self->{client}->responseContent() );
$results->{'code'} = $self->{client}->responseCode();
$results->{'headers'} = $self->{client}->responseHeaders();
return $results;
}
sub campaigns_unsubscribes {
my $self = shift;
my (%input) = @_;
unless( Params::Util::_POSINT($input{page}) ) {
$input{page} = 1;
}
unless( Params::Util::_POSINT($input{pagesize}) && $input{pagesize} >= 10 && $input{pagesize} <= 1000) {
$input{pagesize} = 1000;
}
unless( Params::Util::_STRING($input{orderfield}) && ($input{orderfield} eq 'email' || $input{orderfield} eq 'name' || $input{orderfield} eq 'date')) {
$input{orderfield} = 'date';
}
unless( Params::Util::_STRING($input{orderdirection}) && ($input{orderdirection} eq 'asc' || $input{orderdirection} eq 'desc')) {
$input{orderdirection} = 'asc';
}
my $results;
$self->{client}->GET($self->{protocol}.$self->{realm}."/api/v3/campaigns/".$input{campaignid}."/unsubscribes.".$self->{format}."?date=".$input{date}."&page=".$input{page}."&pagesize=".$input{pagesize}."&orderfield=".$input{orderfield}."&orderdirection=".$input{orderdirection});
$results->{'response'} = $self->decode( $self->{client}->responseContent() );
$results->{'code'} = $self->{client}->responseCode();
$results->{'headers'} = $self->{client}->responseHeaders();
return $results;
}
sub campaigns_delete {
my $self = shift;
my $campaign_id = $_[0];
my $results;
$self->{client}->DELETE($self->{protocol}.$self->{realm}."/api/v3/campaigns/".$campaign_id.".".$self->{format});
$results->{'response'} = $self->decode( $self->{client}->responseContent() );
$results->{'code'} = $self->{client}->responseCode();
$results->{'headers'} = $self->{client}->responseHeaders();
return $results;
}
1;
__END__
=pod
=head1 NAME
Net::CampaignMonitor - A Perl wrapper to the Campaign Monitor API.
=head1 VERSION
This documentation refers to version 1.02.
=head1 SYNOPSIS
use Net::CampaignMonitor;
my $cm = Net::CampaignMonitor->new({
api_key => 'abcd1234abcd1234abcd1234',
secure => 1,
timeout => 300,
});
=head1 DESCRIPTION
B<Net::CampaignMonitor> provides a Perl wrapper to the Campaign Monitor API (v3).
=head1 METHODS
All methods return a hash containing the Campaign Monitor response code, the headers and the actual response.
my %results = (
code => '',
response => '',
headers => ''
);
=head2 Construction and setup
=head2 new
my $cm = Net::CampaignMonitor->new({
api_key => 'abcd1234abcd1234abcd1234',
secure => 1,
timeout => 300,
});
Construct a new Net::CampaignMonitor object. Takes an optional hash reference of config options. The options are:
api_key - The api key for the Campaign Monitor account. If none is supplied the only function which will work is L<account_apikey|http://search.cpan.org/~jeffery/Net-CampaignMonitor-0.02/lib/Net/CampaignMonitor.pm#account_apikey>.
secure - Set to 1 (secure) or 0 (insecure) to determine whether to use http or https. Defaults to secure.
timeout - Set the timeout for the authentication. Defaults to 600 seconds.
=head2 account_clients
L<Getting your clients|http://www.campaignmonitor.com/api/account/#getting_your_clients>
my $clients = $cm->account_clients();
L<Creating a client|http://www.campaignmonitor.com/api/clients/#creating_a_client>
my $client = $cm->account_clients((
'CompanyName' => "ACME Limited",
'ContactName' => "John Doe",
'EmailAddress' => "john\@example.com",
'Country' => "Australia",
'TimeZone' => "(GMT+10:00) Canberra, Melbourne, Sydney"
));
=head2 account_apikey
L<Getting your API key|http://www.campaignmonitor.com/api/account/#getting_your_api_key>
my $apikey = $cm->account_apikey($siteurl, $username, $password)
=head2 account_countries
L<Getting valid countries|http://www.campaignmonitor.com/api/account/#getting_countries>
my $countries = $cm->account_countries();
=head2 account_timezones
L<Getting valid timezones|http://www.campaignmonitor.com/api/account/#getting_timezones>
my $timezones = $cm->account_timezones();
=head2 account_systemdate
L<Getting current date|http://www.campaignmonitor.com/api/account/#getting_systemdate>
my $systemdate = $cm->account_systemdate();
=head2 account_addadmin
L<Adds a new administrator to the account. An invitation will be sent to the new administrator via email.|http://www.campaignmonitor.com/api/account/#adding_an_admin>
my $person_email = $cm->account_addadmin((
'EmailAddress' => "jane\@example.com",
'Name' => "Jane Doe"
));
=head2 account_updateadmin
L<Updates the email address and/or name of an administrator.|http://www.campaignmonitor.com/api/account/#updating_an_admin>
my $admin_email = $cm->account_updateadmin((
'email' => "jane\@example.com",
'EmailAddress' => "jane.new\@example.com",
'Name' => "Jane Doeman"
));
=head2 account_getadmins
L<Contains a list of all (active or invited) administrators associated with a particular account.|http://www.campaignmonitor.com/api/account/#getting_account_admins>
my $admins = $cm->account_getadmins();
=head2 account_getadmin
L<Returns the details of a single administrator associated with an account. |http://www.campaignmonitor.com/api/account/#getting_account_admin>
my $admin_details = $cm->account_getadmin($email);
=head2 account_deleteadmin
L<Changes the status of an active administrator to a deleted administrator.|http://www.campaignmonitor.com/api/account/#deleting_an_admin>
my $result = $cm->account_deleteadmin($admin_email);
=head2 admin_setprimarycontact
L<Sets the primary contact for the account to be the administrator with the specified email address.|http://www.campaignmonitor.com/api/account/#setting_primary_contact>
my $primarycontact_email = $cm->account_setprimarycontact($admin_email);
=head2 account_getprimarycontact
L<Returns the email address of the administrator who is selected as the primary contact for this account.|http://www.campaignmonitor.com/api/account/#getting_primary_contact>
my $primarycontact_email = $cm->account_getprimarycontact();
=head2 campaigns
L<Creating a draft campaign|http://www.campaignmonitor.com/api/campaigns/#creating_a_campaign>
my $campaign = $cm->campaigns((
'clientid' => 'b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2',
'ListIDs' => [
'a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1',
'a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1'
],
'FromName' => 'My Name',
'TextUrl' => 'http://example.com/campaigncontent/index.txt',
'Subject' => 'My Subject',
'HtmlUrl' => 'http://example.com/campaigncontent/index.html',
'SegmentIDs' => [
'a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1',
'a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1'
],
'FromEmail' => 'myemail@mydomain.com',
'Name' => 'My Campaign Name',
'ReplyTo' => 'myemail@mydomain.com',
));
The clientid must be in the hash.
=head2 campaigns_send
L<Sending a draft campaign|http://www.campaignmonitor.com/api/campaigns/#sending_a_campaign>
my $send_campaign = $cm->campaigns_send((
'campaignid' => 'b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2',
'SendDate' => 'YYYY-MM-DD HH:MM',
'ConfirmationEmail' => 'myemail@mydomain.com',
));
The campaignid must be in the hash.
=head2 campaigns_sendpreview
L<Sending a campaign preview|http://www.campaignmonitor.com/api/campaigns/#sending_a_campaign_preview>
my $send_preview_campaign = $cm->campaigns_sendpreview(
'campaignid' => $campaign_id,
'PreviewRecipients' => [
'test1@example.com',
'test2@example.com'
],
'Personalize' => 'Random',
));
The campaignid must be in the hash.
=head2 campaigns_summary
L<Campaign summary|http://www.campaignmonitor.com/api/campaigns/#campaign_summary>
my $campaign_summary = $cm->campaigns_summary($campaign_id);
=head2 campaigns_listsandsegments
L<Campaign lists and segments|http://www.campaignmonitor.com/api/campaigns/#campaign_listsandsegments>
my $campaign_listsandsegments = $cm->campaigns_listsandsegments($campaign_id);
=head2 campaigns_recipients
L<Campaign recipients|http://www.campaignmonitor.com/api/campaigns/#campaign_recipients>
my $campaign_recipients = $cm->campaigns_recipients (
'campaignid' => $campaign_id,
'page' => '1',
'pagesize' => '100',
'orderfield' => 'email',
'orderdirection' => 'asc',
));
=head2 campaigns_bounces
L<Campaign bounces|http://www.campaignmonitor.com/api/campaigns/#campaign_bouncelist>
my $campaign_bounces = $cm->campaigns_bounces (
'campaignid' => $campaign_id,
'page' => '1',
'pagesize' => '100',
'orderfield' => 'email',
'orderdirection' => 'asc',
));
=head2 campaigns_opens
L<Campaign opens|http://www.campaignmonitor.com/api/campaigns/#campaign_openslist>
my $campaign_opens = $cm->campaigns_opens (
'campaignid' => $campaign_id,
'date' => '1900-01-01',
'page' => '1',
'pagesize' => '100',
'orderfield' => 'email',
'orderdirection' => 'asc',
));
=head2 campaigns_clicks
L<Campaign clicks|http://www.campaignmonitor.com/api/campaigns/#campaign_clickslist>
my $campaign_clicks = $cm->campaigns_clicks (
'campaignid' => $campaign_id,
'date' => '1900-01-01',
'page' => '1',
'pagesize' => '100',
'orderfield' => 'email',
'orderdirection' => 'asc',
));
=head2 campaigns_unsubscribes
L<Campaign unsubscribes|http://www.campaignmonitor.com/api/campaigns/#campaign_unsubscribeslist>
my $campaign_unsubscribes = $cm->campaigns_unsubscribes (
'campaignid' => $campaign_id,
'date' => '1900-01-01',
'page' => '1',
'pagesize' => '100',
'orderfield' => 'email',
'orderdirection' => 'asc',
));
=head2 campaigns_delete
L<Deleting a draft|http://www.campaignmonitor.com/api/campaigns/#deleting_a_campaign>
my $campaign_delete = $cm->campaigns_delete($campaign_id);
=head2 client_clientid
L<Getting a client's details|http://www.campaignmonitor.com/api/clients/#getting_a_client>
my $client_details = $cm->client_clientid($client_id);
=head2 client_campaigns
L<Getting sent campaigns|http://www.campaignmonitor.com/api/clients/#getting_client_campaigns>
my $client_campaigns = $cm->client_campaigns($client_id);
=head2 client_drafts
L<Getting draft campaigns|http://www.campaignmonitor.com/api/clients/#getting_client_drafts>
my $client_drafts = $cm->client_drafts($client_id);
=head2 client_lists
L<Getting subscriber lists|http://www.campaignmonitor.com/api/clients/#getting_client_lists>
my $client_lists = $cm->client_lists($client_id);
=head2 client_segments
L<Getting segments|http://www.campaignmonitor.com/api/clients/#getting_client_segments>
my $client_segments = $cm->client_segments($client_id);
=head2 client_suppressionlist
L<Getting suppression list|http://www.campaignmonitor.com/api/clients/#getting_client_suppressionlist>
my $client_suppressionlist = $cm->client_suppressionlist((
'clientid' => $client_id,
'page' => '1',
'pagesize' => '100',
'orderfield' => 'email',
'orderdirection' => 'asc',
));
=head2 client_templates
L<Getting templates|http://www.campaignmonitor.com/api/clients/#getting_client_templates>
my $client_templates = $cm->client_templates($client_id);
=head2 client_setbasics
L<Setting basic details|http://www.campaignmonitor.com/api/clients/#setting_basic_details>
my $client_basic_details = $cm->client_setbasics((
'clientid' => $client_id,
'CompanyName' => "ACME Limited",
'ContactName' => "John Doe",
'EmailAddress' => "john\@example.com",
'Country' => "Australia",
'TimeZone' => "(GMT+10:00) Canberra, Melbourne, Sydney",
));
=head2 client_setaccess
L<Setting access settings|http://www.campaignmonitor.com/api/clients/#setting_access_details>
Changing access level only
my $client_access-settings = $cm->client_setaccess((
'clientid' => $client_id,
'AccessLevel' => '23',
));
Setting username and password
my $client_access-settings = $cm->client_setaccess((
'clientid' => $client_id,
'AccessLevel' => '23',
'Username' => 'jdoe',
'Password' => 'safepassword',
));
=head2 client_setpaygbilling
L<Setting PAYG billing|http://www.campaignmonitor.com/api/clients/#setting_payg_billing>
my $client_payg = $cm->client_setpaygbilling((
'clientid' => $client_id,
'Currency' => 'AUD',
'CanPurchaseCredits' => 'false',
'ClientPays' => 'true',
'MarkupPercentage' => '20',
'MarkupOnDelivery' => '5',
'MarkupPerRecipient' => '4',
'MarkupOnDesignSpamTest' => '3',
));
=head2 client_setmonthlybilling
L<Setting monthly billing|http://www.campaignmonitor.com/api/clients/#setting_monthly_billing>
my $client_monthly = $cm->client_setmonthlybilling((
'clientid' => $client_id,
'Currency' => 'AUD',
'ClientPays' => 'true',
'MarkupPercentage' => '20',
));
=head2 client_delete
L<Deleting a client|http://www.campaignmonitor.com/api/clients/#deleting_a_client>
my $client_deleted = $cm->client_delete($client_id);
=head2 client_addperson
L<Adds a new person to the client.|http://www.campaignmonitor.com/api/clients/#adding_a_person>
my $person_email = $cm->client_addperson((
'clientid' => $client_id,
'EmailAddress' => "joe\@example.com",
'Name' => "Joe Doe",
'AccessLevel' => 23,
'Password' => "safepassword"
));
=head2 client_updateperson
L<Updates any aspect of a person including their email address, name and access level..|http://www.campaignmonitor.com/api/clients/#updating_a_person>
my $person_email = $cm->client_updateperson((
'clientid' => $client_id,
'email' => "joe\@example.com",
'EmailAddress' => "joe.new\@example.com",
'Name' => "Joe Doe",
'AccessLevel' => 23,
'Password' => "safepassword"
));
=head2 client_getpeople
L<Contains a list of all (active or invited) people associated with a particular client.|http://www.campaignmonitor.com/api/clients/#getting_client_people>
my $client_access-settings = $cm->client_getpeople($client_id);
=head2 client_getperson
L<Returns the details of a single person associated with a client. |http://www.campaignmonitor.com/api/clients/#getting_client_person>
my $person_details = $cm->client_getperson((
'clientid' => $client_id,
'email' => "joe\@example.com",
));
=head2 client_deleteperson
L<Contains a list of all (active or invited) people associated with a particular client.|http://www.campaignmonitor.com/api/clients/#deleting_a_person>
my $result = $cm->client_deleteperson((
'clientid' => $client_id,
'email' => "joe\@example.com",
));
=head2 client_setprimarycontact
L<Sets the primary contact for the client to be the person with the specified email address.|http://www.campaignmonitor.com/api/clients/#setting_primary_contact>
my $primarycontact_email = $cm->client_setprimarycontact((
'clientid' => $client_id,
'email' => "joe\@example.com",
));
=head2 client_getprimarycontact
L<Returns the email address of the person who is selected as the primary contact for this client.|http://www.campaignmonitor.com/api/clients/#getting_primary_contact>
my $primarycontact_email = $cm->client_getprimarycontact($client_id);
=head2 lists
L<Creating a list|http://www.campaignmonitor.com/api/lists/#creating_a_list>
my $list = $cm->lists((
'clientid' => $client_id,
'Title' => 'Website Subscribers',
'UnsubscribePage' => 'http://www.example.com/unsubscribed.html',
'ConfirmedOptIn' => 'false',
'ConfirmationSuccessPage' => 'http://www.example.com/joined.html',
));
=head2 list_listid
L<List details|http://www.campaignmonitor.com/api/lists/#getting_list_details>
my $list = $cm->list_listid($list_id);
L<Updating a list|http://www.campaignmonitor.com/api/lists/#updating_a_list>
my $updated_list = $cm->list_listid((
'listid' => $list_id,
'Title' => 'Website Subscribers',
'UnsubscribePage' => 'http://www.example.com/unsubscribed.html',
'ConfirmedOptIn' => 'false',
'ConfirmationSuccessPage' => 'http://www.example.com/joined.html',
));
=head2 list_stats
L<List stats|http://www.campaignmonitor.com/api/lists/#getting_list_stats>
my $list_stats = $cm->list_stats($list_id);
=head2 list_customfields
L<List custom fields|http://www.campaignmonitor.com/api/lists/#getting_list_custom_fields>
my $list_customfields = $cm->list_customfields($list_id);
=head2 list_segments
L<List segments|http://www.campaignmonitor.com/api/lists/#getting_list_segments>
my $list_segments = $cm->list_segments($list_id);
=head2 list_active
L<Active subscribers|http://www.campaignmonitor.com/api/lists/#getting_active_subscribers>
my $list_active_subscribers = $cm->list_active((
'listid' => $list_id,
'date' => '1900-01-01',
'page' => '1',
'pagesize' => '100',
'orderfield' => 'email',
'orderdirection' => 'asc',
));
=head2 list_unsubscribed
L<Unsubscribed subscribers|http://www.campaignmonitor.com/api/lists/#getting_unsubscribed_subscribers>
my $list_unsubscribed_subscribers = $cm->list_unsubscribed((
'listid' => $list_id,
'date' => '1900-01-01',
'page' => '1',
'pagesize' => '100',
'orderfield' => 'email',
'orderdirection' => 'asc',
));
=head2 list_bounced
L<Bounced subscribers|http://www.campaignmonitor.com/api/lists/#getting_bounced_subscribers>
my $list_bounced_subscribers = $cm->list_bounced((
'listid' => $list_id,
'date' => '1900-01-01',
'page' => '1',
'pagesize' => '100',
'orderfield' => 'email',
'orderdirection' => 'asc',
));
=head2 list_customfields
L<Creating a custom field|http://www.campaignmonitor.com/api/lists/#creating_a_custom_field>
my $custom_field = $cm->list_customfields((
'listid' => $list_id,
'FieldName' => 'Newsletter Format',
'DataType' => 'MultiSelectOne',
'Options' => [ "HTML", "Text" ],
));
=head2 list_options
L<Updating custom field options|http://www.campaignmonitor.com/api/lists/#updating_custom_field_options>
my $updated_options = $cm->list_options((
'listid' => $list_id,
'KeepExistingOptions' => 'true',
'Options' => [ "First Option", "Second Option", "Third Option" ],
'customfieldkey' => '[NewsletterFormat]',
));
=head2 list_delete_customfieldkey
L<Deleting a custom field|http://www.campaignmonitor.com/api/lists/#deleting_a_custom_field>
my $deleted_customfield = $cm->list_delete_customfieldkey((
'listid' => $list_id,
'customfieldkey' => '[NewsletterFormat]',
));
=head2 list_delete
L<Deleting a list|http://www.campaignmonitor.com/api/lists/#deleting_a_list>
my $deleted_list = $cm->list_delete($list_id);
=head2 list_webhooks
L<List webhooks|http://www.campaignmonitor.com/api/lists/#getting_list_webhooks>
my $webhooks = $cm->list_webhooks($list_id);
L<Creating a webhook|http://www.campaignmonitor.com/api/lists/#creating_a_webhook>
my $webhook = $cm->list_webhooks((
'listid' => $list_id,
'Events' => [ "Subscribe" ],
'Url' => 'http://example.com/subscribe',
'PayloadFormat' => 'json',
));
=head2 list_test
L<Testing a webhook|http://www.campaignmonitor.com/api/lists/#testing_a_webhook>
my $webhook = $cm->list_test((
'listid' => $list_id,
'webhookid' => $webhook_id,
));
=head2 list_delete_webhook
L<Deleting a webhook|http://www.campaignmonitor.com/api/lists/#deleting_a_webhook>
my $deleted_webhook = $cm->list_delete_webhook((
'listid' => $list_id,
'webhookid' => $webhook_id,
));
=head2 list_activate
L<Activating a webhook|http://www.campaignmonitor.com/api/lists/#activating_a_webhook>
my $activated_webhook = $cm->list_activate((
'listid' => $list_id,
'webhookid' => $webhook_id,
));
=head2 list_deactivate
L<Deactivating a webhook|http://www.campaignmonitor.com/api/lists/#deactivating_a_webhook>
my $deactivated_webhook = $cm->list_deactivate((
'listid' => $list_id,
'webhookid' => $webhook_id,
));
=head2 segments
L<Creating a segment|http://www.campaignmonitor.com/api/segments/#creating_a_segment>
my $segment = $cm->segments((
'listid' => $list_id,
'Rules' => [
{
'Subject' => 'EmailAddress',
'Clauses' => [
'CONTAINS @domain.com'
]
},
{
'Subject' => 'DateSubscribed',
'Clauses' => [
'AFTER 2009-01-01',
'EQUALS 2009-01-01'
]
},
{
'Subject' => 'DateSubscribed',
'Clauses' => [
'BEFORE 2010-01-01'
]
}
],
'Title' => 'My Segment',
));
=head2 segment_segmentid
L<Updating a segment|http://www.campaignmonitor.com/api/segments/#updating_a_segment>
my $updated_segment = $cm->segment_segmentid((
'segmentid' => $segment_id,
'Rules' => [
{
'Subject' => 'EmailAddress',
'Clauses' => [
'CONTAINS @domain.com'
]
},
{
'Subject' => 'DateSubscribed',
'Clauses' => [
'AFTER 2009-01-01',
'EQUALS 2009-01-01'
]
},
{
'Subject' => 'DateSubscribed',
'Clauses' => [
'BEFORE 2010-01-01'
]
}
],
'Title' => 'My Segment',
));
L<Getting a segment's details|http://www.campaignmonitor.com/api/segments/#getting_a_segment>
my $updated_segment = $cm->segment_segmentid($segment_id);
=head2 segment_rules
L<Adding a segment rule|http://www.campaignmonitor.com/api/segments/#adding_a_segment_rule>
my $new_rules = $cm->segment_rules((
'segmentid' => $segment_id,
'Subject' => 'Name',
'Clauses' => [
'NOT_PROVIDED',
'EQUALS Subscriber Name'
],
));
=head2 segment_active
L<Getting segment subscribers|http://www.campaignmonitor.com/api/segments/#getting_segment_subs>
my $segment_subs = $cm->segment_active((
'segmentid' => $segment_id,
'date' => '1900-01-01',
'page' => '1',
'pagesize' => '100',
'orderfield' => 'email',
'orderdirection' => 'asc',
));
=head2 segment_delete
L<Deleting a segment|http://www.campaignmonitor.com/api/segments/#deleting_a_segment>
my $deleted_segment = $cm->segment_delete($segment_id);
=head2 segment_delete_rules
L<Deleting a segment's rules|http://www.campaignmonitor.com/api/segments/#deleting_segment_rules>
my $deleted_segment_rules = $cm->segment_delete_rules($segment_id);
=head2 subscribers
L<Adding a subscriber|http://www.campaignmonitor.com/api/subscribers/#adding_a_subscriber>
my $added_subscriber = $cm->subscribers((
'listid' => $list_id,
'Resubscribe' => 'true',
'CustomFields' => [
{
'Value' => 'http://example.com',
'Key' => 'website'
},
{
'Value' => 'magic',
'Key' => 'interests'
},
{
'Value' => 'romantic walks',
'Key' => 'interests'
}
],
'Name' => 'New Subscriber',
'EmailAddress' => 'subscriber@example.com',
));
L<Getting a subscriber's details|http://www.campaignmonitor.com/api/subscribers/#getting_subscriber_details>
my $subs_details = $cm->subscribers((
'listid' => $list_id,
'email' => 'subscriber@example.com',
));
=head2 subscribers_import
L<Importing many subscribers|http://www.campaignmonitor.com/api/subscribers/#importing_subscribers>
my $imported_subs = $cm->subscribers_import((
'listid' => $list_id,
'Subscribers' => [
{
'CustomFields' => [
{
'Value' => 'http://example.com',
'Key' => 'website'
},
{
'Value' => 'magic',
'Key' => 'interests'
},
{
'Value' => 'romantic walks',
'Key' => 'interests'
}
],
'Name' => 'New Subscriber One',
'EmailAddress' => 'subscriber1@example.com'
},
{
'Name' => 'New Subscriber Two',
'EmailAddress' => 'subscriber2@example.com'
},
{
'Name' => 'New Subscriber Three',
'EmailAddress' => 'subscriber3@example.com'
}
],
'Resubscribe' => 'true',
));
=head2 subscribers_history
L<Getting a subscriber's history|http://www.campaignmonitor.com/api/subscribers/#getting_subscriber_history>
my $subs_history = $cm->subscribers_history((
'listid' => $list_id,
'email' => 'subscriber@example.com',
));
=head2 subscribers_unsubscribe
L<Unsubscribing a subscriber|http://www.campaignmonitor.com/api/subscribers/#unsubscribing_a_subscriber>
my $unsub_sub = $cm->subscribers_unsubscribe((
'listid' => $list_id,
'EmailAddress' => 'subscriber@example.com',
));
=head2 templates
L<Getting a template|http://www.campaignmonitor.com/api/templates/#getting_a_template>
my $template = $cm->templates($template_id);
L<Creating a template|http://www.campaignmonitor.com/api/templates/#creating_a_template>
my $template = $cm->templates((
'clientid' => $client_id
'ZipFileURL' => 'http://example.com/files.zip',
'HtmlPageURL' => 'http://example.com/index.html',
'ScreenshotURL' => 'http://example.com/screenshot.jpg',
'Name' => 'Template Two',
));
L<Updating a template|http://www.campaignmonitor.com/api/templates/#updating_a_template>
my $updated_template = $cm->templates(
'templateid' => $template_id
'ZipFileURL' => 'http://example.com/files.zip',
'HtmlPageURL' => 'http://example.com/index.html',
'ScreenshotURL' => 'http://example.com/screenshot.jpg',
'Name' => 'Template Two',
));
=head2 templates_delete
L<Deleting a template|http://www.campaignmonitor.com/api/templates/#deleting_a_template>
my $deleted_template = $cm->templates_delete($template_id);
=head1 INSTALLATION NOTES
In order to run the full test suite you will need to provide an API Key. This can be done in the following way.
cpan CAMPAIGN_MONITOR_API_KEY=<your_api_key> Net::CampaignMonitor
If you do not do this almost all of the tests will be skipped.
=head1 BUGS
Not quite a bug. This module uses L<REST::Client>. REST::Client fails to install properly on Windows due to this L<bug|https://rt.cpan.org/Public/Bug/Display.html?id=65803>. You will need to make REST::Client install without running tests to install it.
=head1 MAINTAINER
Campaign Monitor, E<lt>support@campaignmonitor.com<gt>
=head1 AUTHOR
Jeffery Candiloro <jeffery@cpan.org>
=head1 COPYRIGHT
Copyright (c) 2012, Campaign Monitor E<lt>support@campaignmonitor.com<gt>. All rights reserved.
Copyright (c) 2011, Jeffery Candiloro E<lt>jeffery@cpan.org<gt>. All rights reserved.
This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
The full text of the license can be found in the LICENSE file included with this module.