diff options
author | dakkar <dakkar@thenautilus.net> | 2023-02-24 12:37:42 +0000 |
---|---|---|
committer | dakkar <dakkar@thenautilus.net> | 2023-02-24 12:47:41 +0000 |
commit | 9dbd8be35891bb83abad647f9f488aa9a64722da (patch) | |
tree | cb68eef882a2d41955d9ec8ca7af80714b5a6a7d /lib/Dakkar/Misskey.pm | |
parent | config example (diff) | |
download | tweet-archive-9dbd8be35891bb83abad647f9f488aa9a64722da.tar.gz tweet-archive-9dbd8be35891bb83abad647f9f488aa9a64722da.tar.bz2 tweet-archive-9dbd8be35891bb83abad647f9f488aa9a64722da.zip |
Fix pagination of Misskey responses
Misskey API, with `sinceId`, pages by `id ASC`, not descending as I
thought.
Also, allow using callbacks for paginated queries instead of
accumulating all results (much nicer for the initial db filling)
Diffstat (limited to 'lib/Dakkar/Misskey.pm')
-rw-r--r-- | lib/Dakkar/Misskey.pm | 23 |
1 files changed, 16 insertions, 7 deletions
diff --git a/lib/Dakkar/Misskey.pm b/lib/Dakkar/Misskey.pm index 327cfe8..484131f 100644 --- a/lib/Dakkar/Misskey.pm +++ b/lib/Dakkar/Misskey.pm @@ -5,7 +5,7 @@ use JSON::MaybeXS; use LWP::UserAgent; use Types::Standard qw(Str); use Types::URI qw(Uri); -use List::Util qw(minstr); +use List::Util qw(maxstr); use URI; use namespace::clean; @@ -38,7 +38,7 @@ sub _request($self, $endpoint, $payload) { die $response->status_line; } -sub _paged_request($self, $endpoint, $payload) { +sub _paged_request($self, $endpoint, $payload, $cb) { my @all_results; my $page_payload = { @@ -51,31 +51,40 @@ sub _paged_request($self, $endpoint, $payload) { last unless $result->@*; - push @all_results, $result->@*; - $page_payload->{untilId} = minstr(map { $_->{id} } $result->@* ); + if ($cb) { + $cb->($result); + } + else { + push @all_results, $result->@*; + } + + $page_payload->{sinceId} = maxstr(map { $_->{id} } $result->@* ); } return \@all_results; } -sub timeline($self,$options) { +sub timeline($self,$options,$cb=undef) { return $self->_paged_request( 'api/notes/timeline', $options, + $cb, ); } -sub followers($self,$user_id) { +sub followers($self,$user_id,$cb=undef) { return $self->_paged_request( 'api/users/followers', { userId => $user_id }, + $cb, ); } -sub following($self,$user_id) { +sub following($self,$user_id,$cb=undef) { return $self->_paged_request( 'api/users/following', { userId => $user_id }, + $cb, ); } |