class MetaInspector::Parsers::ImagesParser

Public Class Methods

new(main_parser, options = {}) click to toggle source
Calls superclass method MetaInspector::Parsers::Base::new
# File lib/meta_inspector/parsers/images.rb, line 11
def initialize(main_parser, options = {})
  @download_images = options[:download_images]
  super(main_parser)
end

Public Instance Methods

best() click to toggle source

Returns either the Facebook Open Graph image, twitter suggested image or the largest image in the image collection

# File lib/meta_inspector/parsers/images.rb, line 22
def best
  owner_suggested || largest
end
favicon() click to toggle source

Return favicon url if exist

# File lib/meta_inspector/parsers/images.rb, line 73
def favicon
  query = '//link[@rel="icon" or contains(@rel, "shortcut")]'
  value = parsed.xpath(query)[0].attributes['href'].value
  @favicon ||= URL.absolutify(value, base_url, normalize: false)
rescue
  nil
end
images() click to toggle source
# File lib/meta_inspector/parsers/images.rb, line 16
def images
  self
end
largest() click to toggle source

Returns the largest image from the image collection, filtered for images that are more square than 10:1 or 1:10

# File lib/meta_inspector/parsers/images.rb, line 60
def largest
  @largest_image ||= begin
    imgs_with_size = with_size.dup
    imgs_with_size.keep_if do |url, width, height|
      ratio = width.to_f / height.to_f
      ratio > 0.1 && ratio < 10
    end
    url, width, height = imgs_with_size.first
    url
  end
end
owner_suggested() click to toggle source

Returns the parsed image from Facebook’s open graph property tags Most major websites now define this property and is usually relevant See doc at developers.facebook.com/docs/opengraph/ If none found, tries with Twitter image

# File lib/meta_inspector/parsers/images.rb, line 30
def owner_suggested
  suggested_img = content_of(meta['og:image']) || content_of(meta['twitter:image'])
  URL.absolutify(suggested_img, base_url, normalize: false) if suggested_img
end
with_size() click to toggle source

Returns an array of [img_url, width, height] sorted by image area (width * height)

# File lib/meta_inspector/parsers/images.rb, line 36
def with_size
  @with_size ||= begin
    img_nodes = parsed.search('//img').select{ |img_node| img_node['src'] }
    imgs_with_size = img_nodes.map do |img_node|
      [URL.absolutify(img_node['src'], base_url, normalize: false), img_node['width'], img_node['height']]
    end
    imgs_with_size.uniq! { |url, width, height| url }
    if @download_images
      imgs_with_size.map! do |url, width, height|
        width, height = FastImage.size(url) if width.nil? || height.nil?
        [url, width.to_i, height.to_i]
      end
    else
      imgs_with_size.map! do |url, width, height|
        width, height = [0, 0] if width.nil? || height.nil?
        [url, width.to_i, height.to_i]
      end
    end
    imgs_with_size.sort_by { |url, width, height| -(width.to_i * height.to_i) }
  end
end

Private Instance Methods

absolutified_images() click to toggle source
# File lib/meta_inspector/parsers/images.rb, line 87
def absolutified_images
  parsed_images.map { |i| URL.absolutify(i, base_url, normalize: false) }
end
content_of(content) click to toggle source
# File lib/meta_inspector/parsers/images.rb, line 95
def content_of(content)
  return nil if content.nil? || content.empty?
  content
end
images_collection() click to toggle source
# File lib/meta_inspector/parsers/images.rb, line 83
def images_collection
  @images_collection ||= absolutified_images
end
parsed_images() click to toggle source
# File lib/meta_inspector/parsers/images.rb, line 91
def parsed_images
  cleanup(parsed.search('//img/@src'))
end