class Flickxtractr::Extractr
Attributes
url[R]
Public Class Methods
new(url)
click to toggle source
# File lib/flickxtractr/extractr.rb, line 13 def initialize(url) @url = url initialize_capybara! end
Private Class Methods
bitly_client()
click to toggle source
# File lib/flickxtractr/extractr.rb, line 127 def self.bitly_client @_bitly_client ||= begin Bitly.use_api_version_3 Bitly.configure do |config| config.api_version = 3 config.access_token = Flickxtractr.dotfile.bitly_access_token end Bitly.client end end
Public Instance Methods
generate_image!()
click to toggle source
# File lib/flickxtractr/extractr.rb, line 19 def generate_image! generate_page_screenshot! image_file = generate_image_file! apply_meta_from_extract!(image_file) end
generated_image_file_name()
click to toggle source
# File lib/flickxtractr/extractr.rb, line 35 def generated_image_file_name "#{Date.today.strftime("%Y%m%d")}_#{generated_image_slug}" end
generated_image_file_name_with_extension()
click to toggle source
# File lib/flickxtractr/extractr.rb, line 39 def generated_image_file_name_with_extension "#{generated_image_file_name}.#{page_image_uri.path.match(/\.(.+?)\z/)[1]}" end
generated_image_slug()
click to toggle source
# File lib/flickxtractr/extractr.rb, line 47 def generated_image_slug page_image_title.gsub(/\W+/, '-').downcase.gsub(/\A-|-\Z/, '') end
generated_screenshot_file_name()
click to toggle source
# File lib/flickxtractr/extractr.rb, line 43 def generated_screenshot_file_name "#{generated_image_file_name}_screenshot.png" end
page_image_description()
click to toggle source
# File lib/flickxtractr/extractr.rb, line 55 def page_image_description all(:css, "h2.photo-desc p").collect(&:text).join("\n") end
page_image_keywords()
click to toggle source
# File lib/flickxtractr/extractr.rb, line 59 def page_image_keywords tag_links = all(:css, "ul.tags-list li a") tag_links.collect { |a| a[:title] unless a.has_selector?(".remove-tag") }.compact.join("; ") end
page_image_title()
click to toggle source
# File lib/flickxtractr/extractr.rb, line 51 def page_image_title find(:css, "h1.photo-title").text end
page_image_uri()
click to toggle source
# File lib/flickxtractr/extractr.rb, line 26 def page_image_uri @_page_image_uri ||= begin find(:css, "div.download a").click within("div.download-dialog-tooltip ul.sizes") do URI(find(:xpath, "./li[@class='Original']/a")[:href]) end end end
page_owner_name()
click to toggle source
# File lib/flickxtractr/extractr.rb, line 64 def page_owner_name find(:css, "div.attribution-info a.owner-name.truncate").text end
page_owner_profile()
click to toggle source
# File lib/flickxtractr/extractr.rb, line 68 def page_owner_profile "https://www.flickr.com#{find(:css, "div.attribution-info a.owner-name.truncate")[:href]}" end
Private Instance Methods
apply_meta_from_extract!(image_file)
click to toggle source
# File lib/flickxtractr/extractr.rb, line 100 def apply_meta_from_extract!(image_file) MiniExiftool.new(image_file.path).tap do |rmi| image_meta.each { |k, v| rmi[k] = v } rmi.save! end end
generate_image_file!()
click to toggle source
# File lib/flickxtractr/extractr.rb, line 80 def generate_image_file! File.open(File.join(Flickxtractr.dotfile.output_dir, generated_image_file_name_with_extension), "wb").tap do |f| Net::HTTP.start(page_image_uri.host) do |http| begin http.request_get(page_image_uri.path) do |resp| resp.read_body do |segment| f.write(segment) end end ensure f.close end end end end
generate_page_screenshot!()
click to toggle source
# File lib/flickxtractr/extractr.rb, line 96 def generate_page_screenshot! page.save_screenshot(File.join(Flickxtractr.dotfile.screenshot_dir, generated_screenshot_file_name), full: true) end
image_meta()
click to toggle source
# File lib/flickxtractr/extractr.rb, line 107 def image_meta { "Headline" => page_image_title, "Description" => page_image_description, "Keywords" => page_image_keywords, "Credit" => page_owner_name, "Credit Line" => page_owner_name, "Source" => shortened_url_for(url).short_url, "Instructions" => shortened_url_for(public_screenshot_url).short_url, } end
initialize_capybara!()
click to toggle source
# File lib/flickxtractr/extractr.rb, line 74 def initialize_capybara! Capybara.current_driver = :poltergeist Capybara.javascript_driver = :poltergeist visit(url) end
public_screenshot_url()
click to toggle source
# File lib/flickxtractr/extractr.rb, line 119 def public_screenshot_url "#{Flickxtractr.dotfile.screenshot_public_url_prefix}/#{generated_screenshot_file_name}" end
shortened_url_for(url_to_shorten)
click to toggle source
# File lib/flickxtractr/extractr.rb, line 123 def shortened_url_for(url_to_shorten) self.class.bitly_client.shorten(url_to_shorten) end