summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordakkar <dakkar@thenautilus.net>2018-07-03 21:15:12 +0000
committerdakkar <dakkar@thenautilus.net>2018-07-03 21:15:12 +0000
commit47a86d3eafaa6f938083b86893027af5d76f8a87 (patch)
tree3de6cbecbb915fd36b55c809687b9142127c667a
parentoops (diff)
downloadtweet-archive-47a86d3eafaa6f938083b86893027af5d76f8a87.tar.gz
tweet-archive-47a86d3eafaa6f938083b86893027af5d76f8a87.tar.bz2
tweet-archive-47a86d3eafaa6f938083b86893027af5d76f8a87.zip
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`)
-rw-r--r--lib/Dakkar/TweetArchive.pm29
-rw-r--r--lib/Dakkar/TweetArchive/Store.pm19
2 files changed, 48 insertions, 0 deletions
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<tweet_mode>, 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;