lib/onebox/engine/twitter_status_onebox.rb in onebox-1.8.95 vs lib/onebox/engine/twitter_status_onebox.rb in onebox-1.8.96

- old
+ new

@@ -21,19 +21,19 @@ m_content = m.attribute('content').to_s.strip m_property = m.attribute('property').to_s.gsub('og:', '') twitter_data[m_property.to_sym] = m_content end end - return twitter_data + twitter_data end def match @match ||= @url.match(%r{twitter\.com/.+?/status(es)?/(?<id>\d+)}) end def twitter_data - @twitter_data = get_twitter_data + @twitter_data ||= get_twitter_data end def client Onebox.options.twitter_client end @@ -49,13 +49,11 @@ super end end def access(*keys) - keys.reduce(raw) do |memo, key| - memo[key] || memo[key.to_s] - end + raw.dig *keys end def tweet if twitter_api_credentials_present? client.prettify_tweet(raw) @@ -64,25 +62,24 @@ end end def timestamp if twitter_api_credentials_present? - created_at = access(:created_at) - date = DateTime.strptime(created_at, "%a %b %d %H:%M:%S %z %Y") + date = DateTime.strptime(access(:created_at), "%a %b %d %H:%M:%S %z %Y") user_offset = access(:user, :utc_offset).to_i offset = (user_offset >= 0 ? "+" : "-") + Time.at(user_offset.abs).gmtime.strftime("%H%M") date.new_offset(offset).strftime("%-l:%M %p - %-d %b %Y") else - raw.at_css(".tweet-timestamp").attr('title') + attr_at_css(".tweet-timestamp", 'title') end end def title if twitter_api_credentials_present? "#{access(:user, :name)} (#{access(:user, :screen_name)})" else - "#{raw.css('.tweet.permalink-tweet')[0].attribute('data-name')} (#{raw.css('.tweet.permalink-tweet')[0].attribute('data-screen-name')})" + "#{attr_at_css('.tweet.permalink-tweet', 'data-name')} (#{attr_at_css('.tweet.permalink-tweet', 'data-screen-name')})" end end def avatar if twitter_api_credentials_present? @@ -92,33 +89,77 @@ end end def likes if twitter_api_credentials_present? - count = access(:favorite_count).to_i - return count > 0 ? client.prettify_number(count) : nil + prettify_number(access(:favorite_count).to_i) else - raw.at_css(".request-favorited-popup").attr('data-compact-localized-count') rescue nil + attr_at_css(".request-favorited-popup", 'data-compact-localized-count') end end def retweets if twitter_api_credentials_present? - count = access(:retweet_count).to_i - return count > 0 ? client.prettify_number(count) : nil + prettify_number(access(:retweet_count).to_i) else - raw.at_css(".request-retweeted-popup").attr('data-compact-localized-count') rescue nil + attr_at_css(".request-retweeted-popup", 'data-compact-localized-count') end end + def quoted_full_name + if twitter_api_credentials_present? + access(:quoted_status, :user, :name) + else + raw.css('.QuoteTweet-fullname')[0]&.text + end + end + + def quoted_screen_name + if twitter_api_credentials_present? + access(:quoted_status, :user, :screen_name) + else + attr_at_css(".QuoteTweet-innerContainer", "data-screen-name") + end + end + + def quoted_tweet + if twitter_api_credentials_present? + access(:quoted_status, :full_text) + else + raw.css('.QuoteTweet-text')[0]&.text + end + end + + def quoted_link + if twitter_api_credentials_present? + "https://twitter.com/#{quoted_screen_name}/status/#{access(:quoted_status, :id)}" + else + "https://twitter.com#{attr_at_css(".QuoteTweet-innerContainer", "href")}" + end + end + + def prettify_number(count) + count > 0 ? client.prettify_number(count) : nil + end + + def attr_at_css(css_property, attribute_name) + raw.at_css(css_property)&.attr(attribute_name) + end + def data - { link: link, + @data ||= { + link: link, tweet: tweet, timestamp: timestamp, title: title, avatar: avatar, likes: likes, - retweets: retweets } + retweets: retweets, + quoted_tweet: quoted_tweet, + quoted_full_name: quoted_full_name, + quoted_screen_name: quoted_screen_name, + quoted_link: quoted_link + } end end end end