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 )