package Dakkar::TweetArchive;
use 5.024;
use Moo;
use experimental 'signatures';
use Net::Twitter;
use Types::Standard qw(Str InstanceOf);
use namespace::clean;
has [qw(consumer_key consumer_secret access_token access_token_secret)] => (
is => 'ro',
required => 1,
isa => Str,
);
has client => (
is => 'lazy',
isa => InstanceOf['Net::Twitter'],
);
sub _build_client($self) {
my $nt = Net::Twitter->new(
traits => [
qw/API::RESTv1_1 OAuth RetryOnError/,
AutoCursor => {
max_calls => 16,
force_cursor => 1,
array_accessor => 'users',
methods => [qw/friends followers/],
},
],
consumer_key => $self->consumer_key,
consumer_secret => $self->consumer_secret,
);
$nt->access_token($self->access_token);
$nt->access_token_secret($self->access_token_secret);
require Net::Twitter::API;
my $nt_class = ref($nt);
my $meta_class = Moose::Meta::Class->initialize($nt_class);
$meta_class->make_mutable;
my $original = $meta_class->find_method_by_name('home_timeline');
$nt_class->Net::Twitter::API::twitter_api_method(
home_timeline => (
description => 'override home_timeline to add tweet_mode',
path => $original->path,
method => $original->method,
params => [
@{ $original->params },
'tweet_mode',
],
booleans => $original->booleans,
required => $original->required,
returns => $original->returns,
),
);
$meta_class->make_immutable;
return $nt;
}
sub home_timeline($self,$since_id) {
return $self->client->home_timeline({
include_entities => 1,
trim_user => 0,
exclude_replies => 0,
( $since_id ? ( since_id => $since_id ) : () ),
count => 200,
tweet_mode => 'extended',
});
}
sub friends($self) {
return $self->client->friends({count=>200});
}
sub followers($self) {
return $self->client->followers({count=>200});
}
1;