lib/onebox/engine/standard_embed.rb in onebox-1.8.80 vs lib/onebox/engine/standard_embed.rb in onebox-1.8.81
- old
+ new
@@ -1,145 +1,145 @@
-require "cgi"
-require "onebox/open_graph"
-
-module Onebox
- module Engine
- module StandardEmbed
-
- def self.oembed_providers
- @@oembed_providers ||= {}
- end
-
- def self.add_oembed_provider(regexp, endpoint)
- oembed_providers[regexp] = endpoint
- end
-
- def self.opengraph_providers
- @@opengraph_providers ||= []
- end
-
- def self.add_opengraph_provider(regexp)
- opengraph_providers << regexp
- end
-
- # Some oembed providers (like meetup.com) don't provide links to themselves
- add_oembed_provider(/www\.meetup\.com\//, 'http://api.meetup.com/oembed')
- add_oembed_provider(/www\.mixcloud\.com\//, 'https://www.mixcloud.com/oembed/')
- # In order to support Private Videos
- add_oembed_provider(/vimeo\.com\//, 'https://vimeo.com/api/oembed.json')
- # NYT requires login so use oembed only
- add_oembed_provider(/nytimes\.com\//, 'https://www.nytimes.com/svc/oembed/json/')
-
- def always_https?
- WhitelistedGenericOnebox.host_matches(uri, WhitelistedGenericOnebox.https_hosts) || super
- end
-
- def raw
- return @raw if @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
-
- def html_doc
- return @html_doc if @html_doc
-
- headers = nil
- headers = { 'Cookie' => options[:cookie] } if options[:cookie]
-
- @html_doc = Onebox::Helpers.fetch_html_doc(url, headers)
- end
-
- def get_oembed
- @oembed ||= Onebox::Oembed.new(get_json_response)
- end
-
- def get_opengraph
- @opengraph ||= ::Onebox::OpenGraph.new(html_doc)
- end
-
- 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)
- end
- end
-
- twitter
- end
-
- 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
-
- 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
-
- protected
-
- 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
- end
- end
-end
+require "cgi"
+require "onebox/open_graph"
+
+module Onebox
+ module Engine
+ module StandardEmbed
+
+ def self.oembed_providers
+ @@oembed_providers ||= {}
+ end
+
+ def self.add_oembed_provider(regexp, endpoint)
+ oembed_providers[regexp] = endpoint
+ end
+
+ def self.opengraph_providers
+ @@opengraph_providers ||= []
+ end
+
+ def self.add_opengraph_provider(regexp)
+ opengraph_providers << regexp
+ end
+
+ # Some oembed providers (like meetup.com) don't provide links to themselves
+ add_oembed_provider(/www\.meetup\.com\//, 'http://api.meetup.com/oembed')
+ add_oembed_provider(/www\.mixcloud\.com\//, 'https://www.mixcloud.com/oembed/')
+ # In order to support Private Videos
+ add_oembed_provider(/vimeo\.com\//, 'https://vimeo.com/api/oembed.json')
+ # NYT requires login so use oembed only
+ add_oembed_provider(/nytimes\.com\//, 'https://www.nytimes.com/svc/oembed/json/')
+
+ def always_https?
+ WhitelistedGenericOnebox.host_matches(uri, WhitelistedGenericOnebox.https_hosts) || super
+ end
+
+ def raw
+ return @raw if @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
+
+ def html_doc
+ return @html_doc if @html_doc
+
+ headers = nil
+ headers = { 'Cookie' => options[:cookie] } if options[:cookie]
+
+ @html_doc = Onebox::Helpers.fetch_html_doc(url, headers)
+ end
+
+ def get_oembed
+ @oembed ||= Onebox::Oembed.new(get_json_response)
+ end
+
+ def get_opengraph
+ @opengraph ||= ::Onebox::OpenGraph.new(html_doc)
+ end
+
+ 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)
+ end
+ end
+
+ twitter
+ end
+
+ 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
+
+ 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
+
+ protected
+
+ 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
+ end
+ end
+end