FIX: Don’t use `user_generated` images as avatar images in Oneboxed Twitter content (#13712)

By default, Twitter will return the URL for the avatar image of the tweet poster as the `og:image` value.

However, if the `user_generated` attribute is true, we should not use this as the avatar URL as this will be an URL of an image in the tweet itself (e.g., an image belonging to a tweeted news story).
This commit is contained in:
jbrw 2021-07-13 14:54:28 -04:00 committed by GitHub
parent 53fe8b2e77
commit a64aea38b7
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 4180 additions and 2 deletions

View File

@ -23,7 +23,7 @@ module Onebox
html.css('meta').each do |m|
if m.attribute('property') && m.attribute('property').to_s.match(/^og:/i)
m_content = m.attribute('content').to_s.strip
m_property = m.attribute('property').to_s.gsub('og:', '')
m_property = m.attribute('property').to_s.gsub('og:', '').gsub(':', '_')
twitter_data[m_property.to_sym] = m_content
end
end
@ -100,7 +100,7 @@ module Onebox
if twitter_api_credentials_present?
access(:user, :profile_image_url_https).sub('normal', '400x400')
elsif twitter_data[:image]
twitter_data[:image]
twitter_data[:image] unless twitter_data[:image_user_generated]
end
end

File diff suppressed because one or more lines are too long

View File

@ -74,6 +74,23 @@ describe Onebox::Engine::TwitterStatusOnebox do
let(:retweets_count) { "201" }
end
shared_context "featured image info" do
before do
@link = "https://twitter.com/codinghorror/status/1409351083177046020"
@onebox_fixture = "twitterstatus_featured_image"
stub_request(:get, @link.downcase).to_return(status: 200, body: onebox_response(@onebox_fixture))
end
let(:full_name) { "Jeff Atwood" }
let(:screen_name) { "codinghorror" }
let(:avatar) { "" }
let(:timestamp) { "3:02 PM - 27 Jun 2021" }
let(:link) { @link }
let(:favorite_count) { "90" }
let(:retweets_count) { "0" }
end
shared_examples "includes quoted tweet data" do
it 'includes quoted tweet' do
expect(html).to include("If you bought a ticket for tonights @Metallica show at Stade de France, you have helped")
@ -115,6 +132,18 @@ describe Onebox::Engine::TwitterStatusOnebox do
it_behaves_like '#to_html'
it_behaves_like "includes quoted tweet data"
end
context "with a featured image tweet" do
let(:tweet_content) do
"My first text message from my child! A moment that shall live on in infamy!"
end
include_context "featured image info"
include_context "engines"
it_behaves_like "an engine"
it_behaves_like '#to_html'
end
end
context "with twitter client" do