From 47a86d3eafaa6f938083b86893027af5d76f8a87 Mon Sep 17 00:00:00 2001 From: dakkar Date: Tue, 3 Jul 2018 21:15:12 +0000 Subject: get the full text of tweets! https://developer.twitter.com/en/docs/tweets/tweet-updates shows that you can get the full text by passing `tweet_mode=extended` in the request; instead of getting the `extended_tweet`, you'll get the same shape as with normal tweets, but the text will be in `full_text` (not in `text`) --- lib/Dakkar/TweetArchive.pm | 29 +++++++++++++++++++++++++++++ lib/Dakkar/TweetArchive/Store.pm | 19 +++++++++++++++++++ 2 files changed, 48 insertions(+) diff --git a/lib/Dakkar/TweetArchive.pm b/lib/Dakkar/TweetArchive.pm index 3c0d35e..fe28d13 100644 --- a/lib/Dakkar/TweetArchive.pm +++ b/lib/Dakkar/TweetArchive.pm @@ -17,6 +17,7 @@ has client => ( isa => InstanceOf['Net::Twitter'], ); + sub _build_client($self) { my $nt = Net::Twitter->new( traits => [ @@ -35,6 +36,33 @@ sub _build_client($self) { $nt->access_token($self->access_token); $nt->access_token_secret($self->access_token_secret); + # HACK! Net::Twitter doesn't know about C, let's teach + # it + 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; } @@ -45,6 +73,7 @@ sub home_timeline($self,$since_id) { exclude_replies => 0, ( $since_id ? ( since_id => $since_id ) : () ), count => 200, + tweet_mode => 'extended', }); } diff --git a/lib/Dakkar/TweetArchive/Store.pm b/lib/Dakkar/TweetArchive/Store.pm index b6ce585..9a97ca6 100644 --- a/lib/Dakkar/TweetArchive/Store.pm +++ b/lib/Dakkar/TweetArchive/Store.pm @@ -341,4 +341,23 @@ CREATE TRIGGER tweets_fts_update SQL } +sub _schema_deploy_5($self) { + my $dbh = $self->dbh; + + # get *more* text of a tweet + $dbh->do(<<'SQL'); +CREATE OR REPLACE FUNCTION tweet_text(IN t JSONB) RETURNS text +LANGUAGE sql +IMMUTABLE +RETURNS NULL ON NULL INPUT +PARALLEL SAFE +AS $$ SELECT +CASE t ? 'extended_tweet' + WHEN true THEN COALESCE(t->'extended_tweet'->>'text',t->'extended_tweet'->>'full_text') + ELSE COALESCE(t->>'text',t->>'full_text') +END +$$; +SQL +} + 1; -- cgit v1.2.3