From d700afa9b7fedb9153b1629b49565613799ab00f Mon Sep 17 00:00:00 2001 From: Dominik Sander Date: Fri, 30 Dec 2016 13:13:52 +0100 Subject: [PATCH] Ensure Twitter REST API calls always get extended tweets Tweets that include embedds are truncated by default https://dev.twitter.com/overview/api/upcoming-changes-to-tweets by passing tweet_mode=extened to the REST API calls we ensure to get the full response including embedded images and videos --- app/models/agents/twitter_favorites.rb | 2 +- app/models/agents/twitter_search_agent.rb | 2 +- app/models/agents/twitter_user_agent.rb | 2 +- spec/models/agents/twitter_favorites_spec.rb | 4 ++-- spec/models/agents/twitter_search_agent_spec.rb | 3 +-- spec/models/agents/twitter_user_agent_spec.rb | 4 ++-- 6 files changed, 8 insertions(+), 9 deletions(-) diff --git a/app/models/agents/twitter_favorites.rb b/app/models/agents/twitter_favorites.rb index 18c2a97c..2b6059f4 100644 --- a/app/models/agents/twitter_favorites.rb +++ b/app/models/agents/twitter_favorites.rb @@ -76,7 +76,7 @@ module Agents end def check - opts = {:count => interpolated['number']} + opts = {:count => interpolated['number'], tweet_mode: 'extended'} tweets = twitter.favorites(interpolated['username'], opts) memory[:last_seen] ||= [] diff --git a/app/models/agents/twitter_search_agent.rb b/app/models/agents/twitter_search_agent.rb index cbb80bf2..0594680f 100644 --- a/app/models/agents/twitter_search_agent.rb +++ b/app/models/agents/twitter_search_agent.rb @@ -84,7 +84,7 @@ module Agents def check since_id = memory['since_id'] || nil - opts = {include_entities: true} + opts = {include_entities: true, tweet_mode: 'extended'} opts.merge! result_type: interpolated[:result_type] if interpolated[:result_type].present? opts.merge! since_id: since_id unless since_id.nil? diff --git a/app/models/agents/twitter_user_agent.rb b/app/models/agents/twitter_user_agent.rb index 61e22dd6..6b2739a1 100644 --- a/app/models/agents/twitter_user_agent.rb +++ b/app/models/agents/twitter_user_agent.rb @@ -98,7 +98,7 @@ module Agents def check since_id = memory['since_id'] || nil - opts = {:count => 200, :include_rts => include_retweets?, :exclude_replies => exclude_replies?, :include_entities => true, :contributor_details => true} + opts = {:count => 200, :include_rts => include_retweets?, :exclude_replies => exclude_replies?, :include_entities => true, :contributor_details => true, tweet_mode: 'extended'} opts.merge! :since_id => since_id unless since_id.nil? if choose_home_time_line? diff --git a/spec/models/agents/twitter_favorites_spec.rb b/spec/models/agents/twitter_favorites_spec.rb index 4a6bc99d..b8605902 100644 --- a/spec/models/agents/twitter_favorites_spec.rb +++ b/spec/models/agents/twitter_favorites_spec.rb @@ -2,7 +2,7 @@ require 'rails_helper' describe Agents::TwitterFavorites do before do - stub_request(:any, /tectonic/).to_return(body: File.read(Rails.root.join("spec/data_fixtures/user_fav_tweets.json")), status: 200) + stub_request(:any, /tectonic.+?tweet_mode=extended/).to_return(body: File.read(Rails.root.join("spec/data_fixtures/user_fav_tweets.json")), status: 200) end before do @@ -44,4 +44,4 @@ describe Agents::TwitterFavorites do expect { @agent1.check }.to change { Event.count }.by(0) end end -end \ No newline at end of file +end diff --git a/spec/models/agents/twitter_search_agent_spec.rb b/spec/models/agents/twitter_search_agent_spec.rb index f8912bae..c089c274 100644 --- a/spec/models/agents/twitter_search_agent_spec.rb +++ b/spec/models/agents/twitter_search_agent_spec.rb @@ -3,8 +3,7 @@ require 'rails_helper' describe Agents::TwitterSearchAgent do before do # intercept the twitter API request - stub_request(:any, /freebandnames/).to_return(body: File.read(Rails.root.join("spec/data_fixtures/search_tweets.json")), status: 200) - + stub_request(:any, /freebandnames.+?tweet_mode=extended/).to_return(body: File.read(Rails.root.join("spec/data_fixtures/search_tweets.json")), status: 200) @opts = { search: "freebandnames", expected_update_period_in_days: "2", diff --git a/spec/models/agents/twitter_user_agent_spec.rb b/spec/models/agents/twitter_user_agent_spec.rb index 94f5c9a2..a4dff9be 100644 --- a/spec/models/agents/twitter_user_agent_spec.rb +++ b/spec/models/agents/twitter_user_agent_spec.rb @@ -3,7 +3,7 @@ require 'rails_helper' describe Agents::TwitterUserAgent do before do # intercept the twitter API request for @tectonic's user profile - stub_request(:any, "https://api.twitter.com/1.1/statuses/user_timeline.json?contributor_details=true&count=200&exclude_replies=false&include_entities=true&include_rts=true&screen_name=tectonic").to_return(:body => File.read(Rails.root.join("spec/data_fixtures/user_tweets.json")), :status => 200) + stub_request(:any, "https://api.twitter.com/1.1/statuses/user_timeline.json?contributor_details=true&count=200&exclude_replies=false&include_entities=true&include_rts=true&screen_name=tectonic&tweet_mode=extended").to_return(:body => File.read(Rails.root.join("spec/data_fixtures/user_tweets.json")), :status => 200) @opts = { :username => "tectonic", @@ -44,7 +44,7 @@ describe Agents::TwitterUserAgent do describe "#check that if choose time line is false then username is required" do before do - stub_request(:any, "https://api.twitter.com/1.1/statuses/home_timeline.json?contributor_details=true&count=200&exclude_replies=false&include_entities=true&include_rts=true").to_return(:body => File.read(Rails.root.join("spec/data_fixtures/user_tweets.json")), :status => 200) + stub_request(:any, "https://api.twitter.com/1.1/statuses/home_timeline.json?contributor_details=true&count=200&exclude_replies=false&include_entities=true&include_rts=true&tweet_mode=extended").to_return(:body => File.read(Rails.root.join("spec/data_fixtures/user_tweets.json")), :status => 200) end it 'requires username unless choose_home_time_line is true' do