module Onebox::Engine::StandardEmbed
Public Class Methods
add_oembed_provider(regexp, endpoint)
click to toggle source
# File lib/onebox/engine/standard_embed.rb, line 14 def self.add_oembed_provider(regexp, endpoint) oembed_providers[regexp] = endpoint end
add_opengraph_provider(regexp)
click to toggle source
# File lib/onebox/engine/standard_embed.rb, line 22 def self.add_opengraph_provider(regexp) opengraph_providers << regexp end
oembed_providers()
click to toggle source
# File lib/onebox/engine/standard_embed.rb, line 10 def self.oembed_providers @@oembed_providers ||= {} end
opengraph_providers()
click to toggle source
# File lib/onebox/engine/standard_embed.rb, line 18 def self.opengraph_providers @@opengraph_providers ||= [] end
Public Instance Methods
always_https?()
click to toggle source
Calls superclass method
# File lib/onebox/engine/standard_embed.rb, line 34 def always_https? AllowlistedGenericOnebox.host_matches(uri, AllowlistedGenericOnebox.https_hosts) || super end
raw()
click to toggle source
# File lib/onebox/engine/standard_embed.rb, line 38 def raw return @raw if defined?(@raw) og = get_opengraph twitter = get_twitter oembed = get_oembed @raw = {} og.data.each do |k, v| next if k == "title_attr" v = og.send(k) @raw[k] ||= v unless v.nil? end twitter.each { |k, v| @raw[k] ||= v unless Onebox::Helpers::blank?(v) } oembed.data.each do |k, v| v = oembed.send(k) @raw[k] ||= v unless v.nil? end favicon = get_favicon @raw["favicon".to_sym] = favicon unless Onebox::Helpers::blank?(favicon) @raw end
Protected Instance Methods
get_favicon()
click to toggle source
# File lib/onebox/engine/standard_embed.rb, line 100 def get_favicon return nil unless html_doc favicon = html_doc.css('link[rel="shortcut icon"], link[rel="icon shortcut"], link[rel="shortcut"], link[rel="icon"]').first favicon = favicon.nil? ? nil : (favicon['href'].nil? ? nil : favicon['href'].strip) Onebox::Helpers::get_absolute_image_url(favicon, url) end
get_json_response()
click to toggle source
# File lib/onebox/engine/standard_embed.rb, line 109 def get_json_response oembed_url = get_oembed_url return "{}" if Onebox::Helpers.blank?(oembed_url) Onebox::Helpers.fetch_response(oembed_url) rescue "{}" rescue Errno::ECONNREFUSED, Net::HTTPError, Net::HTTPFatalError, MultiJson::LoadError "{}" end
get_oembed()
click to toggle source
# File lib/onebox/engine/standard_embed.rb, line 77 def get_oembed @oembed ||= Onebox::Oembed.new(get_json_response) end
get_oembed_url()
click to toggle source
# File lib/onebox/engine/standard_embed.rb, line 119 def get_oembed_url oembed_url = nil StandardEmbed.oembed_providers.each do |regexp, endpoint| if url =~ regexp oembed_url = "#{endpoint}?url=#{url}" break end end if html_doc if Onebox::Helpers.blank?(oembed_url) application_json = html_doc.at("//link[@type='application/json+oembed']/@href") oembed_url = application_json.value if application_json end if Onebox::Helpers.blank?(oembed_url) text_json = html_doc.at("//link[@type='text/json+oembed']/@href") oembed_url ||= text_json.value if text_json end end oembed_url end
get_opengraph()
click to toggle source
# File lib/onebox/engine/standard_embed.rb, line 81 def get_opengraph @opengraph ||= ::Onebox::OpenGraph.new(html_doc) end
get_twitter()
click to toggle source
# File lib/onebox/engine/standard_embed.rb, line 85 def get_twitter return {} unless html_doc twitter = {} html_doc.css('meta').each do |m| if (m["property"] && m["property"][/^twitter:(.+)$/i]) || (m["name"] && m["name"][/^twitter:(.+)$/i]) value = (m["content"] || m["value"]).to_s twitter[$1.tr('-:' , '_').to_sym] ||= value unless (Onebox::Helpers::blank?(value) || value == "0 minutes") end end twitter end
html_doc()
click to toggle source
# File lib/onebox/engine/standard_embed.rb, line 68 def html_doc return @html_doc if defined?(@html_doc) headers = nil headers = { 'Cookie' => options[:cookie] } if options[:cookie] @html_doc = Onebox::Helpers.fetch_html_doc(url, headers) end