From Code to Community: Sponsoring The Perl and Raku Conference 2025 Learn more

use strict;
use v5.010;
# ABSTRACT: Perl module to interact with Readwise.io API
use Moo;
has token => (
is => 'ro',
required => 0,
default => sub { return $ENV{WEBSERVICE_READWISE_TOKEN} },
);
has base_url => (
is => 'ro',
default => sub {'https://readwise.io/api/v2/'},
);
has http => (
is => 'ro',
default => sub {
return HTTP::Tiny->new;
},
);
sub auth {
my $self = shift;
my $response = $self->http->request(
'GET',
$self->base_url . 'auth/',
{ headers => { Authorization => "Token $self->{token}", }, }
);
return $response->{status};
}
sub export {
my ( $self, %params ) = @_;
my $path = 'export/';
if ( %params && $params{'pageCursor'} ) {
$path .= '?pageCursor=' . $params{pageCursor};
}
my $response = $self->http->request(
'GET',
$self->base_url . $path,
{ headers => { Authorization => "Token $self->{token}", }, }
);
if ( !$response->{success} ) {
return 'Response error';
}
my $json = decode_json $response->{content};
return $json;
}
sub highlights {
my $self = shift;
my $response = $self->http->request(
'GET',
$self->base_url . 'highlights/',
{ headers => { Authorization => "Token $self->{token}", }, }
);
if ( !$response->{success} ) {
return 'Response error';
}
my $json = decode_json $response->{content};
return $json;
}
1;
__END__
=pod
=encoding UTF-8
=head1 NAME
WebService::Readwise - Perl module to interact with Readwise.io API
=head1 VERSION
version 0.002
=head1 SYNOPSIS
use WebService::Readwise;
my $readwise = WebService::Readwise->new(token => 'readwise_token_foo');
my $highlights = $readwise->highlights;
say 'First highlight: ' . $highlights->{results}[0]{text};
=head1 DESCRIPTION
=head1 ATTRIBUTES
=head2 token( $token )
API token from readwise.io.
If not provided can be obtained from WEBSERVICE_READWISE_TOKEN environment variable
=head2 base_url( $url )
URL for the Readwise API.
Defaults if not specified
=head2 http( )
Provides L<HTTP::Tiny> object. Used to get data from API.
=head1 METHODS
=head2 auth( )
Returns 204 if you have a valid token
Makes a GET request to https://readwise.io/api/v2/auth/
=head2 export( pageCursor => $cursor)
Returns data structure containing a paginated record of all your Readwise data.
Optionally,the pageCursor parameter can be used to retrieve additionalpages of results
Makes a GET request to https://readwise.io/api/v2/export/
=head2 highlights( )
Returns array of highlights
=head1 AUTHOR
Lance Wicks <lw@judocoach.com>
=head1 COPYRIGHT AND LICENSE
This software is copyright (c) 2023 by Lance Wicks.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
=cut