class Flckr::Api

Public Class Methods

new(api_key) click to toggle source
# File lib/flckr/api.rb, line 10
def initialize(api_key)
  @api_key = api_key
end

Public Instance Methods

download(url, dir) click to toggle source
# File lib/flckr/api.rb, line 22
def download(url, dir)
  response = conn.get url
  File.open("#{dir}/#{SecureRandom.hex(5)}.jpg", 'wb') { |fp| fp.write(response.body) }
end
download_by(keywords, dir) click to toggle source
# File lib/flckr/api.rb, line 14
def download_by(keywords, dir)
  ten_keywords = Dict.make_ten_words keywords
  urls = search_all ten_keywords
  urls.map do |url|
    download(url, dir)
  end
end
generate_url(photo_id:, server_id:, farm_id:, secret:) click to toggle source
# File lib/flckr/api.rb, line 27
def generate_url(photo_id:, server_id:, farm_id:, secret:)
  "https://farm#{farm_id}.staticflickr.com/#{server_id}/#{photo_id}_#{secret}_m.jpg"
end
search_all(keywords) click to toggle source
# File lib/flckr/api.rb, line 31
def search_all(keywords)
  search(keywords)
    .map { |r| parse r }
    .reject(&:nil?)
    .map { |e| generate_url e }
end

Private Instance Methods

conn() click to toggle source
# File lib/flckr/api.rb, line 65
def conn
  Faraday.new(url: 'https://api.flickr.com') do |faraday|
    faraday.adapter :typhoeus
  end
end
params(api_key, keyword) click to toggle source
# File lib/flckr/api.rb, line 71
def params(api_key, keyword)
  { method: 'flickr.photos.search',
    api_key: api_key,
    text: keyword,
    format: 'json',
    nojsoncallback:  1,
    page: 1,
    per_page: 1 }
end
parse(response) click to toggle source
# File lib/flckr/api.rb, line 51
def parse(response)
  hash = JSON.parse response.body
  return $stderr.puts hash['message'] if hash['stat'] == 'fail'
  photo = hash['photos']['photo'].first
  to_hash photo unless photo.nil?
end
to_hash(photo) click to toggle source
# File lib/flckr/api.rb, line 58
def to_hash(photo)
  { photo_id: photo['id'],
    farm_id: photo['farm'],
    secret: photo['secret'],
    server_id: photo['server'] }
end