From 02cab0a9540481bb75db7830adb55e662a3bac94 Mon Sep 17 00:00:00 2001 From: dakkar Date: Fri, 24 Feb 2023 14:57:39 +0000 Subject: only store friend/followers/following if changed --- lib/Dakkar/TweetArchive/Store.pm | 44 ++++++++++++++++++++++++---------------- 1 file changed, 26 insertions(+), 18 deletions(-) diff --git a/lib/Dakkar/TweetArchive/Store.pm b/lib/Dakkar/TweetArchive/Store.pm index f5919d3..1b926d5 100644 --- a/lib/Dakkar/TweetArchive/Store.pm +++ b/lib/Dakkar/TweetArchive/Store.pm @@ -90,23 +90,39 @@ SQL return \@ids; } +sub _array_num_equal($a1,$a2) { + my ($a1_str, $a2_str) = map { + join "\0", sort { $a <=> $b } $_->@* + } $a1, $a2; -sub store_twitter_friends($self,$friends) { - my $ids = $self->_store_twitter_people($friends); + return $a1_str eq $a2_str; +} - $self->dbh->do(<<"SQL", {}, $ids); -INSERT INTO twitter_friends(users) VALUES(?) +sub _store_people_and_ids($self,$store_method,$ids_table,$people) { + my $ids = $self->$store_method($people); + + my ($last_ids) = $self->dbh->selectrow_array(<<"SQL"); +SELECT users +FROM ${ids_table} +ORDER BY taken_at DESC +LIMIT 1 SQL -} -sub store_twitter_followers($self,$followers) { - my $ids = $self->_store_twitter_people($followers); + return if $last_ids && _array_num_equal($ids, $last_ids); $self->dbh->do(<<"SQL", {}, $ids); -INSERT INTO twitter_followers(users) VALUES(?) +INSERT INTO ${ids_table}(users) VALUES(?) SQL } +sub store_twitter_friends($self,$friends) { + $self->_store_people_and_ids('_store_twitter_people','twitter_friends',$friends); +} + +sub store_twitter_followers($self,$followers) { + $self->_store_people_and_ids('_store_twitter_people','twitter_followers',$followers); +} + # misskey notes sub latest_note_id($self) { @@ -152,19 +168,11 @@ SQL sub store_misskey_following($self,$following) { - my $ids = $self->_store_misskey_people($following); - - $self->dbh->do(<<"SQL", {}, $ids); -INSERT INTO misskey_following(users) VALUES(?) -SQL + $self->_store_people_and_ids('_store_misskey_people','misskey_following',$following); } sub store_misskey_followers($self,$followers) { - my $ids = $self->_store_misskey_people($followers); - - $self->dbh->do(<<"SQL", {}, $ids); -INSERT INTO misskey_followers(users) VALUES(?) -SQL + $self->_store_people_and_ids('_store_misskey_people','misskey_followers',$followers); } # schema -- cgit v1.2.3