Catmandu-MediaHaven
view release on metacpan or search on metacpan
lib/Catmandu/MediaHaven.pm view on Meta::CPAN
$self->log->debug("exportId = $exportId ; status = $status");
last if $status =~ /^(failed|cancelled)$/;
$downloadUrl = $export_job->[0]->{downloadUrl};
if ($downloadUrl =~ /^htt/) {
last;
}
$self->log->debug("sleep " . $self->sleep);
sleep $self->sleep;
$export_job = $self->_get_json($next);
}
my $rest_url = $self->_rest_base($downloadUrl);
$self->log->debug("download: $rest_url");
my $browser = LWP::UserAgent->new();
my $response = $browser->get($rest_url, ':content_cb' => $callback);
if ($response->is_success) {
return 1;
}
else {
$self->log->error("failed to contact the download url $rest_url");
return undef;
}
}
sub _get_json {
my ($self,$url) = @_;
$self->log->debug($url);
my $client = REST::Client->new();
$client->GET($url);
my $json = $client->responseContent();
decode_json $json;
}
sub _post_json {
my ($self,$url,$body) = @_;
$self->log->debug($url);
my $client = REST::Client->new();
if ($body) {
my $response = $client->getUseragent->request(POST $url , $body , Content_Type => 'form-data');
if ($response->is_success) {
return { ok => 1};
}
else {
my $json = $response->decoded_content;
return decode_json $json;
}
}
else {
$client->POST($url);
my $json = $client->responseContent();
my $location = $self->_rest_base( $client->responseHeader('Location') );
my $perl = decode_json $json;
wantarray ? ($perl,$location) : $perl;
}
}
sub _rest_base {
my ($self,$url) = @_;
my $authen = sprintf "%s:%s" , uri_escape($self->username) , uri_escape($self->password);
my $media_url = $url // $self->url;
$media_url =~ s{https://}{};
$media_url = 'https://' . $authen . '@' . $media_url;
$media_url;
}
sub _rest_get {
my ($self,@param) = @_;
my $media_url = $self->_rest_base . '?';
$media_url .= join("&",@param);
$self->_get_json($media_url);
}
sub _rest_post {
my ($self,$fragment,@param) = @_;
my $media_url = $self->_rest_base .
'/' .
$fragment;
$self->_post_json($media_url,\@param);
}
=head1 MODULES
L<Catmandu::Importer::MediaHaven>
L<Catmandu::Store::File::MediaHaven>
L<Catmandu::Store::File::MediaHaven::Bag>
L<Catmandu::Store::File::MediaHaven::Index>
=head1 AUTHOR
=over
( run in 1.272 second using v1.01-cache-2.11-cpan-6736b670a1e )