class Ocawari::Strategy::Tumblr

Constants

IMAGE_FILTER_EXPRESSION
LOWER_RESOLUTION
OPENGRAPH_COMMENTS

Private Instance Methods

parse() click to toggle source
# File lib/ocawari/strategy/tumblr.rb, line 14
def parse
  if /(#{OPENGRAPH_COMMENTS.join("|")})/.match?(page.to_xml)
    target_images = page.css("meta[property='og:image']")
  else
    target_images = page.css("img").select do |img|
      IMAGE_FILTER_EXPRESSION.match?(img["src"])
    end
  end

  if target_images.any?
    image_urls = target_images.flat_map do |node|
      [node["content"], node["src"]]
    end.compact
  else
    iframe = page.css("iframe").find do |iframe|
      iframe.attributes.values.any? do |v|
        /photoset/.match?(v.value)
      end
    end

    return [] unless iframe

    @page = Nokogiri::HTML(open(iframe["src"]))
    target_images = page.css("img").select do |img|
      IMAGE_FILTER_EXPRESSION.match?(img["src"])
    end

    image_urls = target_images.map { |img| img["src"] }
  end


  image_urls.map do |url|
    if LOWER_RESOLUTION.match?(url)
      url.sub(
        LOWER_RESOLUTION, 
        "1280#{File.extname(url)}"
      ).strip
    else
      url.strip
    end
  end
end